Case study
Thai License Plate Recognition
Asynchronous Thai license plate recognition with YOLO, PaddleOCR, and LINE integration
Overview
What was built
- 01Built an asynchronous recognition pipeline that accepts JPEG and PNG uploads through a REST API, immediately returns a job ID, and exposes polling for progress and results
- 02Combined YOLO for plate detection and primary text recognition with a confidence-aware PaddleOCR fallback on the detected plate region
- 03Separated the Express API, BullMQ worker, Redis queue, shared image storage, and Python OCR service into clear operational boundaries
- 04Integrated LINE Messaging API so users can submit vehicle images and receive the recognized plate and confidence directly in chat
- 05Containerized the complete stack with Docker Compose and added validation, retry handling, retention cleanup, automated tests, and OCR evaluation tooling
Highlights
- Thai plate text, confidence, province, and bounding-box results
- Confidence-aware PaddleOCR fallback on YOLO detections
- Bounded retries and automatic image retention cleanup
- Dockerized API, worker, Redis, and OCR services