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;
- je sais que rien n'est parfait et que la reconnaissance d'image de ce type fournira des faux positifs et négatifs.
- 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.
- 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.
- N'importe quelle langue est grande bien que.NET soit préféré.
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
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.
- convertir en niveaux de gris.
-
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.
- appliquer le filtre Sobel pour détecter les arêtes verticales.
-
Seuil l'image résultante en utilisant un seuil strict ou la binarisation D'OTSU.
cv2.Sobel(image, -1, 1, 0) cv2.threshold()
-
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.
-
Trouvez les contours externes de cette image.
cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
Pour chaque contour, trouver le
minAreaRect()
englobante il.- 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.
- 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)
- flou les régions détectées.
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.
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
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.
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.
Essayez ce système de reconnaissance automatique de Plaque D'immatriculation simple
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 / 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.
Bibliothèque ANPR haute performance - 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é)
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
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)