Koreanische Handschrifterkennungs-KI
Konkuk Univ. Senior, Multimedia-Programmierung – Semesterprojekt (Einzelprojekt)
1. Einführung
„Kann die koreanische Handschrift einer Person durch ein künstliches neuronales Netzwerk erlernt werden?“
Selbst wenn man die gleichen Briefe schreibt, sieht der Handschriftstil jeder Person leicht anders aus. Der Handschriftstil von Menschen, die zum Schreiben gezwungen werden oder unter Aufstoßen schreiben, hinterlässt andere Spuren als gewöhnlich und ist daher als Beweismittel sehr zuverlässig. Diese Einzigartigkeit macht eine Signatur einzigartig. Bei wichtigen Dokumenten und Prüfungen ist es sehr wichtig, die Handschrift auf Echtheit zu prüfen.
Da die Handschrift zum Identitätsnachweis verwendet wird, ist sie einzigartig. Wenn es jedoch zwei verschiedene Handschriften mit nur geringfügigen Unterschieden gibt, ist es für Menschen schwierig, den Unterschied mit bloßem Auge zu erkennen. Daher wollte ich ein Modell der künstlichen Intelligenz für die koreanische Handschrifterkennung implementieren.
(1-1) Eingabedaten
- Koreanische Handschrift von 10 Personen
- Das Bild oben wurde allesamt von einer anderen Person geschrieben. (Sie können sehen, dass es sich um dieselben Buchstaben handelt, die sich jedoch geringfügig unterscheiden.)
(1-2) Ziel
- 10 Personen (3 Familienmitglieder, 7 enge Freunde)
- BSN(Sona Bang), CHW(Howon Choi), KBJ(Beomjun Kim), KJH(Joonhyung Kwon), LJH(Jongho Lee), LSE(Seungeon Lee), PJH(Jonghyuk Park), PSM(Sangmoon Park), SHB( Suk Hyunbin), SWS(Woosub Shin)
(1-3) Erwartetes Anwendungsgebiet
- Handschriftliche Überprüfung der nationalen Prüfung und wichtiger Dokumente.
- OCR (Optische Zeichenerkennung)
2. Datenbank erstellen
2-1. Ein-Buchstaben-Daten
(1) imread
- Verwendete Vorlage von „Ongle-leap“, einem Unternehmen für Schriftdesign
- Enthalten sind alle Kombinationen koreanischer Buchstaben
(2) Unscharfe Maske
- Benutzte eine ungeschärfte Maske, um die eigene Handschrift zu schärfen
(3) Graustufentransformation
(4) Histogramm prüfen und 1. Schwellenwert anwenden
- Der Schwellenwert wird über das Histogramm festgelegt und das Bild wird basierend auf dem Schwellenwert binarisiert.
- (In diesem Beispiel ist der Schwellenwert auf 150 von 0 bis 255 eingestellt)
(5) LPF anwenden
- Um die Position der Handschrift zu extrahieren, ist es notwendig, die Handschrift durch LPF zu glätten, damit die Kontur freigelegt wird.
- Stellen Sie die Kernelgröße entsprechend ein und wenden Sie LPF über cv2.filter2D auf binarisierte Bilder an.
- Je kleiner die Kernelgröße, desto einfacher ist es, kleinere Einheiten wie Vokale und Konsonanten zu erkennen, und je größer die Kernelgröße, desto einfacher ist es, die Kontur des Buchstabens selbst zu erkennen.
- (Beispiel gilt für den 21x21-Kernel)
(6) Histogramm prüfen und 2. Schwellenwert anwenden
- Legen Sie den Schwellenwert anhand des mit LPF geglätteten Histogramms des Bildes fest. Anschließend wird die Binarisierung erneut basierend auf dem Schwellenwert durchgeführt.
- (Beispielschwellenwert: 230)
(7) Kontur und Koordinaten extrahieren, Bild zuschneiden
- Ein kleiner Umriss, der kein Buchstabe ist, wurde nicht extrahiert.
- Die x-, y-Koordinaten und w-, h-Werte wurden aus der extrahierten Kontur extrahiert und die Koordinaten erneut mit einem Quadrat berechnet, damit die Handschrifteigenschaften möglichst nicht verloren gingen, da sie später auf die Größe 64x64 geändert werden mussten.
- Durch die berechneten Koordinaten wurde das Bild in eine quadratische Form zugeschnitten.
(8) Imwrite
- 81 Ein-Buchstaben-Daten pro Person
- Insgesamt: 810 Ein-Buchstaben-Daten wurden gesammelt,
2-2. Daten aus zwei Buchstaben
- Die Zwei-Buchstaben-Daten wurden durch die Kombination verschiedener Einzelbuchstaben-Daten erstellt, die jeweils entsprechend skaliert wurden.
- Um den Verlust von Feature-Informationen während der Größenänderung zu reduzieren, wurde die Funktion img_concat(img1, img2) erstellt und verwendet, um die Bilder zu verbinden und sie zu Quadraten zu formen.
- 6.480 Zwei-Buchstaben-Daten pro Ziel erfasst (81P2)
2-3. Daten aus drei Buchstaben
- Drei-Buchstaben-Daten wurden durch Kombination von Ein-Buchstaben-Daten und Zwei-Buchstaben-Daten erstellt, jeweils entsprechend skaliert.
- Pro Ziel wurden 7.980 Drei-Buchstaben-Daten erfasst
2-4. Tatsächliche handschriftliche Daten aus Notizen
- Die Daten wurden aus den tatsächlichen Notizen des Ziels erfasst.
- 30 tatsächliche handschriftliche Daten pro Ziel erfasst
3. 1. Ergebnis
Zugdaten: Testdaten = 9:1
Verwendete Daten = Ein Buchstabe (81) + Zwei Buchstaben (500) + Drei Buchstaben (500) + Tatsächliche Handschrift (30)
n.Epoch = 20, Batch-Größe = 50, Lernrate = 0,01
Layer konfigurieren
- Ergebnis
- Verlust=0,7819, Genauigkeit=0,72
- Ergebnis für Testdaten=0,6503
4. 2. Ergebnis
Zugdaten: Testdaten = 9:1
Verwendete Daten = Ein Buchstabe (81) + Zwei Buchstabe (1000) + Drei Buchstabe (1300) + Tatsächliche Handschrift (30)
n.Epoch = 20, Batchgröße = 150, Lernrate = 0,04
Layer konfigurieren
- Ergebnis
- Verlust=0,0397, Genauigkeit=0,9908
- Ergebnis für Testdaten=0,9360
5. Ergebnisanalyse
Im Vergleich zum ersten Ergebnis waren die zweiten Ergebnisse alle deutlich verbessert. Ich denke, der Grund, warum sich die Ergebnisse verbessert haben, ist folgender.
(5-1) Erhöhung der zum Lernen verwendeten Daten
- Im ersten Versuch wurden 1.111 Daten pro Ziel verwendet, im zweiten Versuch wurden 2.411 Daten verwendet, also mehr als das Doppelte.
- Da das Lernen und die Bewertung auf der Grundlage weiterer Daten erfolgten, hätten feinere Merkmale der Handschrift des Zielobjekts erfasst werden können.
(5-2) Änderungen in der Schicht des künstlichen neuronalen Netzwerks
- Im zweiten Versuch wurden die Größe der Faltungsmaske und die Größe des Poolings geändert.
- Die Größe der Faltungsmaske wurde auf eine kleinere Größe als zuvor reduziert, um sehr feine Handschrifteigenschaften zu erfassen
- Der Verlust von Handschriftmerkmalen im Lernprozess wurde durch Reduzierung der Poolgröße reduziert.
- Um mehr Informationen über die Handschrift als Parameter zu enthalten, wurde außerdem die Anzahl der vollständig verbundenen Knoten von 128 auf 256 erhöht
(5-3) Steigerung der Batchgröße und Lernrate