Rozpoznawanie tablic rejestracyjnych z szybkością trzech tysięcy klatek na sekundę
Przy budowie automatycznego systemu kontroli na parkingu lub autostradzie, rozpoznawanie tablic rejestracyjnych szybko napotyka barierę wydajności. Standardowe podejścia z Tesseract lub ciężkim EasyOCR zużywają dziesiątki milisekund na każdy przycięty prostokąt tablicy rejestracyjnej. Przy wielu kamerach i samochodach przepływających przez system, serwer zaczyna się dusić lub wymaga kosztownej farmy GPU.

Ostatnio natknąłem się na repozytorium fast-plate-ocr autorstwa developera ankandrew. Projekt rozwiązuje dokładnie jedno wąskie zadanie, ale robi to szybko. Przyjmuje tablicę rejestracyjną już przyciętą przez detektor i odczytuje znaki w ułamkach milisekundy.
Dlaczego osobna biblioteka do OCR tablic rejestracyjnych
W widzeniu komputerowym dla ALPR (Automatic License Plate Recognition), potok jest zwykle podzielony na dwa kroki:
- Detektor znajduje samochód i przycina tablicę rejestracyjną (na przykład za pomocą YOLO).
- Model rozpoznawania tekstu odczytuje rzeczywisty numer tablicy.
Uniwersalne OCR-y tekstowe są trenowane na książkach, paragonach, znakach i dokumentach. Z tego powodu architektury kończą się jako rozbudowane i regularnie popełniają błędy na tablicach z niestandardowymi czcionkami lub skomplikowanymi kątami.
Biblioteka fast-plate-ocr wykorzystuje kompaktowe modele oparte na architekturze CCT (Compact Convolutional Transformer). Te sieci są specjalnie zaprojektowane do rozpoznawania małych ustrukturyzowanych obrazów bez zbędnych parametrów. Dzięki lekkiej architekturze i wykonaniu przez ONNX Runtime, opóźnienie na pojedynczym obrazie na RTX 3090 wynosi od 0,32 do 0,67 ms. Przeliczając na przepustowość, daje to od 14 000 do 3 000 tablic na sekundę na jednej karcie.
Co pod maską i jak to działa
Repozytorium zawiera gotową model zoo, skrypty trenowania i narzędzia eksportu.
Gotowe modele CCT
Autor przygotował kilka wersji modeli:
cct-xs-v1-global-modelicct-xs-v2-global-model— najmniejsze sieci z opóźnieniem 0,3-0,4 ms.cct-s-v1-global-modelicct-s-v2-global-model— nieco głębsze warianty, gdzie priorytetem jest dokładność przy skomplikowanych kątach widzenia.
Drugie wersje (v2) dodają osobny head do klasyfikacji regionu lub kraju tablicy rejestracyjnej. Jeśli kamera rejestruje ruch międzynarodowy, model natychmiast zwraca zarówno tekst, jak i kraj pochodzenia tablicy.
Elastyczny wybór środowiska wykonawczego
Częstym problemem przy wdrażaniu sieci neuronowych jest związanie się z ciężkimi frameworkami. Tutaj wnioskowanie jest oddzielone od trenowania. Sama biblioteka instaluje się bez ciężkich zależności, a backend ONNX Runtime jest wybierany dla docelowego sprzętu poprzez pip extras:
# Для обычного процессора
pip install fast-plate-ocr[onnx]
# Для видеокарт NVIDIA
pip install fast-plate-ocr[onnx-gpu]
# Оптимизация под процессоры Intel
pip install fast-plate-ocr[onnx-openvino]
# Поддержка DirectML для Windows
pip install fast-plate-ocr[onnx-directml]
# Чипсеты Qualcomm
pip install fast-plate-ocr[onnx-qnn]
Jest to wygodne, jeśli projekt musi być zbudowany w lekkim kontenerze Docker lub uruchomiony na mikrokontrolerze przy szlabanie.
Szybki start w kodzie
Praca z biblioteką sprowadza się do kilku linijek. Najpierw zainicjuj recognizer, przekazując nazwę desired model z huba, a następnie podaj ścieżkę do obrazu lub tablicę NumPy.
from fast_plate_ocr import LicensePlateRecognizer
# Загружаем готовую предобученную модель
recognizer = LicensePlateRecognizer('cct-s-v2-global-model')
# Распознаем текст на вырезанной плашке
result = recognizer.run('test_plate.png')
print(result)
Jeśli model obsługuje wykrywanie regionu, możesz poprosić o wynik pewności:
from fast_plate_ocr import LicensePlateRecognizer
recognizer = LicensePlateRecognizer('cct-s-v2-global-model')
prediction = recognizer.run('test_plate.png', return_confidence=True)[0]
print(f"Номер: {prediction.text}")
print(f"Регион: {prediction.region}")
print(f"Уверенность в регионе: {prediction.region_prob:.2f}")
Jest też wbudowana metoda do benchmarkowania wydajności na Twojej maszynie:
recognizer.benchmark()
Trenowanie i dostrajanie pod własne tablice
Chociaż globalne modele radzą sobie rozsądnie ze standardowymi formatami, projekty w świecie rzeczywistym często napotykają specyficzne tablice rejestracyjne: wojskowe, dyplomatyczne, dwulinijkowe lub formaty regionalne z określonego kraju.
Trenowanie wykorzystuje Keras 3, więc możesz trenować sieć z dowolnym znajomym backendem — PyTorch, TensorFlow lub JAX. Aby zainstalować zależności do trenowania, po prostu uruchom:
pip install fast-plate-ocr[train]
Repozytorium zawiera gotowy Jupyter Notebook (examples/tutorial_fine_tune_plate_model.ipynb), który przeprowadza przez proces krok po kroku:
- Przygotowanie zbioru danych z etykietowanymi przycięciami i słownikiem dozwolonych znaków.
- Konfiguracja augmentacji przez plik YAML.
- Dostrajanie modelu na własnych danych.
- Eksport wag do ONNX, TFLite lub CoreML.
Możliwość eksportu wytrenowanej sieci do TFLite lub CoreML eliminuje problem, jeśli musisz osadzić rozpoznawanie bezpośrednio w aplikacji mobilnej dla inspektorów lub pracowników parkingu.
Na co zwrócić uwagę
Projekt koncentruje się tylko na kroku OCR. Nie wyszukuje samochodu w kadrze i nie koryguje perspektywy tablicy, jeśli została zrobiona pod ostrym kątem.
Jeśli podasz całą klatkę z całą ulicą, model zwróci śmieci. Detektor (YOLOv8, RT-DETR lub jakikolwiek inny) musi zawsze poprzedzać fast-plate-ocr, aby znaleźć współrzędne tablicy i przyciąć obraz. Dla najlepszych wyników przy mocno przechylonej kamerze, dodaj transformację perspektywy przed wprowadzeniem do OCR.
Dla kogo jest ten projekt
Biblioteka przypadnie do gustu tym, którzy budują rzeczywiste systemy analizy wideo i walczą o opóźnienie rzędu milisekund:
- Systemy zarządzania parkingiem i automatyczne szlabany oparte na mini-PC.
- Kompleksy kontroli wagowej i wymiarowej oraz monitorowania ruchu drogowego.
- Aplikacje mobilne do egzekwowania płatnego parkowania.
Projekt jest open-source, kod jest przejrzysty, a zależności minimalne. Jeśli masz dość walki ze spowolnieniem uniwersalnych bibliotek OCR w zadaniach transportowych, fast-plate-ocr zaoszczędzi zarówno zasoby serwera, jak i czas разработки.
Powiązane projekty