License Plate Recognition System
Introduction
In this article, I’ll walk you through a complete license plate recognition system that combines:
- YOLOv26 for vehicle detection
- Custom-trained YOLOv26 for plate detection
- PaddleOCR for text recognition
System Architecture: A 3-Stage Pipeline
Our system works in four distinct stages:
Input Image
↓
[Stage 1: Car Detection] ← YOLOv26 COCO Pre-trained
↓
[Stage 2: Plate Detection] ← Custom-Trained YOLOv26
↓
[Stage 3: Text Recognition] ← PaddleOCR
↓
Output: Annotated ImageStage 1: Vehicle Detection
We use YOLOv26 (Nano variant) pre-trained on COCO dataset to detect vehicles:
Instead of detecting plates across the entire image (which is slow and inaccurate), we first identify vehicles. This reduces the search space and improves accuracy.
Model Details:
- Model: YOLOv26 Nano
- Weights: COCO Pre-trained
- Detects: Cars, motorcycles, buses, trucks
Stage 2: Plate Detection
We crop each detected vehicle and run plate detection on that region:
A critical insight: running detection on cropped regions is:
- Faster — Smaller images process quicker
- More accurate — Model learns contextual information
- Fewer false positives — No random plate-like objects detected
The offset trick: When we detect plates in the cropped image at position (50, 30), but the crop started at (100, 50) in the original image, we need to convert:
Original Position = Cropped Position + Offset
(150, 80) = (50, 30) + (100, 50)This automatic conversion ensures all bounding boxes align perfectly with the original image.
Get nantawat srisuwong’s stories in your inbox
Join Medium for free to get updates from this writer.
Model Details:
- Model: Custom-trained YOLOv26
- Weights: best.pt (trained on license plate dataset)
Stage 3: Text Recognition
PaddleOCR recognizes the actual text on the plate
Why PaddleOCR? It supports:
- 80+ languages (including Thai)
- High accuracy on license plates
- Built-in language models (no retraining needed)
- Fast inference
Features:
- Thai/English/Multi-language
- Character-level confidence scores
- Bounding boxes for each character
- Auto-downloaded models
source: https://github.com/nantawat23308/plate_recognition.git
Resources
- YOLOv8 Documentation: https://docs.ultralytics.com/
- PaddleOCR GitHub: https://github.com/PaddlePaddle/PaddleOCR
- OpenCV Tutorials: https://docs.opencv.org/







