>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
Python

Reconnaissance de plaques d'immatriculation à trois mille images par seconde

Lorsqu'on construit un pipeline de contrôle automatique pour un parking ou une autoroute, la reconnaissance de plaques d'immatriculation se heurte rapidement à un mur de performance. Les approches standard avec Tesseract ou EasyOCR lourd consomment des dizaines de millisecondes par rectangle de plaque recadré. Avec plusieurs caméras et des véhicules qui circulent, le serveur commence à saturer ou nécessite une ferme de GPU coûteuse.

Intro

Je suis récemment tombé sur le dépôt fast-plate-ocr du développeur ankandrew. Le projet résout exactement une tâche étroite, mais le fait rapidement. Il prend une plaque d'immatriculation déjà recadrée par un détecteur et lit les caractères en fractions de milliseconde.

Pourquoi une bibliothèque séparée pour l'OCR des plaques d'immatriculation

En vision par ordinateur pour l'ALPR (Automatic License Plate Recognition), le pipeline est généralement divisé en deux étapes :

  1. Le détecteur trouve le véhicule et recadre la plaque d'immatriculation (par exemple, via YOLO).
  2. Le modèle de reconnaissance de texte lit le numéro de plaque réel.

Les OCR universels de texte sont entraînés sur des livres, des reçus, des panneaux et des documents. De ce fait, les architectures deviennent volumineuses et commettent régulièrement des erreurs sur les plaques avec des polices non standard ou des angles complexes.

La bibliothèque fast-plate-ocr utilise des modèles compacts basés sur l'architecture CCT (Compact Convolutional Transformer). Ces réseaux sont spécifiquement conçus pour reconnaître des images structurées de petite taille sans paramètres redondants. Grâce à l'architecture légère et à l'exécution via ONNX Runtime, la latence sur une seule image sur RTX 3090 varie de 0,32 à 0,67 ms. Traduit en débit, cela représente 14 000 à 3 000 plaques par seconde sur une seule carte.

Ce qu'il y a sous le capot et comment ça fonctionne

Le dépôt comprend un zoo de modèles prêt à l'emploi, des scripts d'entraînement et des outils d'exportation.

Modèles CCT prêts à l'emploi

L'auteur a préparé plusieurs versions de modèles :

  • cct-xs-v1-global-model et cct-xs-v2-global-model — les réseaux les plus petits avec une latence de 0,3 à 0,4 ms.
  • cct-s-v1-global-model et cct-s-v2-global-model — des variantes légèrement plus profondes où la priorité est donnée à la précision sur les angles de vue complexes.

Les secondes versions (v2) ajoutent une tête séparée pour classifier la région ou le pays de la plaque d'immatriculation. Si la caméra capture du trafic international, le modèle retourne immédiatement à la fois le texte et le pays d'origine de la plaque.

Sélection flexible du runtime

Un point douloureux courant lors du déploiement de réseaux de neurones est d'être lié à des frameworks lourds. Ici, l'inférence est séparée de l'entraînement. La bibliothèque elle-même s'installe sans dépendances lourdes, et le backend ONNX Runtime est sélectionné pour le matériel cible via les extras pip :

# Для обычного процессора
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]

C'est pratique si le projet doit être intégré dans un conteneur Docker léger ou exécuté sur un micro-ordinateur à une barrière.

Démarrage rapide dans le code

Travailler avec la bibliothèque se résume à quelques lignes. D'abord, initialisez le reconnaisseur en passant le nom du modèle souhaité depuis le hub, puis fournissez le chemin vers une image ou un tableau NumPy.

from fast_plate_ocr import LicensePlateRecognizer

# Загружаем готовую предобученную модель
recognizer = LicensePlateRecognizer('cct-s-v2-global-model')

# Распознаем текст на вырезанной плашке
result = recognizer.run('test_plate.png')
print(result)

Si le modèle prend en charge la détection de région, vous pouvez demander un score de confiance :

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}")

Il existe également une méthode intégrée pour évaluer les performances sur votre machine :

recognizer.benchmark()

Entraînement et affinage pour vos propres plaques

Bien que les modèles globaux gèrent raisonnablement bien les formats standard, les projets réels rencontrent souvent des plaques d'immatriculation spécifiques : militaires, diplomatiques, à deux lignes ou formats régionaux d'un pays particulier.

L'entraînement utilise Keras 3, vous pouvez donc entraîner le réseau avec n'importe quel backend familier — PyTorch, TensorFlow ou JAX. Pour installer les dépendances d'entraînement, exécutez simplement :

pip install fast-plate-ocr[train]

Le dépôt contient un Jupyter Notebook prêt à l'emploi (examples/tutorial_fine_tune_plate_model.ipynb) qui guide à travers le processus étape par étape :

  1. Préparation d'un ensemble de données de recadrages étiquetés et d'un dictionnaire de caractères autorisés.
  2. Configuration des augmentations via un fichier YAML.
  3. Affinage du modèle sur vos propres données.
  4. Exportation des poids vers ONNX, TFLite ou CoreML.

La possibilité d'exporter un réseau entraîné vers TFLite ou CoreML élimine les ennuis si vous devez intégrer la reconnaissance directement dans une application mobile pour les inspecteurs ou les gardiens de parking.

Ce qu'il faut garder à l'esprit

Le projet est concentré uniquement sur l'étape OCR. Il ne recherche pas un véhicule dans l'image et ne corrige pas la perspective de la plaque si elle a été photographiée sous un angle aigu.

Si vous fournissez une image entière avec toute la rue, le modèle produira des résultats incohérents. Un détecteur (YOLOv8, RT-DETR ou tout autre) doit toujours précéder fast-plate-ocr pour trouver les coordonnées de la plaque et recadrer l'image. Pour de meilleurs résultats avec une caméra fortement inclinée, ajoutez une transformation de perspective avant de passer à l'OCR.

À qui ce projet est destiné

La bibliothèque plaira à ceux qui construisent de véritables systèmes d'analytique vidéo et qui se battent pour la latence en millisecondes :

  • Systèmes de gestion de parking et barrières automatiques basés sur des mini-PC.
  • Complexes de contrôle du poids et des dimensions et surveillance du trafic.
  • Applications mobiles pour le contrôle du stationnement payant.

Le projet est open-source, le code est clair et les dépendances sont minimales. Si vous en avez assez de lutter contre la lenteur des bibliothèques OCR universelles sur les tâches de transport, fast-plate-ocr fera gagner à la fois des ressources serveur et du temps de développement.

Projets similaires