Ich versuche, einen Scanner zu entwickeln, der eine Seite eines Passports mit der Kamera scannen kann.
Also von einer Passport-Seite wie dieser:
Ich möchte den markierten Teil ausschneiden.
Ich habe Code für die Kantenerkennung mit OpenCV geschrieben, der die Konturen findet und dann das größte Viereck approximiert. Schließlich wird eine perspektivische 4-Punkt-Transformation durchgeführt, um eine Draufsicht auf das Bild zu erhalten. Der Kantenerkennungscode sieht folgendermaßen aus:
%Vor%Dieser Code funktioniert für Einzelseiten-Dokumente, also ID-Karten, Kreditkarten. Wo gibt es 4 unterscheidbare Kanten.
Aber funktioniert nicht für Pässe, da die Oberkante nicht so ausgeprägt ist.
Die Eingänge werden von der Kamera auf Android genommen. Irgendeine Idee wie kann ich die Pass-Seite erkennen? Ich benutze OpenCV 3.1.
Hier ein paar Beispieleingaben (aus der Google-Bildsuche erhalten):
Es wäre möglich, die Seite zu extrahieren, wenn Sie die maschinenlesbare Zone (MRZ) des Reisepass (im Bild unten rot umrandet). Normalerweise gibt es einen sehr guten Kontrast zwischen der MRZ und ihrem Hintergrund, so dass sie mit einer Gradientenmethode oder MSER erkannt werden kann s.
Angenommen, es gibt eine Standardvorlage (dh Seitenverhältnisse für die Seite, die MRZ, Offsets für die Felder usw.), nach denen der Pass erstellt wird. Sobald Sie die MRZ gefunden haben, können Sie die Seitenränder leicht finden und andere Felder, z. B. das Foto der Person, wie im folgenden Vorlagenbild gezeigt, in dem die MRZ rot umrandet und der Seitenrand grün umrandet ist. Dies setzt voraus, dass es keine perspektivische Verzerrung gibt. Wenn es eine solche Verzerrung gibt, sollten Sie sie zuerst korrigieren und dann die Vorlage anwenden. Sie können die MRZ selbst verwenden, um die Verzerrung zu korrigieren, wenn Sie das Seitenverhältnis der MRZ-Region kennen.
Vorlage vorbereitet von Bild .
Überprüfen Sie hier für eine sehr einfache Implementierung dieser vorlagenbasierten Feldextraktion aus einem Reisepass. Es wird nicht für Ihre Bilder funktionieren und wird viel Parameter-Tuning benötigen, also empfehle ich nicht, es sofort zu verwenden. Ich beziehe mich damit nur auf die Idee der Template-basierten Extraktion und anderer Vorverarbeitungsmethoden.
Wenn der Pass jedoch wie im Bild unten gekrümmt ist (Sie können sehen, dass die MRZ-Grenze nicht mit geraden Linien verfolgt werden kann), ist es schwierig, die Verzerrung zu korrigieren.
Wenn Sie hochauflösende Bilder verwenden, empfiehlt es sich, die Bilder zu verkleinern und zu verarbeiten, da dies bei einem eingebetteten System schneller wäre. Sobald Sie die MRZ aus dem Downsampling-Bild gefunden haben, können Sie das Bild mit hoher Auflösung verwenden, um die Ecken zu verfeinern.
Tags und Links android c++ opencv opencv3.0 opencv4android