Handschriftliche Zeichenerkennung mit KNN in Python

Handschriftliche Zeichenerkennung in OpenCV Tutorial.

Ein Neuling, der dieses Jahr beauftragt wurde, sagte: "Ich habe Charaktere erkannt, als ich auf dem College war." Also versuche ich, ein Gefühl dafür zu bekommen.

Wörterbuchdaten abrufen

Verwenden Sie digits.png, das in der OpenCV-Distribution enthalten ist, als Wörterbuchdaten. Leider enthielt die `` `conda install --channel https://conda.anaconda.org/menpo opencv3```-Umgebung in der Anaconda-Umgebung keine digits.png.

Dies sind die Bilddaten handgeschriebener Zahlen von 0 bis 9. Wenn Sie versuchen, OCR auf Japanisch zu erstellen, müssen Sie eine große Menge an Wörterbuchdaten erstellen, wenn Sie diese so implementieren, wie sie sind. Wenn Sie versuchen, die Variationen von Kanji wie Watanabe-san und Saito-san zu unterscheiden, wird es schwierig. Wird es geschafft?

Was ist vorher KNN?

Wikipedia hat einen Eintrag als k Nachbarschaftsmethode. Insbesondere hat Abbildung KNN. Es ist sehr einfach und leicht zu verstehen.

Das heißt, wenn gewünscht werden soll, zu bestimmen, ob eine unbekannte Probe zur Gruppe A oder Gruppe B in einem Raum einer bestimmten Koordinate gehört, wird gesagt, dass "sie zur Gruppe mit vielen bekannten klassifizierten Daten in der Nähe gehört". Es ist zu beurteilen.

Nachdem Sie das Konzept verstanden haben, ist es einfach mit Python (+ OpenCV) zu verwenden.

Teilen Sie die Wörterbuchdaten Zeichen für Zeichen auf

cells = [np.hsplit(row,100) for row in np.vsplit(gray,50)]

Was macht das? Apropos, das Bild mit der Bezeichnung digits.png hat eine Größe von 1000 x 2000, und jede Zahl wird 500 Mal in einer Größe von 20 x 20 geschrieben, sodass die Vertikale durch 100 und die Horizontale durch 50 als Array in Zellen geteilt wird. Zeigt an, dass es gespeichert ist. In Wirklichkeit kann ich es jedoch nicht verstehen oder ich kann es niemals selbst schreiben. Es kann ausreichend sein zu wissen, dass es Möglichkeiten gibt, das Array zu teilen, z. B. np.hsplit () und np.vsplit ().

Aufteilen in Trainingsset und Testset

Nachdem Sie dies in einem Array von numpy namens x gespeichert haben, teilen Sie 250 von jeder Zahl in einen Trainingssatz und die restlichen 250 in einen Testsatz.

x = np.array(cells)

train = x[:,:50].reshape(-1,400).astype(np.float32)
test = x[:,50:100].reshape(-1,400).astype(np.float32)

Legen Sie außerdem für jede Daten eine Bezeichnung fest.

np.arange(10)Dann 10 von 0 bis 9 Array dieses zusammenhängenden ganzzahligen Arrays([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])Wird erstellt, wiederholen Sie es 250 Mal, um es zu beschriften.



```python
k = np.arange(10)
train_labels = np.repeat(k,250)[:,np.newaxis]
test_labels = train_labels.copy()

KNN-Ausführung

Führen Sie schließlich KNN aus. Lassen Sie es uns mit k = 5 ausführen.

knn = cv2.KNearest()
knn.train(train,train_labels)
ret,result,neighbours,dist = knn.find_nearest(test,k=5)

In der Tat führt das Obige zu einem Fehler. Tutorial scheint falsch zu sein. Schreiben Sie die obigen drei Zeilen wie folgt um.

knn = cv2.ml.KNearest_create()
knn.train(train,cv2.ml.ROW_SAMPLE,train_labels)
ret, results, neighbours, dist = knn.findNearest(test, 5)

Werfen wir einen Blick auf die Ergebnisse des Diskriminators.

matches = results==test_labels
correct = np.count_nonzero(matches)
accuracy = correct*100.0/results.size
print(accuracy)

20160909006.png

Das Ergebnis dieser Ausführung ist `` `91.76```. Ich habe den Eindruck, dass diese Genauigkeit durch die Unterscheidung von nur 10 Zeichen etwas gering ist.

Das ist alles für heute.

Dieser Code

Recommended Posts

Handschriftliche Zeichenerkennung mit KNN in Python
Spracherkennung mit Python
Führen Sie die handschriftliche Zeichenerkennung mit Pylearn 2 durch
Übersetzt mit Googletrans in Python
Verwenden des Python-Modus in der Verarbeitung
Zahlenerkennung in Bildern mit Python
GUI-Programmierung in Python mit Appjar
Vorsichtsmaßnahmen bei der Verwendung von Pit mit Python
Interaktive handgeschriebene Zeichenerkennungs-App mit Pygame
Versuchen Sie es mit LevelDB mit Python (plyvel)
Verwendung globaler Variablen in Python-Funktionen
Mal sehen, wie man Eingaben in Python verwendet
Gesamtleistung in Python (mit Funktools)
Versuchen Sie es mit LeapMotion mit Python
Suche nach Tiefenpriorität mit Stack in Python
Bei Verwendung regulärer Ausdrücke in Python
Versuchen Sie es mit der handgeschriebenen Zeichenerkennung (OCR) von GCP.
GUI-Erstellung in Python mit tkinter 2
Python: Grundlagen der Bilderkennung mit CNN
Hinweise zur Verwendung von cChardet und python3-chardet in Python 3.3.1.
Versuchen Sie es mit der Wunderlist-API in Python
GUI-Erstellung in Python mit tkinter Teil 1
Holen Sie sich Suica Balance in Python (mit libpafe)
Übung, dies in Python zu verwenden (schlecht)
Hash-Passwörter langsam mit bcrypt in Python
Versuchen Sie, die Kraken-API mit Python zu verwenden
Verwenden von venv in der Windows + Docker-Umgebung [Python]
[FX] Hit oanda-API mit Python mit Docker
Python: Anwendung der Bilderkennung mit CNN
Bilderkennungsmodell mit Deep Learning im Jahr 2016
Tweet mit der Twitter-API in Python
[Python] [Windows] Serielle Kommunikation in Python über DLL
Ich habe versucht, die Bayes'sche Optimierung von Python zu verwenden
Melden Sie sich mit Anforderungen in Python bei Slack an
Holen Sie sich Youtube-Daten in Python mithilfe der Youtube-Daten-API
Verwenden physikalischer Konstanten in Python scipy.constants ~ Konstante e ~
Scraping von Websites mit JavaScript in Python
Entwicklung eines Slack Bot mit Python mit chat.postMessage
Traffic Safety-Kun: Erkennung von Verkehrszeichen in Python
Schreiben Sie mit f2py ein Python-Modul in fortran
Zeichnen Sie mit graphviz eine Baumstruktur in Python 3
Hinweise zur Verwendung von Python (Pydev) mit Eclipse
Krankheitsklassifizierung durch Random Forest mit Python
Laden Sie Dateien in jedem Format mit Python herunter
Parallele Taskausführung mit concurrent.futures in Python
Szenenerkennung nach GIST-Feature-Quantität in Python
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
SendKeys in Python
Epoche in Python
Zwietracht in Python
Starten Sie Python
Deutsch in Python
DCI in Python
Quicksort in Python