Comment reconnaître immatriculation du véhicule / plaque d'immatriculation (ANPR) à partir d'une image? [fermé]

StackOverflow https://stackoverflow.com/questions/981378

Question

J'ai un site Web qui permet aux utilisateurs de télécharger des images de voitures et je voudrais mettre un filtre de confidentialité en place pour détecter les plaques d'immatriculation sur le véhicule et les brouiller.

Le flou est pas un problème, mais est-il une bibliothèque ou d'un composant (open source préférée) qui aidera à trouver une licence dans une photo?

Mise en garde;

  1. Je ne sais rien est parfaite reconnaissance et à l'image de ce type fournira des faux positifs et négatifs.
  2. Je comprends que nous pourrions demander à l'utilisateur de sélectionner la zone à brouiller et nous le ferons aussi bien, mais la question est précisément de trouver ces données par programme; si des réponses telles que « faire une personne pour vérifier chaque image » est pas utile.
  3. Cette méthode logicielle est appelée « Plate reconnaissance automatique » au Royaume-Uni, mais je ne vois aucune implémentations comme les bibliothèques.
  4. Toute langue est grande, bien que .Net est préférable.
Était-ce utile?

La solution

Je codé une version C # basé sur JAVA ANPR, mais je l'ai changé les fonctions de la bibliothèque AWT avec OpenCV. Vous pouvez le vérifier à http://anprmx.codeplex.com

Autres conseils

EDIT :. J'ai écrit un href="https://github.com/abdulfatir/pyANPD"> pour cette

En tant que votre objectif est flou (pour la protection de la vie privée), vous avez besoin fondamentalement un href="https://en.wikipedia.org/wiki/Precision_and_recall"> haut comme une première étape. Voici comment s'y prendre. Les conseils de code inclus utilisent OpenCV avec Python.

  1. Convertir en nuances de gris.
  2. Appliquer Flou gaussien.

    img = cv2.imread('input.jpg',1)
    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    img_gray = cv2.GaussianBlur(img_gray, (5,5), 0)  
    

Soit l'image d'entrée est la suivante.

enter image description ici

  1. Appliquer le filtre Sobel pour détecter les bords verticaux.
  2. Seuil l'image résultante en utilisant le seuil strict ou la binarisation d'Otsu.

    cv2.Sobel(image, -1, 1, 0)
    cv2.threshold() 
    
  3. Appliquer une opération de fermeture à l'aide Morphologique élément structurant approprié. (I utilisé 16x4 comme élément structurant)

    se = cv2.getStructuringElement(cv2.MORPH_RECT,(16,4))
    cv2.morphologyEx(image, cv2.MORPH_CLOSE, se)  
    

Image Résultante après l'étape 5.

enter image description ici

  1. Trouver les contours externes de cette image.

    cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 
    
  2. Pour chaque contour, trouver le minAreaRect() délimitant.

  3. Sélectionner les rectangles en fonction de rapport d'aspect, la zone minimale et maximale, et l'angle avec l'horizontale. (I utilisé 2,2 <= Rapport d'aspect <= 8, 500 <= Zone <= 15 000, et de l'angle <= 45 degrés)

Tous les minAreaRect()s sont représentés en orange et celui qui satisfait nos critères est en vert.

enter image description ici

  1. Il peut y avoir des faux positifs après cette étape, pour filtrer, utiliser la densité de bord. Densité de bord est définie comme la nombre de pixels blancs / nombre total de pixels dans un rectangle. Fixer un seuil de densité de bord. (I utilisé 0,5)

enter image description ici

  1. brouiller les régions détectées.

enter image description ici

Vous pouvez appliquer d'autres filtres que vous jugerez appropriés pour augmenter le rappel et la précision. La détection peut également être formé en utilisant HOG + SVM pour augmenter la précision.

Il y a une nouvelle bibliothèque open source sur GitHub qui fait ANPR pour les USA et les plaques européennes. Il semble assez précis et il devrait faire exactement ce dont vous avez besoin (reconnaître les régions de la plaque). Voici le projet GitHub: https://github.com/openalpr/openalpr

Je suis tombé sur ce qui est écrit en Java javaANPR , je suis à la recherche pour la bibliothèque ac # ainsi.

Je voudrais un système où je peux pointer une caméra vidéo à certains bateaux à voile, qui ont tous de grands nombres identifiables sur eux, et l'ont d'identifier les bateaux et envoyer un tweet quand ils naviguent devant une caméra vidéo.

Je l'ai fait quelques recherches sur Google à ce sujet il y a quelques mois. Il y a assez peu de papiers sur ce sujet, mais je ne trouvé une implémentation open source concrète. Il y a beaucoup d'implémentations commerciales cependant, mais aucun d'entre eux avec une offre de prix, ils sont donc sans doute assez cher.

essayez cette plaque automatique Numéro simple système de reconnaissance

http://opos.codeplex.com/

Open source et écrit avec C #

Jetez un oeil à Java ANPR . reconnaissance de plaque d'immatriculation gratuite ...

Oui j'utilise gocr http://jocr.sourceforge.net/ son une application qui commandline vous pouvez exécuter à partir de votre application. Je l'utilise dans un ou deux de mes applications.

haute performance ANPR Library - http://www.dtksoft.com/dtkanpr.php. Ceci est commercial, mais ils fournissent la clé d'essai.

http://licenseplate.sourceforge.net Python (je ne l'ai pas testé)

Il fonctionne peut-être regarder le logiciel Character recoqnition car il y a beaucoup de bibliothèques là-bas qui exécutent la même chose. Je lire une image et à le stocker. bureau Micrsoft est capable de lire les fichiers TIFF et retourner des caractères alphanumériques

Le flou est pas un problème, mais est-il une bibliothèque ou d'un composant (open source préférée) qui aidera à trouver une licence dans une photo?

Réponse: Le moteur logiciel FreeFlow CARMEN ANPR (Commerical)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top