SigSys16 Visitenkartenscanner

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

Autor: Dominik Luig | Florian Fuhrmann
Betreuer: Prof. Schneider

Projekt Visitenkarte

Motivation

Die Motivation dieser Aufgabe ist es, die Vielzahl an Visitenkarten z. B. nach Messebesuchen zu minimieren. Mit dem Vistenkartenscanner soll die Papierform ersetzt werden und eine effektivere sowie effizientere Auflistung der Geschäftpartner mit Vor-/ Zunamen und Telefonnummer visualisiert werden.

Ziel

Das Ziel dieser Arbeit ist es einen Visitenkartenscanner zu erstellen. Das heißt, dass bei Fotographie einer Vistenkarte der Vor-/ und Zuname und die Telefonnummer in eine Excel-Datei eingelesen wird.

Aufgabe

  1. Erkennen einer Vistenkarte mit Hilfe einer Kamera
  2. Einlesen der png - Datei in Matlab
  3. Auslesen der png - Datei und weiterleiten der Daten aus den definierten Bereichen in eine Excel - Datei



Lösung

Verhalten der Matlabbefehle

  • Befehl = imread (Dateiname, fmt) liest ein Graustufen- oder True Color Image-Datei in Matlab ein. Wenn die Datei ein Grauintensitätsbild enthält, ist das Array zweidimensional angeordnet. Wenn die Datei eine Echtfarbe (RGB) Bild enthält, dann ist das Array eine dreidimensionale (m-by-n-by-3) Array-Datei.


Dateiname ist eine Zeichenfolge, die den Namen der Grafikdatei angibt, und fmt ist eine Zeichenfolge, die das Format der Datei angibt. Wenn die Datei nicht im aktuellen Verzeichnis oder in einem Verzeichnis im MATLAB-Pfad ist, wird der vollständige Pfad für einen Standort auf dem System gesucht. Wenn imread keine Datei mit dem Namen Dateinamen finden kann, sucht es nach einer Datei filename.fmt. Wenn es keine Zeichenfolge für fmt gibt, wird die Toolbox versuchen, das Format der Datei zu erkennen, indem Sie die Datei-Header überprüft. In dem Fall der Visitenkarte haben wir eine Datei mit dem Format .png verwendet.

  • OCR = Optical Character Regcognition = Optische Zeichenerkennung

Ziel: Texte auf Bildern, welche in Matlab mit einer .png Datei eingeladen wurden, zu lesen. Um das Problem zu vereinfachen gehen wir davon aus , dass der Text in einer bekannten Schrift geschrieben wurde und im Bild horizontal ausgelesen wird.

Die Auslesung des Bildes erfolgt durch die Identifizierung der Textschriften mit der Hilfe von "Algorithmen".

  • Befehl results.words

Results.words definiert die genaue Position eines bestimmten Textes auf der Bild-Datei.

Beispiel Text auf Bilddatei

Beispiel: Text: '‘ MathWorks®...'

   CharacterBoundingBoxes: [103x4 double]
     CharacterConfidences: [103x1 single]
                    Words: {16x1 cell}
        WordBoundingBoxes: [16x4 double]
          WordConfidences: [16x1 single] 


Die Schritte 5-6 wiederholen sich für die Identifizierung der weiteren verwendeten Textarrays. Im Fall der Visitenkarte sind dieses, der Funktionsname "Mitarbeiter" und "Telefonnummer".

  • Befehl strcat

strcat bedeutet, dass zwei Wörter zu sogenannten "Strings" aneinander gehängt werden. Um einen String an einen anderen zu hängen, könnte man die Funktion s = strcat(s1,...,sN) verwenden.

Damit wird s2 an das Ende von s1 angehängt, wobei (logischerweise) das Stringende-Zeichen {' '} am Ende von String s1 angesetzt wird, um einen Zusammenhang mit einem "Leerzeichen" zu signalisieren.

  • Befehl fileID = fopen

Die Oben entstandenen drei Arrays (Schritt 3,5,6:results.words)werden mit dem Befehl "fileID=fopen ausgelesen. Die printf( fileID , formatSpec , A1, ... , An)- Funktion verwendet die Arrayelemente und klassifiziert diese in "Spaltenreihenfolgeelemente". Diese werden dann in einer Textdatei.fprintf formatiert. Im Beispiel würde die Codierung in eine Excel.csv Datei formatiert werden.

Erkennung der Visitenkarte

Das Erkennen der Visitenkarte geschieht nach folgenden Schritten:

  • Schritt 1: Bild laden
  • Schritt 2: Perform Ocr
  • Schritt 3: Lade den Namen aus der Visitenkarte
  • Schritt 4: Aus dem Vor- und Nachname eine Zeichenkette mit Leerzeichen erstellen
  • Schritt 5: Position des Wortes lesen
  • Schritt 6: Telefonummer lesen
  • Schritt 7: Ergebnisse in CSV-Excel-Datei schreiben


Matlab - Programm (Durchführung)

Der Quelltext diese Vorgänge ist im folgenden abgebildet:

Schritt 1

% Bild laden
I = imread ('Karte_Dominik.png');


Schritt 2

%Perform Ocr
results = ocr(I);

Schritt 3

% Lade den Namen aus der Visitenkarte
Vorname = results.Words(1);
Nachname = results.Words(2);

Schritt 4

% aus Vor- und Nachname eine Zeichenkette mit Leerzeichen erstellen
Name = strcat(Vorname, {' '}, Nachname)

Schritt 5

%Position lesen
Position = results.Words(3)

Schritt 6

%Telefonnummer lesen
Tel = results.Words(5)

Schritt 7

% Transport der Visitenkarten in Excel
werte = [Name; Position; Tel]

fileID = fopen('excelExport.csv', 'a');
fprintf(fileID, '%s; %s; %s \r\n', werte{1}, werte{2}, werte{3});
fclose(fileID);




Ergebnis

Projekt Visitenkarte

Ausblick

Folgende Aspekte können zur weiteren Verbesserung der Lösung umgesetzt werden:

  • Es wurden ausschließlich feste Bezugspunkte gewählt. Daher sollte der nächste Schritt eine flexiblere Darstellung der Visitenkarte zeigen. Im nächsten Schritt sollte das Programm so dargestellt werden, dass eine Erkennung von Texten im gesamten Visitenkartenbereich möglich wäre.

Weblinks


→ zurück zum Hauptartikel: Signalverarbeitende Systeme SoSe2016