Comment reconnaître le permis de véhicule / Plaque d'immatriculation (ANPR) à partir d'une image?

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 le flou entre eux.

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

Mises en garde;

  1. je sais que rien n'est parfait et que la reconnaissance d'image de ce type fournira des faux positifs et négatifs.
  2. j'apprécie que nous pourrions demander à l'utilisateur de sélectionner la zone à flouter et nous le ferons aussi, mais la question est spécifiquement de trouver ces données par programme; donc des réponses telles que "demander à une personne de vérifier chaque image" n'est pas utile.
  3. cette méthode logicielle est appelée 'automatic Number Plate Recognition' au Royaume-Uni, mais je ne vois aucune implémentation de celle-ci en tant que bibliothèques.
  4. N'importe quelle langue est grande bien que.NET soit préféré.
60
demandé sur Ambo100 2009-06-11 18:18:33

12 réponses

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

29
répondu Jivan Miranda 2012-11-07 15:21:32

EDIT : j'ai écrit un script Python pour cela.

Comme votre objectif est flou (pour la protection de la vie privée), vous avez essentiellement besoin d'un détecteur de rappel élevé comme première étape. Voici comment faire. Les astuces de code incluses utilisent OpenCV avec Python.

  1. convertir en niveaux de gris.
  2. Appliquer Le 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)  
    

Laissez l'image d'entrée être la suivante.

entrez la description de l'image ici

  1. appliquer le filtre Sobel pour détecter les arêtes verticales.
  2. Seuil l'image résultante en utilisant un seuil strict ou la binarisation D'OTSU.

    cv2.Sobel(image, -1, 1, 0)
    cv2.threshold() 
    
  3. Appliquer une opération de fermeture morphologique en utilisant un élément structurant approprié. (J'ai 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.

entrez la description de l'image ici

  1. Trouvez les contours externes de cette image.

    cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 
    
  2. Pour chaque contour, trouver le minAreaRect() englobante il.

  3. sélectionnez les rectangles en fonction du rapport d'aspect, de la surface minimale et maximale et de l'angle avec l'horizontale. (J'ai utilisé 2.2

Tous les minAreaRect()s sont affichés en orange et celui qui répond à nos critères est en vert.

entrez la description de l'image ici

  1. Il peut y avoir des faux positifs après cette étape, pour le filtrer, utilisez densité de lamelles. La densité de bord est définie comme le Nombre de pixels blancs / nombre total de pixels dans un rectangle. Définissez un seuil pour la densité des arêtes. (J'ai utilisé 0.5)

entrez la description de l'image ici

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

entrez la description de l'image ici

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

21
répondu Abdul Fatir 2016-06-15 08:40:01

Il y a une nouvelle bibliothèque open source sur GitHub qui fait ANPR pour les plaques américaines et 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

12
répondu Derrick Johnson 2014-01-09 05:17:19

Je suis tombé sur celui-ci qui est écrit en java javaANPR, je cherche aussi une bibliothèque c#.

Je voudrais un système où je peux pointer une caméra vidéo sur certains voiliers, qui ont tous de grands nombres identifiables sur eux, et qu'il identifie les bateaux et envoie un tweet quand ils naviguent devant une caméra vidéo.

10
répondu Bruce McLeod 2009-08-10 10:05:03

J'ai fait quelques recherches sur Google à ce sujet il y a quelques mois. Il y a Pas mal de documents sur ce sujet, mais je n'ai jamais trouvé d'implémentation open-source concrète. Il y a beaucoup d'implémentations commerciales, mais aucune d'entre elles avec un devis, donc elles sont probablement assez chères.

8
répondu Mauricio Scheffer 2009-06-11 14:49:38

Essayez ce système de reconnaissance automatique de Plaque D'immatriculation simple

Http://opos.codeplex.com/

Open source et écrit avec C #

5
répondu Birol Kuyumcu 2012-03-30 19:38:31

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

3
répondu Ralph Wegner 2010-08-23 06:32:08

Oui j'utilise gocr à http://jocr.sourceforge.net / c'est une application en ligne de commande que vous pouvez exécuter à partir de votre application. Je l'utilise dans quelques-unes de mes applications.

2
répondu keyoke 2010-05-19 09:32:00

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

2
répondu codeguru 2010-09-23 10:19:19

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

2
répondu Somatik 2012-03-30 16:05:28

Cela fonctionne peut-être en regardant le logiciel de recoqnition de caractères car il existe de nombreuses bibliothèques qui effectuent la même chose. J'ai de la lecture d'une image et de le ranger. Micrsoft office est capable de lire les fichiers tiff et de renvoyer des alphanumériques

-1
répondu Matthew 2009-12-03 13:33:22

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

Ans: le moteur logiciel ANPR CARMEN FreeFlow (commercial)

-2
répondu abmv 2009-06-11 14:33:19