Wie erkennt man ein Kfz-Kennzeichen (ANPR) an einem Bild? [geschlossen]

70

Ich habe eine Website, auf der Benutzer Bilder von Autos hochladen können, und ich möchte einen Datenschutzfilter einrichten, um Kennzeichen am Fahrzeug zu erkennen und diese zu verwischen.

Das Verwischen ist kein Problem, aber gibt es eine Bibliothek oder Komponente (Open Source bevorzugt), die beim Auffinden einer Lizenz innerhalb eines Fotos hilft?

Vorsichtsmaßnahmen;

  1. Ich weiß, dass nichts perfekt ist und eine Bilderkennung dieser Art falsch positive und negative Ergebnisse liefert.
  2. Ich schätze, dass wir den Benutzer bitten könnten, den zu verwischenden Bereich auszuwählen, und wir werden dies auch tun, aber die Frage bezieht sich speziell darauf, diese Daten programmgesteuert zu finden. Antworten wie "Lassen Sie eine Person jedes Bild überprüfen" sind daher nicht hilfreich.
  3. Diese Softwaremethode wird in Großbritannien als "Automatische Kennzeichenerkennung" bezeichnet, aber ich kann keine Implementierungen davon als Bibliotheken sehen.
  4. Jede Sprache ist großartig, obwohl .Net bevorzugt wird.
Ryan O'Neill
quelle
Sie können auch versuchen, auf SimpleLPR warelogic.com
Gibt es einen Webdienst, der dies tut? Das Senden von Bildern ist natürlich datenintensiv, aber sie können vor dem Senden in der Größe geändert und auf Graustufen gesetzt werden.
Somatik

Antworten:

30

Ich habe eine C # -Version basierend auf JAVA ANPR codiert, aber die Funktionen der awt-Bibliothek mit OpenCV geändert. Sie können dies unter http://anprmx.codeplex.com überprüfen

Jivan Miranda
quelle
5
Ich muss sagen, das ist sehr beeindruckend. Gut gemacht.
Ryan O'Neill
Versuchte es auf einem x64-Computer zu verwenden und fand mich schnell in der DLL-Hölle wieder. Sollte es mit OpenCvSharp x64 funktionieren?
SteveCav
32

EDIT : Ich habe ein Python-Skript dafür geschrieben.

Da Ihr Ziel verschwimmt (zum Schutz der Privatsphäre), benötigen Sie als ersten Schritt grundsätzlich einen Detektor mit hohem Rückruf . Hier erfahren Sie, wie Sie dies tun. Die enthaltenen Codehinweise verwenden OpenCV mit Python.

  1. In Graustufen konvertieren.
  2. Wenden Sie Gaußsche Unschärfe an.

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

Das Eingabebild sei das folgende.

Geben Sie hier die Bildbeschreibung ein

  1. Wenden Sie den Sobel-Filter an, um vertikale Kanten zu erkennen.
  2. Schwellenwert für das resultierende Bild unter Verwendung eines strengen Schwellenwerts oder der Binärisierung von OTSU.

    cv2.Sobel(image, -1, 1, 0)
    cv2.threshold() 
    
  3. Wenden Sie eine morphologische Schließoperation mit einem geeigneten Strukturierungselement an. (Ich habe 16x4 als Strukturierungselement verwendet)

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

Ergebnisbild nach Schritt 5.

Geben Sie hier die Bildbeschreibung ein

  1. Finden Sie Außenkonturen dieses Bildes.

    cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 
    
  2. Finden minAreaRect()Sie für jede Kontur die Begrenzung.

  3. Wählen Sie Rechtecke basierend auf dem Seitenverhältnis, der minimalen und maximalen Fläche und dem Winkel zur Horizontalen aus. (Ich habe 2,2 <= Seitenverhältnis <= 8, 500 <= Fläche <= 15000 und Winkel <= 45 Grad verwendet)

Alle minAreaRect()s sind orange dargestellt und diejenige, die unsere Kriterien erfüllt, ist grün.

Geben Sie hier die Bildbeschreibung ein

  1. Nach diesem Schritt kann es zu Fehlalarmen kommen. Verwenden Sie zum Filtern die Kantendichte. Die Kantendichte ist definiert als die Anzahl der weißen Pixel / die Gesamtzahl der Pixel in einem Rechteck. Legen Sie einen Schwellenwert für die Kantendichte fest. (Ich habe 0,5 verwendet)

Geben Sie hier die Bildbeschreibung ein

  1. Verwischen Sie die erkannten Regionen.

Geben Sie hier die Bildbeschreibung ein

Sie können andere Filter anwenden, die Sie für geeignet halten, um den Rückruf und die Präzision zu erhöhen. Die Erkennung kann auch mit HOG + SVM trainiert werden, um die Präzision zu erhöhen.

Abdul Fatir
quelle
Dies ist eine großartige Arbeit, und die Bibliothek pyANPD.py funktioniert gut, um die Regionen zu erkennen. Können Sie uns Nicht-Pythoniten jedoch einen Hinweis geben, wie sie dann verwischt werden können?
Fooquency
15

Auf GitHub gibt es eine neue Open-Source-Bibliothek, die ANPR für US- und europäische Platten ausführt. Es sieht ziemlich genau aus und sollte genau das tun, was Sie brauchen (erkennen Sie die Plattenbereiche). Hier ist das GitHub-Projekt: https://github.com/openalpr/openalpr

