web-dev-qa-db-fra.com

Quels sont les bons algorithmes pour la détection de la plaque d'immatriculation du véhicule?

Contexte

Pour mon dernier projet à l'université, je développe une application de détection de plaque d'immatriculation de véhicule. Je me considère comme un programmeur intermédiaire, mais mes connaissances en mathématiques ne manquent de rien au-delà de l'école secondaire, ce qui rend la production des bonnes formules plus difficile qu'il ne le devrait probablement.

J'ai passé beaucoup de temps à chercher des documents académiques tels que:

En ce qui concerne le calcul, je suis perdu. Grâce à ces tests, différentes images graphiques se sont avérées productives, par exemple:

alt text

à

alt text

Cependant, cette approche ne fonctionnait que pour cette image particulière, et si les techniques étaient appliquées à différentes images, je suis sûr que la conversion serait plus médiocre. J'ai entendu parler d'une formule appelée "transformation de la morphologie du chapeau", qui a les effets suivants:

Fondamentalement, la transformation conserve tous les détails sombres de l'image et élimine tout le reste (y compris les grandes régions sombres et les régions claires).

Je ne trouve pas beaucoup d’informations à ce sujet, mais l’image dans la documentation vers la fin du rapport montre son efficacité. 

Autres contraintes

  • Développer en C # 
  • Limiter le projet aux plaques d'immatriculation britanniques uniquement 
  • Je peux choisir les images à convertir en démonstration 

Question

J'ai besoin de conseils sur les techniques de transformation sur lesquelles je devrais me concentrer et sur les algorithmes qui peuvent m'aider. 

EDIT: Nouvelles informations présentes sur Suite - Détection de la plaque d'immatriculation du véhicule

58
Ash

Un certain nombre d'approches peuvent être adoptées, mais la première stratégie qui s'impose est la suivante:

  • Découverte/recherche: Identifiez le jeu de couleurs et de polices à identifier. Si votre exemple de photo est représentatif de la plupart des assiettes britanniques, votre travail en sera facilité. Par exemple. Police simple, singulière et lettrage noir sur fond blanc
  • Code: Tentative d’identification d’une zone rectangulaire d’une image dans laquelle les couleurs sont principalement blanches et noires. Ce n'est pas un problème épineux en maths et cela devrait vous donner la région de votre plaque d'immatriculation sur laquelle vous concentrer.
  • Code: Faites un peu de ménage dans votre sous-région, par exemple en le convertissant en noir et blanc (monochrome) et éventuellement en le redimensionnant/déplaçant en un joli rectangle étroit.
  • Utiliser l'API: Ensuite, utilisez un algorithme OCR (reconnaissance optique de caractères) existant sur votre région d'image sous-sélectionnée afin de voir si vous pouvez lire le texte.

Comme je l’ai dit plus tôt, c’est une stratégie parmi tant d’autres, mais c’est une stratégie qui nécessite le moins de calculs lourds… c’est-à-dire si vous pouvez trouver une implémentation OCR qui fonctionnera pour vous.

13
Paul Sasik

J'ai réalisé un projet similaire il y a quelques années à Java. J'ai d'abord appliqué l'opérateur Sobel puis masqué toute l'image avec l'image d'une plaque (avec l'opérateur Sobel également appliqué). La région de coïncidence maximale est celle où se trouve la plaque. Appliquez ensuite un OCR à la région sélectionnée pour obtenir le numéro.

3
rodrigoap

Le Royaume-Uni a déjà un système qui le fait. Je me souviens d’avoir vu une émission télévisée dans laquelle ils montraient qu’ils pouvaient trouver une voiture à Londres en 10 minutes (s’ils connaissaient le numéro et que la voiture roulait). numéro: http://fr.wikipedia.org/wiki/Automatic_number_plate_recognition

1
Mircea

Vous pouvez également vous référer à Bibliothèque de reconnaissance automatique de plaques d'immatriculation & cette requête . Cela vous donnera également une idée de la façon d’aborder les choses et des solutions existantes.

Mais comme Paul vous y a répondu, vous devez d'abord essayer de trouver la plaque d'immatriculation rectangulaire à partir de l'image complète, puis la binariser et d'utiliser les bibliothèques d'OCR disponibles (Tesseract serait recommandé).

Vous pouvez vous référer à ce link qui vous aidera à trouver la plaque rectangulaire. Vous devez utiliser les bibliothèques openCV, vous n’aurez donc pas besoin de beaucoup de mathématiques, mais une bonne compréhension de ce qui se passe dans les coulisses peut vous aider à résoudre le problème de manière plus efficace.

1
Mayank

Il vous dit exactement comment calculer la transformation du bas du chapeau (pour moi, elle ressemble à une transformation de seuil gradué inversé).

La première chose à faire est de mettre en œuvre les deux fonctions de morphologie dilatation et érosion.

Pour ce faire, vous avez besoin de vos f et b, puis vous calculez la fonction sur une petite région de l’image en un point qui conserve la plus grande valeur trouvée.

(f ⊕ b)(s, t) = max{f (s − x, t − y) + b(x, y)
|(s − x), (t − y) ∈ Df ; (x, y)∈Db}

Cela dit, prenez le maximum de l'expression sur tous les points de la région du domaine (comme un petit rectangle centré sur votre point (s, t).

pseudo-code simple serait

max = -infinity // for the point (s,t) on the image, must compute this for all points
for(x = -5 to 5)
for(y = -5 to 5)
max = Max(max, f(s - x, t - y) + b(x,y))

effectivement, nous avons maintenant une nouvelle image des valeurs maximales.

C'est en fait assez simple, donc ne compliquez pas les choses (nous ajoutons simplement b (x, y) à chaque point de la région et recherchons celui qui donne la valeur maximale).

vous faites la même chose pour l'érosion (très semblable à ci-dessus)

Maintenant, l'ouverture et la fermeture est la composition des deux

Vous pouvez penser en premier lieu à une dilatation puis à une érosion pour une ouverture.

Il est dit enfin de soustraire la fermeture de l'image d'origine et vous devriez avoir votre transformation.

1
AbstractDissonance

Si le problème de la détection de la présence d’une plaque d’immatriculation vous intéresse (par opposition à sa reconnaissance), vous devriez probablement regarder la détection de texte dans les images, car elle est liée à ce que vous faites.

Cette question concerne la vôtre: Algorithme permettant de détecter la présence de texte sur une image

1
carlosdc

Je suggère d'utiliser un service ou un tiers pour cela. Open ALPR fournit un package open source très précis pour ce service.

Open ALPR - https://www.openalpr.com/

Démo de la vidéo Open ALPR

https://www.youtube.com/watch?v=E-U_H9EbW60

Ou vous pouvez utiliser une API -

API Macgyver Computer Vision

https://askmacgyver.com/explore/program/license-plate-recognition/3X5D3d2k

Dans cette API, vous feriez simplement une demande de publication à -

https://macgyver.services

Exemple de charge utile

{
id: "3X5D3d2k",
key: "free",
data: {
    "image_url": "https://storage.googleapis.com/marketing-files/program-markdown-assets/license-detection/license-plate.jpg",
    "country": "us",
    "numberCandidates": 2
  }
}

 enter image description here

L'image ci-dessus renverrait ce qui suit - 

"plate": "284FH8"
"confidence": 90.601013
1
Timothy Moody