Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 67 additions & 0 deletions Number-Plate-Detection/Numberplatedetection.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import cv2
import os
import time

cascade_path = 'indian_license_plate.xml'
plate_cascade = cv2.CascadeClassifier(cascade_path)
if plate_cascade.empty():
print(f"Error loading cascade from {cascade_path}")
exit()

os.makedirs('plates', exist_ok=True)
video_path = 'Trafic Camera.mp4'
cap = cv2.VideoCapture(video_path)
if not cap.isOpened():
print(f"Error opening video file {video_path}")
exit()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have requested that you remove the required files (mp4 file and xml file) for this program to work properly. Here's a workaround that could work for your program:

Suggested change
import cv2
import os
import time
cascade_path = 'indian_license_plate.xml'
plate_cascade = cv2.CascadeClassifier(cascade_path)
if plate_cascade.empty():
print(f"Error loading cascade from {cascade_path}")
exit()
os.makedirs('plates', exist_ok=True)
video_path = 'Trafic Camera.mp4'
cap = cv2.VideoCapture(video_path)
if not cap.isOpened():
print(f"Error opening video file {video_path}")
exit()
import cv2
import os
import time
import urllib.request
import tempfile
def download_if_url(path):
if isinstance(path, str) and path.startswith(('http://', 'https://')):
try:
suffix = os.path.splitext(path)[1] or ''
tmp = tempfile.NamedTemporaryFile(delete=False, suffix=suffix)
tmp.close()
print(f"Downloading {path} ...")
urllib.request.urlretrieve(path, tmp.name)
return tmp.name
except Exception as e:
print(f"Failed to download {path}: {e}")
return path
return path
cascade_path = 'https://raw.githubusercontent.com/iamdevdhanush/Number-Plate-Detection/refs/heads/main/indian_license_plate.xml'
cascade_path = download_if_url(cascade_path)
plate_cascade = cv2.CascadeClassifier(cascade_path)
if plate_cascade.empty():
print(f"Error loading cascade from {cascade_path}")
exit()
os.makedirs('plates', exist_ok=True)
video_path = 'https://github.com/iamdevdhanush/Number-Plate-Detection/raw/refs/heads/main/Trafic%20Camera.mp4'
video_path = download_if_url(video_path)
cap = cv2.VideoCapture(video_path)
if not cap.isOpened():
print(f"Error opening video file {video_path}")
exit()

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @iamwatchdogs,

I’ve updated the implementation to remove any dependency on local mp4 or xml files by using OpenCV’s built-in Haar cascade and defaulting to webcam input.

I’ve also performed an interactive rebase and force-pushed the branch so the mp4 and xml files are completely removed from the commit history, and removed the license section from the README.

Please let me know if any further changes are required.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @iamdevdhanush,

We have reviewed your changes. We want to remind you that reverting changes doesn't completely remove the traces of"input" files (such as mp4 or xml). These files can be recovered by reverting the "deleted" revert commits.

We want you to perform interactive rebasing for this branch to edit the initial commit (i.e., 6f94836c) and delete the mp4 & xml file, and during the same interactive rebasing session, remove the reverting commit that you have made. After all these changes, force-push your reorganised commit history to the remote branch.

We can proceed with these changes. Please feel free to ask any questions for clarification or help needed.

Tip

Here's a sample YouTube Tutorial for using interactive rebasing.


plate_count = 0
last_save_time = 0
save_delay = 0.5

while True:
ret, frame = cap.read()
if not ret:
print("End of video or cannot read frame.")
break

frame = cv2.resize(frame, (960, 540))

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

gray = cv2.equalizeHist(gray)

gray = cv2.bilateralFilter(gray, 11, 17, 17)

roi = gray[270:540, :]

plates = plate_cascade.detectMultiScale(
roi,
scaleFactor=1.05,
minNeighbors=7,
minSize=(60, 20)
)

current_time = time.time()

for (x, y, w, h) in plates:
y += 270

aspect_ratio = w / h
if 2 < aspect_ratio < 5:
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

if current_time - last_save_time > save_delay:
plate_count += 1
plate_img = frame[y:y+h, x:x+w]
cv2.imwrite(f"plates/plate_{plate_count}.jpg", plate_img)
print(f"Saved plate_{plate_count}.jpg")
last_save_time = current_time

cv2.imshow("Number Plate Detection", frame)

if cv2.waitKey(1) & 0xFF == ord('q'):
print("Quit pressed, exiting.")
break
cap.release()
cv2.destroyAllWindows()
88 changes: 88 additions & 0 deletions Number-Plate-Detection/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# Number Plate Detection 🚘🔍

This project is a simple Number Plate Detection system built using **OpenCV** and **Python**. It uses image processing techniques and a pre-trained Haar Cascade classifier to detect number plates in real-time from video streams or static images.

## 📸 Demo

![Screenshot 2025-05-21 160620](https://github.com/user-attachments/assets/fd6d233e-a948-4015-aab3-50ec09ac9f75)


## 🧠 Features

- Real-time number plate detection using webcam
- Uses OpenCV's Haar Cascade Classifier
- Highlights detected number plates with rectangles
- Can be extended for OCR (Optical Character Recognition)

## 🛠️ Technologies Used

- Python 3.x
- OpenCV
- Haar Cascade Classifier

## 📁 Project Structure

Number-Plate-Detection/


├── Numberplatedetection.py # Main script for plate detection

├── haarcascade_russian_plate_number.xml # Haar Cascade model for number plates

└── README.md # Project documentation

## 🚀 How to Run

### 1. Clone the Repository

```bash
git clone https://github.com/iamdevdhanush/Number-Plate-Detection.git
cd Number-Plate-Detection
```

2. Install Requirements

```bash
pip install opencv-python
```

3. Run the Script

```bash
python Numberplatedetection.py
```

📦 Dependencies
```
opencv-python
```
You can install them using pip:

```
pip install -r requirements.txt
```

📌 Notes

Make sure you have the correct Haar Cascade XML file (haarcascade_russian_plate_number.xml).

This project is a basic implementation and doesn't perform OCR. You can extend it using pytesseract for extracting plate text.

🤖 Future Improvements

Add OCR to extract text from number plates

Improve accuracy with deep learning-based detection (YOLO, SSD)

Support detection in images and video files

📄 License

This project is licensed under the MIT License.

🙋‍♂️ Author

Dhanush

GitHub
Binary file added Number-Plate-Detection/Trafic Camera.mp4
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove this mp4 file from this PR. The PR shouldn't include any binary files.

Binary file not shown.
Loading