Derrick Johnson
quelle
Das ist der Gute!
MikeTeX
10

Ich bin auf diese gestoßen , die in Java JavaANPR geschrieben ist. Ich suche auch nach einer AC # -Bibliothek.

Ich hätte gerne ein System, mit dem ich eine Videokamera auf einige Segelboote richten kann, die alle große, identifizierbare Nummern haben, und die Boote identifizieren und einen Tweet senden können, wenn sie an einer Videokamera vorbeifahren.

Bruce McLeod
quelle
Ich habe einige Klassen konvertiert, aber es wird einige Zeit dauern.
Ryan O'Neill
Zeilenweise Konvertierungen machen niemals Spaß oder sind schnell.
Bruce McLeod
@ Ryan hast du jemals die Konvertierung abgeschlossen?
Rowland Shaw
Entschuldige Nein. Scheint beliebt, aber immer noch geschneit.
Ryan O'Neill
Das sieht gut aus ... Wenn Sie diese Arbeit in .NET machen möchten, können Sie entweder IKVM verwenden oder sie einfach hinter einem Webdienst abstrahieren ...
Mauricio Scheffer
8

Ich habe vor ein paar Monaten darüber gegoogelt. Es gibt einige Artikel zu diesem Thema, aber ich habe nie eine konkrete Open-Source-Implementierung gefunden. Es gibt zwar viele kommerzielle Implementierungen , aber keine mit einem Preisangebot, daher sind sie wahrscheinlich ziemlich teuer.

Mauricio Scheffer
quelle
Vielen Dank, ich habe die Forschungsberichte nicht gesehen, bevor ich Google blind geworden sein muss. Ich werde sie überprüfen.
Ryan O'Neill
Ich habe mich entschlossen, dies als Antwort zu markieren, da es zwar keine Open-Source-Lösung bietet, mir aber genug gibt, um fortzufahren.
Ryan O'Neill
7
Wenn Sie eine Open Source-Lösung finden oder erstellen, lassen Sie es uns bitte wissen!
Mauricio Scheffer
Licenseplate.sourceforge.net haben es nicht getestet
Somatik
@Somatik: Kannst du das eine Antwort geben?
Mauricio Scheffer
5

Probieren Sie dieses einfache automatische Kennzeichenerkennungssystem aus

http://opos.codeplex.com/

Open Source und mit C # geschrieben

Birol Kuyumcu
quelle
3

Schauen Sie sich Java ANPR an . Kostenlose Kennzeichenerkennung ...

Ralph Wegner
quelle
2

Ja, ich verwende gocr unter http://jocr.sourceforge.net/. Es ist eine Befehlszeilenanwendung, die Sie von Ihrer Anwendung aus ausführen können. Ich benutze es in einigen meiner Anwendungen.

Keyoke
quelle
2

Hochleistungs-ANPR-Bibliothek - http://www.dtksoft.com/dtkanpr.php . Dies ist kommerziell, aber sie bieten Testschlüssel.

Codeguru
quelle
Ich habe diese Bibliothek im Vergleich zu OpenALPR getestet. Nirgendwo in der Nähe! Von den 15 Bildern, die ich in meiner Bibliothek zum Testen hatte, erkannte OpenALPR 6, dieses erkannte 0. Ich nehme an, diese Bibliothek hängt stark von der Platzierung der Kamera und den Lichtverhältnissen ab.
XMight
-1

Es könnte funktionieren, wenn man sich die Zeichenerkennungssoftware ansieht, da es viele Bibliotheken gibt, die dasselbe ausführen. Ich lese ein Bild und speichere es. Micrsoft Office kann TIFF-Dateien lesen und alphanumerische Zeichen zurückgeben

Matthew
quelle
-2

Das Verwischen ist kein Problem, aber gibt es eine Bibliothek oder Komponente (Open Source bevorzugt), die beim Auffinden einer Lizenz innerhalb eines Fotos hilft?

Antwort : Die CARMEN FreeFlow ANPR Software Engine (kommerziell)

abmv
quelle
1
Sind Sie sicher, dass "Die CARMEN FreeFlow ANPR Software Engine" Open Source ist?
Mitch Wheat
Sieht gut aus, aber ich hatte Angst vor dem Klappentext ('Die Software ist mit Hardware-Dongles geschützt, mit verschiedenen Arten von Schnittstellen (USB 2.0, PCI 2.1, PCIe (x1))'). Ich weiß nicht, wie sie erwarten, dass Benutzer ihre Software in einer gehosteten Umgebung verwenden, zumal die Virtualisierung beginnt.
Ryan O'Neill
Betrachten Sie es als eine Investition, wenn Sie planen, das, was Sie verdienen, an Geld zu verkaufen. Sie können jederzeit mit dem Anbieter sprechen, um eine nicht dongled Lösung zu erhalten, wenn Sie es ernst meinen. .
abmv
Mir wurde gesagt, dass eine Grundlizenz etwa 500 US-Dollar kostet. Die ideale Größe beträgt 16 Pixel Höhe pro Zeichen.
Somatik
USB-Dongles sind in einer virtuellen Umgebung kein Problem. Sie benötigen lediglich einen einfachen Hardwareserver (ein Raspberry Pi würde funktionieren), der den USB-Anschluss exportiert. Es gibt ein paar Produkte, die das tun. Ich habe ftusbnet mit guten Ergebnissen verwendet.
Matthias Urlichs