Quels sont les bons algorithmes pour la plaque d'immatriculation de détection?
Arrière-plan
Pour mon projet final à l'université, je suis le développement d'un véhicule plaque d'immatriculation en application de détection. Je me considère comme un intermédiaire programmeur, mais mes connaissances mathématiques manque de rien au-dessus de l'école secondaire, ce qui rend la production du droit des formules plus difficile qu'elle ne devrait probablement être.
J'ai passé une bonne quantité de temps à rechercher des documents académiques tels que:
- La détection des Plaques d'immatriculation des Véhicules dans les Images
- Robuste Plaque d'immatriculation de la Détection à l'aide de la Saillance de l'Image
- Locale d'Amélioration de l'Image de Voiture de Plaque d'immatriculation de Détection
Quand il s'agit de mathématiques, je suis perdu. Pour cette raison l'essai de plusieurs images s'avère productive, par exemple:
à
Toutefois, cette approche n'a travaillé que pour cette image particulière, et si les techniques ont été appliquées à des images différentes, je suis sûr que les plus pauvres de la conversion devrait se produire. J'ai lu sur une formule appelée "chapeau bas morphologie de transformation", qui est la suivante:
Fondamentalement, la trans - formation continue tous les détails sombres de l'image, et élimine tout le reste (y compris les plus grandes régions sombres et la lumière régions).
Je ne trouve pas beaucoup d'informations sur ceci, cependant l'image dans la documentation près de la fin de ce rapport montre son efficacité.
D'autres contraintes
- Le développement en C#
- Confiner le projet de royaume-UNI plaques d'immatriculation uniquement
- Je peux choisir les images à convertir comme une démonstration
Question
J'ai besoin de conseils sur ce que la transformation des techniques que je devrait se concentrer sur le développement, et que les algorithmes peuvent m'aider.
EDIT: de Nouvelles informations présentes sur Suite - Plaque D'Immatriculation De Détection
- OpenCv est l'endroit idéal pour démarrer/prolonger. J'ai trouvé Emgu en C# pour être très bon port de OpenCV. emgu.com/wiki/index.php/License_Plate_Recognition_in_CSharp
- C'est clairement une vision par ordinateur type de problème. Jetez un oeil à OpenCV. C'est en C++, mais probablement que vous serez en mesure de interface avec elle en quelque sorte.
- Vous pouvez prendre un coup d'oeil à l'un des emgucv exemple pour vous montrer un monde réel de travail exemples de plaque du véhicule de détection de l'utilisation de l'OCR emgu.com/wiki/index.php/License_Plate_Recognition_in_CSharp
- vous pouvez utiliser le rectangle de détection dans opencv ou en train de haar comme caractéristiques pour détecter les plaques qui est également présent dans opencv
- Vous voudrez peut-être vérifier www.openalpr.com comme un point de départ. Il utilise un certain nombre de techniques pour trouver et analyser la plaque d'immatriculation.
Vous devez vous connecter pour publier un commentaire.
Il y a un certain nombre d'approches que vous pouvez prendre, mais la première stratégie qui apparaît à l'esprit est:
Comme je l'ai dit, c'est une stratégie de beaucoup, mais il me vient à l'esprit comme celui qui nécessite le moins de lourde les maths... c'est si vous pouvez trouver un OCR de mise en œuvre qui va travailler pour vous.
J'ai fait un projet similaire il y a quelques années en Java, j'ai d'abord appliqué le Opérateur de Sobel puis masqué toute l'image avec une image d'une plaque (avec l'opérateur de Sobel est appliqué trop). La région de maximum coïncidence est où la plaque est. Ensuite appliquer un OCR pour la région sélectionnée pour obtenir le nombre.
Voici comment je suggère que vous devriez faire cette tâche. Lire ma réponse détaillée ici.
Appliquer le Filtre de Sobel pour trouver des bords verticaux.
Sobel(gray, dst, -1, 1, 0)
minAreaRect
de chaque contour. Sélectionnez les rectangles en fonction de l'aspect ratio et la superficie minimale et maximale.adaptiveThreshold
de l'original (niveaux de gris) image et de lui appliquer l'OCR.Royaume-UNI a déjà un système qui le fait. Je me souviens avoir vu une émission de TÉLÉVISION dans laquelle ils ont démontré qu'ils peuvent trouver une voiture à l'intérieur de Londres à moins de 10 minutes (en supposant qu'ils connaître le nombre et la voiture est conduite autour)
Il suffit de lire Wikipédia vous donne les conseils dont vous avez besoin pour commencer à réfléchir sur la question:
http://en.wikipedia.org/wiki/Automatic_number_plate_recognition
Il vous dit exactement comment faire pour calculer le bas chapeau de transformation(sorte de ressemble à une inversion de seuil progressif transformer pour moi).
Première chose à faire est de mettre en œuvre les deux de la morphologie des fonctions de dilatation et d'érosion.
Pour ce faire vous avez besoin de votre f et b puis vous calculez la fonction sur une petite région de l'image à un point de maintien de la plus grande valeur trouvée.
Ce qui ce dit est, prendre le maximum de l'expression sur tous les points dans la région de domaine(comme un petit rectangle centré à votre point (s,t).
simple pseudo code serait
effectivement, nous avons maintenant une nouvelle image de la max des valeurs.
Il est en fait assez simple afin de ne pas rendre plus difficile qu'elle ne l'est(nous sommes simplement en ajoutant b(x,y) de chaque point de la région et de trouver celui qui donne la valeur maximale).
vous faites la même chose pour l'érosion(très similaire à ci-dessus)
Maintenant l'ouverture et la clôture est la composition des deux
Vous pouvez penser d'abord que l'exécution d'une dilatation et puis une érosion pour une ouverture.
Il dit enfin soustraire à la clôture de l'image d'origine et vous devriez avoir votre transformation.
Si vous êtes intéressé par le problème de la détection de la présence d'une plaque d'immatriculation (par opposition à la reconnaître), vous devriez probablement regarder à la détection de textes dans des images comme il est lié à ce que vous êtes en train de faire.
Cette question est liée à la vôtre: Algorithme pour détecter la présence de texte sur l'image
Vous pouvez également vous reporter à
Automatique de Reconnaissance de Plaque d'immatriculation de la bibliothèque & cette requête. Cela permettra également de vous donner une idée sur la façon d'aborder les choses,et comment les solutions existantes.
Mais comme répondu par paul, vous devriez d'abord essayer de trouver l'rectangulaire de la plaque du numéro de l'image complète et puis binariser puis utilisez le ROC de bibliothèques (Tesseract serait recommandé)
Vous pouvez vous référer à ce lien qui vous aidera à trouver la plaque rectangulaire. Vous avez besoin d'utiliser openCV bibliothèques, de sorte que vous n'aurez pas besoin de beaucoup de maths mais oui une compréhension de base de ce qui se passe derrière les coulisses, peut vous aider à résoudre le problème dans une meilleure façon.
Je vous suggérons d'utiliser un service ou à un tiers pour cette. Ouvrir RAPI, fournit un package open source qui est très précis pour ce service.
Ouvrir RAPI - https://www.openalpr.com/
Démo de la Vidéo Ouvert RAPI
https://www.youtube.com/watch?v=E-U_H9EbW60
Ou vous pouvez utiliser une API -
Macgyver de la Vision par Ordinateur de l'API
https://askmacgyver.com/explore/program/license-plate-recognition/3X5D3d2k
Dans cette API, il vous suffit de faire une requête post -
https://macgyver.services
Exemple De La Charge Utile
L'image ci-dessus serait de retour le suivant -