AI / Computer Vision

License Plate Recognition (ALPR)

System do automatycznego wykrywania i odczytywania tablic rejestracyjnych ze zdjęć - własnoręcznie dotrenowany model detekcji połączony z OCR, zbudowany według rygorystycznych praktyk inżynierii oprogramowania.

Rok2025
RolaProgramista
Czas trwaniaok. 2-3 tygodnie
PythonYOLOv8OpenCVEasyOCRONNXComputer Vision
License Plate Recognition (ALPR)
License Plate Recognition (ALPR)przegląd
Przegląd

Historia tego projektu

Wyzwanie
Problem

Odczyt tablic rejestracyjnych ze zwykłych zdjęć jest trudniejszy niż się wydaje - tablice pojawiają się pod różnym kątem, w różnej odległości i oświetleniu, a gotowe systemy OCR notorycznie mylą podobne znaki (0/O, 1/I, 8/B, 2/Z).

Podejście
Rozwiązanie

Dotrenowałam YOLOv8n (start z wag wytrenowanych na COCO) na zbiorze Poland Vehicle License Plate Dataset (Kaggle, autor: piotrstefaskiue - kaggle.com/datasets/piotrstefaskiue/poland-vehicle-license-plate-dataset) przez 30 epok w rozdzielczości 640px, aby zlokalizować tablicę. Model wyeksportowałam do ONNX dla szybszej inferencji na CPU. Wycięty fragment ze zdjęcia tablicy odczytuje EasyOCR, a warstwa normalizacji poprawia znaki najczęściej mylone przez OCR (0/O, 1/I, 8/B, 2/Z) przed porównaniem wyników. Dedykowany moduł metryk liczy IoU oraz dokładność OCR na 100-zdjęciowym zbiorze testowym.

88%
Rezultat
Efekt

Model osiągnął ok. 88% dokładności na zbiorze testowym, mierzonej przez autorski moduł metryk łączący IoU detekcji z dokładnością OCR na 100 zdjęciach testowych.

Proces

Jak to zostało zaprojektowane

Krok 01

Dotrenowanie YOLOv8n do wykrywania tablic

Zaczęłam od wag wytrenowanych na COCO i dotrenowałam YOLOv8n na zbiorze Poland Vehicle License Plate Dataset (Kaggle, autor: piotrstefaskiue) przez 30 epok w rozdzielczości 640px, aby lokalizować tablicę bezpośrednio na zdjęciu.

  • YOLOv8n dotrenowany na bazie wag COCO
  • 30 epok w rozdzielczości 640×640
  • Trenowany na zbiorze Poland Vehicle License Plate Dataset (Kaggle)
Krok 02

Eksport do ONNX dla szybkiej inferencji na CPU

Wytrenowany model detekcji wyeksportowałam do formatu ONNX, dzięki czemu działa sprawnie bez GPU, zachowując szybką inferencję na standardowym sprzęcie.

  • Model wyeksportowany do ONNX
  • Zoptymalizowany pod inferencję tylko na CPU
  • Brak zależności od GPU w czasie działania
Krok 03

Odczyt tekstu za pomocą EasyOCR

Wycięty fragment zdjęcia z wykrytą tablicą przekazywałam do EasyOCR w celu odczytania znaków, oddzielając etap odczytu tekstu od detekcji.

  • EasyOCR odczytuje wycięty fragment z tablicą
  • Oddzielony od pipeline'u detekcji
  • Działa dla różnych czcionek i układów tablic
Krok 04

Warstwa normalizacji znaków

Dodałam etap normalizacji, który poprawia znaki najczęściej mylone przez OCR przed porównaniem wyników, adresując pomyłki 0/O, 1/I, 8/B i 2/Z, które nękają surowe wyniki OCR.

  • Reguły korygujące najczęściej mylone znaki
  • Stosowane przed porównaniem wyników
  • Dotyczy pomyłek 0/O, 1/I, 8/B, 2/Z
Krok 05

Moduł metryk do ewaluacji

Zbudowałam dedykowany moduł metryk liczący IoU dla dokładności detekcji oraz dokładność OCR względem danych referencyjnych, uruchamiany na 100-zdjęciowym zbiorze testowym, aby zwalidować cały pipeline.

  • Liczy IoU dla dokładności lokalizacji tablicy
  • Liczy dokładność OCR na poziomie znaków/ciągów
  • Ewaluacja na 100-zdjęciowym zbiorze testowym
Stos technologiczny

Zbudowane przy użyciu

PythonYOLOv8OpenCVEasyOCRONNXComputer Vision