Kentekenherkenning met drieduizend beelden per seconde
Bij het bouwen van een automatische besturingspijplijn voor een parkeerterrein of snelweg, stuit kentekenherkenning snel op een prestatielimiet. Standaardbenaderingen met Tesseract of zware EasyOCR verbruiken tientallen milliseconden per bijgesneden kentekenrechthoek. Met meerdere camera's en auto's die doorstromen, begint de server te haperen of vereist een dure GPU-farm.

Onlangs stuitte ik op de repository fast-plate-ocr van ontwikkelaar ankandrew. Het project lost exact één smalle taak op, maar dan snel. Het neemt een kenteken dat al door een detector is bijgesneden en leest karakters af in fracties van een milliseconde.
Waarom een aparte bibliotheek voor kenteken-OCR
Bij computer vision voor ALPR (Automatic License Plate Recognition) wordt de pijplijn meestal verdeeld in twee stappen:
- De detector vindt de auto en snijdt het kenteken bij (bijvoorbeeld via YOLO).
- Het tekstherkenningsmodel leest het eigenlijke kenteken.
Universele tekst-OCR's zijn getraind op boeken, bonnetjes, borden en documenten. Hierdoor worden de architecturen log en maken ze regelmatig fouten bij kentekens met niet-standaard lettertypen of complexe hoeken.
De fast-plate-ocr bibliotheek gebruikt compacte modellen gebaseerd op de CCT (Compact Convolutional Transformer) architectuur. Deze netwerken zijn specifiek ontworpen voor het herkennen van kleine gestructureerde afbeeldingen zonder overbodige parameters. Dankzij de lichtgewicht architectuur en uitvoering via ONNX Runtime ligt de latentie op één afbeelding op de RTX 3090 tussen 0,32 en 0,67 ms. Omgezet naar doorvoer is dit 14.000 tot 3.000 kentekens per seconde op één kaart.
Wat er onder de motorkap zit en hoe het werkt
De repository bevat een kant-en-klare model-zoo, trainingsscripts en exporttools.
Kant-en-klare CCT-modellen
De auteur heeft verschillende modelversies voorbereid:
cct-xs-v1-global-modelencct-xs-v2-global-model— de kleinste netwerken met 0,3-0,4 ms latentie.cct-s-v1-global-modelencct-s-v2-global-model— iets diepere varianten waarbij prioriteit wordt gegeven aan nauwkeurigheid bij complexe kijkhoeken.
De tweede versies (v2) voegen een aparte head toe voor het classificeren van de regio of het land van het kenteken. Als de camera internationaal verkeer vastlegt, retourneert het model direct zowel de tekst als het land van oorsprong van het kenteken.
Flexibele runtime-selectie
Een veelvoorkomende frustratie bij het deployen van neurale netwerken is de afhankelijkheid van zware frameworks. Hier is inferentie gescheiden van training. De bibliotheek zelf installeert zonder zware afhankelijkheden, en de ONNX Runtime backend wordt geselecteerd voor de doelhardware via 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]
Dit is handig als het project moet worden ingebouwd in een lichtgewicht Docker-container of moet draaien op een microcomputer bij een slagboom.
Snelle start in code
Werken met de bibliotheek komt neer op een paar regels. Initialiseer eerst de recognizer door de naam van het gewenste model uit de hub door te geven, en geef vervolgens het pad naar een afbeelding of een NumPy-array.
from fast_plate_ocr import LicensePlateRecognizer
# Загружаем готовую предобученную модель
recognizer = LicensePlateRecognizer('cct-s-v2-global-model')
# Распознаем текст на вырезанной плашке
result = recognizer.run('test_plate.png')
print(result)
Als het model regiodetectie ondersteunt, kun je een betrouwbaarheidsscore opvragen:
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}")
Er is ook een ingebouwde methode voor het benchmarken van prestaties op je machine:
recognizer.benchmark()
Trainen en fijnafstellen voor je eigen kentekens
Hoewel globale modellen redelijk goed omgaan met standaardformaten, komen echte projecten vaak specifieke kentekens tegen: militair, diplomatisch, tweeregelig, of regionale formaten uit een bepaald land.
Het trainen gebruikt Keras 3, dus je kunt het netwerk trainen met elke vertrouwde backend — PyTorch, TensorFlow of JAX. Om afhankelijkheden voor training te installeren, voer je gewoon uit:
pip install fast-plate-ocr[train]
De repository bevat een kant-en-klare Jupyter Notebook (examples/tutorial_fine_tune_plate_model.ipynb) die het proces stap voor stap doorloopt:
- Voorbereiden van een dataset van gelabelde bijsnijdsels en een woordenboek van toegestane karakters.
- Configureren van augmentaties via een YAML-bestand.
- Fijnafstellen van het model op je eigen data.
- Exporteren van gewichten naar ONNX, TFLite of CoreML.
De mogelijkheid om een getraind netwerk te exporteren naar TFLite of CoreML neemt de hoofdpijn weg als je herkenning direct in een mobiele app moet inbedden voor controleurs of parkeerwachters.
Waar op te letten
Het project is uitsluitend gericht op de OCR-stap. Het zoekt niet naar een auto in het frame en corrigeert niet het perspectief van het kenteken als het onder een scherpe hoek is gefotografeerd.
Als je een heel frame met de hele straat invoert, zal het model onzin uitvoeren. Een detector (YOLOv8, RT-DETR of een andere) moet altijd voorafgaan aan fast-plate-ocr om de coördinaten van het kenteken te vinden en de afbeelding bij te snijden. Voor de beste resultaten met een zwaar gekantelde camera, voeg perspectieftransformatie toe voordat je in OCR invoert.
Voor wie is dit project
De bibliotheek zal aanspreken bij degenen die echte video-analyticsystemen bouwen en vechten om milliseconde latentie:
- Parkeerbeheersystemen en automatische slagbomen gebaseerd op mini-PC's.
- Controlecomplexen voor gewicht en afmetingen en verkeersmonitoring.
- Mobiele apps voor betaald parkeren handhaving.
Het project is open-source, de code is duidelijk en afhankelijkheden zijn minimaal. Als je moe bent van het vechten tegen de traagheid van universele OCR-bibliotheken bij transporttaken, zal fast-plate-ocr zowel serverresources als ontwikkeltijd besparen.
Gerelateerde projecten