Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ss19:schrifterkennung [2019/09/02 18:16] noah-savgu-2000 |
ss19:schrifterkennung [2019/09/20 10:38] (aktuell) stefanborn |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | Salut, | ||
- | |||
- | in eurer Ausarbeitung sind Protokolle enthalten, Planung und | ||
- | Verlauf sind teilweise beschrieben, aber häufig ohne Details. | ||
- | |||
- | Eine systematische Darstellung eures Ergebnisses aber | ||
- | -- "Welche Teile lösen wie welche Aufgaben" -- | ||
- | fehlt gänzlich. | ||
- | |||
- | Außerdem fehlt eine Kommentierung des eigentlichen Codes. | ||
- | |||
- | Und schließlich fehlt noch, was in der kleinen Charakterisierung | ||
- | der Dokumentation ausdrücklich verlangt war, eine gezippte | ||
- | Version eures Codes zusammen mit einer Datei requirements.txt. | ||
- | die die verwendeten Pakete mit Versionsnummern auflistet | ||
- | (pip freeze), so dass andere euer Projekt replizieren können. | ||
- | |||
- | Ich weiß nicht, ob ihr keine Zeit oder keine Lust hattet, | ||
- | aber so wäre die Dokumentation nicht gut. Bestanden hättet | ||
- | ihr trotzdem, da mein Bewertungsschema für die Elemente | ||
- | Hausaufgabe, Projekterebnisse, Planung, Protokoll und Vortrag | ||
- | schon genügend viele Punkte vergibt. | ||
- | |||
- | Ich fände es aber schöner, wenn ihr noch eine richtige | ||
- | Dokumentation daraus macht. | ||
- | |||
=====Schrifterkennungsprogramm===== | =====Schrifterkennungsprogramm===== | ||
- | =====Teilnehmer===== | + | ===Teilnehmer=== |
* Jonas Hanfland | * Jonas Hanfland | ||
* Leonard Sauder | * Leonard Sauder | ||
* Noah Savgu | * Noah Savgu | ||
* Jasper Heinlein | * Jasper Heinlein | ||
+ | {{schriftbois.jpeg?300}} | ||
+ | ===Beschreibung=== | ||
+ | Entwicklung eines Nutzungsprogramms, welches Bilder von Handschrift und mathematischen Formeln in nutzbaren LaTeX-code umwandelt. Das Programm soll einem Nutzer erlauben, ein Bild von einem schriftlich verfassten Text, z.B. einer Mitschrift, einzusetzen. Da es für Studenten von technischen Studiengängen auch nützlich sein soll, sollen auch mathematische Symbole eingeführt werden. Das Programm soll die Schrift digitalisieren und als LaTeX-Dokument ausgeben. Das Projekt konnte in dem Semester jedoch nicht vollständig realisiert werden. in der [[quellenangabe]] befinden sich unter Schrift zu LaTeX aber Ideen die mit diesem Projekt eventuell verbunden werden könnten, um es zu beenden. | ||
- | =====Beschreibung===== | + | Systematische Darstellung und kleine Einführung für das Projekt: {{:ss19:das_schrifterkennungsprogramm_systematische_darstellung_final.pdf|}} |
- | Entwicklung eines Nutzungsprogramms, welches Bilder von Handschrift und mathematischen Formeln in nutzbaren LaTeX Sourcecode umwandelt. Das Programm soll einem Nutzer erlauben ein Bild einzusetzen von einem Schriftlich verfassten Text, z.B. einer Mitschrift. Das Programm soll es digitalisieren und als LaTeX Dokument ausgeben | + | |
- | [[Plan]] | ||
- | [[Systematische Darstellung]] | + | {{systematische_darstellung.png|}} |
- | [[Journal]] | ||
- | [[Quellenangabe]] | ||
+ | [[Plan]] | ||
+ | [[Journal]] | ||
- | =====Plan===== | + | [[Quellenangabe]] |
- | =====Ressourcensammlung===== | + | |
- | *Machine Learning | + | |
- | *Aufbau und programmieren von neuronalen Netzwerken | + | |
- | *Schnittstelle zwischen LaTeX und Python | + | |
- | *Datenbanken sammeln(Handschrift und mathematische Formeln) | + | |
- | + | ||
- | + | ||
- | *Versionsverwaltung | + | |
- | + | ||
- | + | ||
- | + | ||
- | =====Coding===== | + | |
- | *Neuronales Netzwerk für Zahlen erstmal | + | |
- | *dann Prinzip auf Buchstaben und Formeln anwenden | + | |
- | *Verarbeitung der Daten zu LaTeX(Schnittstelle) | + | |
- | =====Offene Fragen===== | + | |
- | *<del>mit digitalen Handschrift oder sofort mit Bildern anfangen(Kontrast: Schwarz Weiß)?</del> Es sollte keinen großen Unterschied machen. Durch Bildbearbeitung kann ein Bild von egal was für einer Art von Handschrift in eine einheitliche Form umgestaltet werden. Bspw. durch Erhöhung des Bildkontrasts kann der Hintergrund annähernd ausgeblendet werden. Mit weiteren Tools lässt sich das Bild bestimmt auch in ein "greyscale"-Bild umwandeln. Letzendlich sollte das Programm dann für sowohl digital -, als auch handschriftlich geschriebene Texte funktionieren. | + | |
- | *Was passiert mit dem LaTeX Sourcecode, also wo | + | |
- | *Wie gut funktioniert die Schreibschrifterkennung? | + | |
- | *Gibt es Probleme dabei, Buchstaben einzeln im Wort zu erkennen, trotz der Nähe der Charaktere (und teilweisiger Überlappung). | + | |
- | *Wie werden Leerzeichen, neue Absätze, o. Ä. erkannt? | + | |
- | **Neu* Wie kann man ein CNN, das auf Zahlenerkennung angelegt ist, auf die Buchstabenerkennung expandieren? | + | |
- | **Neu* Wie kann man das Bildformat von Datensätzen anpassen, sodass es die gleiche Pixelgröße wie ein anderer bereits angewendeter Datensatz nutzt? (Bsp. 40x40 zu 28x28) | + | |
- | **Neu* Wie kann man auf ein CNN eingreifen, sodass sich die Fehlerrate verkleinert, wodurch ein effizienteres Programm erstellt werden kann? | + | |
- | =====Journal===== | + | |
- | *\[23.05.2019\] | + | |
- | -Bearbeitung "Getting Started" auf [[https://keras.io|Keras]].\\ | + | |
- | -Besprechung mit Herrn S. Born mit folgenden Ergebnissen: | + | |
- | -Hilfreich wäre, mit dem nicht-neuronalen [[https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm|K-Nearest-Neighbors Algorithmus]] zu beginnen, um ein Programm fuer die Zahlenerkennung zu erstellen.\\ | + | |
- | -Hierfuer könne man den "NMIST"-Datensatz verwenden. | + | |
- | -Eine Einführung in diese Art der Programmierung ist im Lehrbuch "Hands-On Machine Learning with Sci-Kit and Tensor Flow" zu finden. Jenes wird sowohl für die Verständnis der Theorie hinter der Zahlenerkennungsprogrammierung, als auch um eine einführende praktische Anleitung darüber zu erhalten, wie ein solches Programm aussieht, benutzt. | + | |
- | -Fuer die Bearbeitung des finalen Projekts (mithilfe eines neuronalen Netzwerkes) wurde vorgeschlagen, "scikit" zu benutzen, der auch das K-Nearest-Neighbor beinhaltet. | + | |
- | -Einlesen/Auslesen des MNIST-Datensatzes erlernt. | + | |
- | *\[29.05.2019\] | + | |
- | -Weiterhin wird die Einführung in die Zahlenerkennungsprogrammierung im Buch bearbeitet. | + | |
- | -Verschiedene Aspekte der Programmsfunktionsweise wurden innerhalb der Gruppe erörtert. Besonders thematisiert wurde die Leistungsmessung durch "Cross-Validation", "Confusion Matrix", "Precision" und "Recall" . | + | |
- | *\[06.06.2019\] | + | |
- | -Abschließen des zu lesenden Kapitels im Lehrbuch. Notwendiger Wissenstand für die Schrifterkennung mithilfe von "Classification" ist erreicht, inklusive der Ausführung des K-Nearest-Neighbors Algorithmuses. | + | |
- | -Weiterer Verlauf: Beginn mit dem Neuronalen-Netzwerk | + | |
- | -Plan: Von S. Born bereitgestellte Vorlesungsfolien (ipnb) wiederholen und Quellen (insbesondere die Bücher) bearbeiten. | + | |
- | *\[13.06.2019\] | + | |
- | -Zusammenfassenden Vortrag über "Convolution" in Neuronalen Netzwerken von S. Born erhalten. | + | |
- | -Aufstellen des ersten "Convolutional"-Neuronalen-Netzwerkes (CNN) für Zahlenerkennung. Hierbei genutzt wurde der MNIST Datensatz in der Keras-Tensorflow Umgebung. | + | |
- | -Prinzip der "Epochs" bzw. der Layers im erstellten CNN erforscht. Die nach jedem Layer kleiner werdenden Matrizen, welche die auf die Zahlen angewendete Erkennungsmuster beschreiben, haben wir grafisch veranschaulicht. Fazit: Das Programm benutzt teils sehr kuriose Muster. | + | |
- | -Besprechung und Planung des weiteren Verlaufs. Aufteilung für beantworten offener Fragen. | + | |
- | *\[20.06.2019\] | + | |
- | -Laden der Epochs im Convolutional Neural Network | + | |
- | -Testen des CNNs nachdem die Trainingsdaten vor jedem "Epoch" durchgemischt wurden. Problem: provisorischer Speicher reicht nicht aus, um den Datenset N (= Anzahl der Epochs) mal in gemischtem Zustand auf einmal zu speichern. Könnte behoben werden, wenn der Datenset in mehrere Teile unterteilt wird, welche nacheinander gemischt geladen werden. | + | |
- | *\[27.06.2019\] | + | |
- | -Noah: Erweitern der benutzten Datensets, um mathematische Zeichen einzufügen. | + | |
- | -Jasper: Aneignen der mathematischen Hintergründe. | + | |
- | -Jonas: Einrichten der Webanwendung Gitlab für gemeinsames Versionsverwalten | + | |
- | -Leonard: Versuch, das Segmentieren eines handschriftlich geschriebenen Textes, sodass einzelne Buchstaben herausegelesen werden, zu Coden. | + | |
- | *\[4.06.2019\] | + | |
- | -Fortsetzen der individuellen Aufgaben von letzter Woche. | + | |
- | *\[11.06.2019\] | + | |
- | -Erfolgreich zwei verschiedene Datensetz zu einem vereint. | + | |
- | -Hierbei mussten die Datensets zuerst auf die gleiche np.array Größe gebracht werden. Der Datenset von "Images" mit der Größe 45x45 wurde auf die Größe 28x28 mithilfe von [[https://scikit-image.org/docs/dev/auto_examples/transform/plot_rescale.html|der Sci-Kit Bibliothek]] gebracht. | + | |
- | -Nachdem die "images" und "labels" np.arrays kombiniert wurden, hat man diese jeweils global gespeichert (mit np.save()). Somit sind jene wiederaufrufbar, ohne den zugehörigen Code ausführen zu müssen. | + | |
- | *\[Blocktermin - Tag 1\] | + | |
- | In der Segmentierung wurden Bounding Boxes eingefügt. Es wird sich jedes zusammenhängendes bzw. lückenloses Konstrukt in einem Bild - sprich, für jeden Buchstaben in einem handschriftlich geschriebenen Text - angeschaut. Hier werden die Eckkoordinaten und zugehörige Höhe und Weite gespeichert. So lassen sich die Positionen jeder einzelnen Box in später auftretenden Funktionen aufrufen. Mit OpenCV lassen sich die Boxen klar und deutlich auf die Buchstaben legen und man kann sie anzeigen. | + | |
- | *\[Blocktermin - Tag 2 \] | + | |
- | + | ||
- | *\[Blocktermin - Tag 3 \] | + | |
- | Tatsächliches kombinieren zweier Bounding Boxes, falls ein Punkt über einem passenden Körper sich befindet. Hierbei wird der Wert des Zentrums einer Box verwendet | + | |
- | =====Quellenangabe===== | + | |
- | [[https://keras.io|{{https://s3.amazonaws.com/keras.io/img/keras-logo-2018-large-1200.png?200}}]]\\ | + | Die zip file: |
- | [[http://neuralnetworksanddeeplearning.com/chap1.html]]\\ | + | |
- | [[https://keras.io/scikit-learn-api/]]\\ | + | |
- | [[https://www.datacamp.com/community/tutorials/autoencoder-keras-tutorial]]\\ | + | |
- | Géron, Aurélien, //Hands-On Machine Learning with Scikit-Learn & TensorFlow | Concepts, Tools, and Techniques To Build Intelligent Systems//, O'Reilly Media, Inc., 2017. Print. | + | |
+ | {{schrifterkennung.zip}} |