Badzboss

Case study

Thai License Plate Recognition

Asynchronous Thai license plate recognition with YOLO, PaddleOCR, and LINE integration

Thai License Plate Recognition interface

Overview

What was built

  1. 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
  2. 02Combined YOLO for plate detection and primary text recognition with a confidence-aware PaddleOCR fallback on the detected plate region
  3. 03Separated the Express API, BullMQ worker, Redis queue, shared image storage, and Python OCR service into clear operational boundaries
  4. 04Integrated LINE Messaging API so users can submit vehicle images and receive the recognized plate and confidence directly in chat
  5. 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