Reading Vehicle Rgistration Number by YOLO

Dhiraj Patra
2 min readSep 22, 2024

--

pexel

End-to-End Number Plate Detection and Recognition using YOLO

Application Flow:

  1. Image Capture: Acquire an image of a vehicle.
  2. Image Preprocessing: Resize and normalize the image.
  3. Number Plate Detection: Use YOLOv3 (or YOLOv4/v5) to locate the number plate region.
  4. Number Plate Extraction: Crop the detected region from the original image.
  5. Image Enhancement: Improve the quality of the extracted image (e.g., thresholding, edge detection).
  6. OCR: Use Tesseract-OCR to recognize text from the enhanced image.
  7. Number Plate Recognition: Validate and format the extracted text.

Implementation Details:

  • YOLO Model: Use a pre-trained YOLO model and fine-tune it on a dataset of number plate images.
  • OCR Library: Employ Tesseract-OCR with a custom-trained model for number plate fonts.
  • Programming Language: Python is a popular choice, with libraries like OpenCV, NumPy, and PyTesseract.

Example Code Snippet (Python):

Python

import cv2
import numpy as np
import pytesseract
# Load YOLO model
net = cv2.dnn.readNet("yolov3.weights", "yolov3.cfg")
# Load image
img = cv2.imread("image.jpg")
# Preprocess image
img = cv2.resize(img, (416, 416))
img = img / 255.0
# Detect number plate
outputs = net.forward(img)
for output in outputs:
for detection in output:
scores = detection[5:]
class_id = np.argmax(scores)
confidence = scores[class_id]
if confidence > 0.5 and class_id == 0: # Number plate class
x, y, w, h = detection[0:4] * np.array([img.shape[1], img.shape[0], img.shape[1], img.shape[0]])
x, y, w, h = int(x), int(y), int(w), int(h)
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
# Extract number plate region
number_plate = img[y:y+h, x:x+w]
# Enhance number plate image
number_plate = cv2.cvtColor(number_plate, cv2.COLOR_BGR2GRAY)
number_plate = cv2.threshold(number_plate, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
# Recognize number plate text
text = pytesseract.image_to_string(number_plate, lang="eng", config="--psm 11")
print(text)

Dataset and Training:

  • Collect a dataset of number plate images with various backgrounds, lighting conditions, and fonts.
  • Label the dataset with bounding boxes around the number plates.
  • Fine-tune the YOLO model on your dataset.

Deployment:

  • Deploy the application on a suitable platform (e.g., cloud, edge device).
  • Integrate with a camera or image source.
  • Optimize for real-time performance.

--

--

Dhiraj Patra
Dhiraj Patra

Written by Dhiraj Patra

AI Strategy, Generative AI, AI & ML Consulting, Product Development, Startup Advisory, Data Architecture, Data Analytics, Executive Mentorship, Value Creation

No responses yet