Logo ICT-BZ

NoteWriter+

Kurzinfo

Themenbereich

Mobile Entwicklung
& Machine Learning

Lernende/r

Dawid Kapka

Lehrbetrieb

CSS Versicherung AG

Betreuer

Urs Nussbaumer

Projekt-Webseite

Github Repository

Aufgabenstellung

Im Basislehrjahr bakamen wir die Aufgabe, ein eigenes Projekt zu erstellen. Das Thema war frei wählbar, musste jedoch etwas mit der Informatik zu tun haben. Das Ziel meines Projektes war es, eine Mobile Applikation zu erstellen, in der man einerseits Notizen erstellen, speichern und bearbeiten kann, anderseits auch ein Foto machen kann, auf dem sich Text befindet und dies dann durch eine Texterkennung laufen lassen kann. Die App sollte dann fähig sein, beliebigen Text, der sich auf dem Bild befindet zu erkennen und diesen dem User zum Abspeichern/ Bearbeiten freigeben.

Ergebnisse

Ich konnte schlussendlich alle Anforderungen erreichen, welche ich mir eingeplant habe, habe jedoch ein Paar davon etwas abgeändert. Die wichtigsten Funktionen meiner App sind das Abspeichern, Erstellen und Bearbeiten von Notizen, sowie die Möglichkeit, ein Bild zu machen und diesen durch einen Python-Script laufen zu lassen, welches den Text, der sich darauf befindet erkennen kann.
Screen-Shot 1 Screen-Shot 2 Screen-Shot 3 Screen-Shot 4

Lösungskonzept

Die Mobile App wurde mit dem Framework "Flutter" erstellt, was mir erlaubte, Apps für iOS und Android zu schreiben, ohne diese jeweils in Java (für Android) und Swift (für iOS) einzeln zu schreiben. Stattdessen habe ich die App in Dart geschrieben. Für den Teil der Texterkennung habe ich Python, und hauptsächlich die Library PyTorch benutzt. Bei der Texterkennung hat mir auch die Library CRAFT sehr geholfen. Python habe ich auch noch benutzt, um die API zu schreiben, welche ich mit Flask geschrieben habe. Ich brauchte noch einen Server, auf dem ich die Python-API laufen lassen konnte, sowie den Python-Script für die Texterkennung. Die Bilder, die von der App gemacht werden werden somit für die Erkennung auf den Server raufgeladen. Danach wird ein http-Request an die API geschickt, welche dann das Bild an die Texterkennung weitergibt. Diese gibt danach als Antwort den Text, welcher von der API auch als Antwort wieder an die Flutter App weitergeleitet wird.

Aufgetretene Probleme

Ich hatte viele Schwierigkeiten damit, das Bild von der App an die API richtig zu übergeben und brauchte schlussendlich ziemlich viel Zeit, um dies richtig zu machen. Einer der Probleme war auch, dass man als Antwort immer den Text von einem alten Bild statt den neuen Bild bekam. Ich habe jedoch später herausgefunden, dass dies passierte, weil das Bild nicht genug schnell raufgeladen wurde und für die API immer noch das alte Bild vorhanden war. Dies habe ich aber ganz einfach gelöst, indem ich die API immer ca. 1 sek. warten lasse, bevor das Bild wieder übergeben wird. Ein Problem, welches ich jedoch nicht lösen konnte war, dass man bei einem Bild mit viel Text statt den Text eine Timeout-Nachricht bekam. Dies passiert, weil der Text nicht genug schnell erkannt werden kann und das html-Request ein Timeout als Antwort zurückgibt.

Ausblick

Obwohl nicht immer alles nach meinen Gedanken gelaufen ist, bin ich schlussendlich mit dem Projekt sehr zufrieden. Für das nächste Projekt versuche ich es, die Zeit etwas besser einzuplanen, damit ich meinen Zeitplan nicht immer abändern muss. Die App wird zukünftig auch auf dem Google Play Store verfügbar, sobald sie nun von Google überprüft wird, welches leider bis zum Projektende noch nicht passiert ist.