Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
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()

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
Binary file not shown.
Loading