OCR-Plugin zur autom. Rechnungsauswertung

Autom. SEPA-Überweisung für Hibiscus

istra711

Betreff:

OCR-Plugin zur autom. Rechnungsauswertung

 ·  Gepostet: Heute um 00:02 Uhr  ·  #186864
Es gibt ein neues Plugin für Jameica, das eine Rechnungsvorlage (PDF oder Image) per OCR in eine SEPA-Überweisung verwandelt. Das geschieht weitestgehend automatisch, für den Fall, dass etwas nicht richtig erkannt wurde, kann man mit einfachen Klicks die fehlenden oder nicht korrekten Informationen ergänzen bzw. korrigieren. Die OCR-Engine ( Tesseract ) ist recht gut aber nicht perfekt, daher ist eine manuelle Eingabemöglichkeit zwingend. In den Einstellungen kann man die OCR-Engine optimieren und Keyword-Listen zur besseren Erkennung anlegen und optimieren:

https://github.com/istra711/OCRtransfer

Viel Spaß beim Testen! (derzeit Windows only)

Gruß
Michael

infoman

Betreff:

Re: OCR-Plugin zur autom. Rechnungsauswertung

 ·  Gepostet: Heute um 07:14 Uhr  ·  #186867
Zitat geschrieben von istra711
Die OCR-Engine ( Tesseract ) ist recht gut aber nicht perfekt

wäre es nicht zeitgemäßer hier eine KI-OCR (open source) zu verwenden.

hibiscus

Betreff:

Re: OCR-Plugin zur autom. Rechnungsauswertung

 ·  Gepostet: Heute um 07:26 Uhr  ·  #186869
Naja, Tesseract hat den Vorteil, dass es eine klassische lokal laufende OCR ist. Die übrigens eine sehr gute Zeichenerkennung hat. Eine veergleichbar leistungsfähige auf Standardhardware lokal laufende KI-basierte OCR gibt es derzeit nicht. Man müsste das dann also in der Cloud laufen lassen. Hinzu kommt, dass ein solches KI-Model mehrere GB gross ist. Nur für das Lesen eines QR-Codes wäre das ziemlich viel. Ach und mir wird gerade bewusst, dass mir gar kein spezifisches Model für QR-Codes bekannt ist.

Odin

Betreff:

Re: OCR-Plugin zur autom. Rechnungsauswertung

 ·  Gepostet: Heute um 07:38 Uhr  ·  #186870
by the way:

das gibt es als Geschäftsmodell bereits... KI und clodbasierend ;-)

https://gini.net/

und eben in diversen Apps und Programmen läuft das im Hintergund

Od

little.yoda

Betreff:

Re: OCR-Plugin zur autom. Rechnungsauswertung

 ·  Gepostet: Heute um 07:49 Uhr  ·  #186871
Zitat geschrieben von hibiscus

Nur für das Lesen eines QR-Codes wäre das ziemlich viel. Ach und mir wird gerade bewusst, dass mir gar kein spezifisches Model für QR-Codes bekannt ist.


Wenn ich https://github.com/istra711/OCRtransfer richtig verstehe, geht es aber darum, Rechnung ohne QR-Code zu verarbeiten.

hibiscus

Betreff:

Re: OCR-Plugin zur autom. Rechnungsauswertung

 ·  Gepostet: Heute um 08:02 Uhr  ·  #186872
Zitat geschrieben von little.yoda

Wenn ich https://github.com/istra711/OCRtransfer richtig verstehe, geht es aber darum, Rechnung ohne QR-Code zu verarbeiten.

Das stimmt. Wo hab ich da QR gelesen? OK, also OCR und semantische Erkennung der relevanten Werte auf der Rechnung.

OCR - also die reine Zeichenerkennung - ist quasi gelöst. Das kann Tesseract hervorragend. Dafür braucht man eigentlich keine KI. Die wirkliche Herausforderung ist die semantische Zuordnung - also zu erkennen, was z.B. der Betrag ist (das ist auch genau das, womit ich mich beruflich beschäftige). Die IBAN lässt sich mit einem regulären Ausdruck recht gut finden. Für Betrag und Rechnungsnummer am ehesten per Suchbegriff. Sowas kann KI in der Tat sehr gut. Aber hier ist es so, dass man dafür hinreichend große Modelle braucht.

istra711

Betreff:

Re: OCR-Plugin zur autom. Rechnungsauswertung

 ·  Gepostet: Heute um 08:33 Uhr  ·  #186873
Die KI-Lösung ist sicher ein guter Weg wenn es um die Zuordnung geht und das ist auch der schwierige Part in meinem Code, will sagen, es funktioniert nicht immer. Die Sparkassen bitten eine Handy-App an, die das nahezu perfekt macht, da läuft aber eine KI im Hintergrund. Man könnte das Plugin um eine KI-Lösung erweitern, was aber auch bedeuten würde dass sensitive persönliche Daten in der Cloud landen würden, das mag vielen egal sein, mir nicht.....

Ich kann mal schauen, ob man irgendwie eine KI einbinden kann, die man bei Bedarf dazuschalten kann. Das wäre zumindest eine Option und auch sicherer....

hibiscus

Betreff:

Re: OCR-Plugin zur autom. Rechnungsauswertung

 ·  Gepostet: Heute um 08:37 Uhr  ·  #186874
Ein Lösungsansatz für das Finden der Werte (ohne KI nutzen zu müssen) ist die Möglichkeit, die Positionsdaten der Wörter zu verwenden. Tesseract kann dir nicht nur den Volltext liefern sondern auch auf Wort- und Zeilenebene die Bounding Boxes. Der Ansatz wäre dann der, erst nach einem Schlüsselwort wie z.Bp. "Brutto" zu suchen und dann im Umkreis von dieser Position ausgehend rechts oder unterhalb nach etwas, das wie ein Betrag aussieht.

istra711

Betreff:

Re: OCR-Plugin zur autom. Rechnungsauswertung

 ·  Gepostet: Heute um 09:26 Uhr  ·  #186876
Zitat geschrieben von hibiscus


Das stimmt. Wo hab ich da QR gelesen? OK, also OCR und semantische Erkennung der relevanten Werte auf der Rechnung.



Ich denke, du bist mit meinem anderen Plugin (QRtransfer) durcheinander gekommen, was den QR-Code in einer Rechnung sucht und auswertet. Ich hatte erst überlegt, ob ich das nicht in einem Plugin zusammenfasse habe mich dann dagegen entschieden.

Was meint ihr, sollte man diese beiden Funktionen (OCR und QR) trennen oder in einem Plugin zusammenfassen?

Gruß
Michael

little.yoda

Betreff:

Re: OCR-Plugin zur autom. Rechnungsauswertung

 ·  Gepostet: Heute um 09:28 Uhr  ·  #186877
Zitat geschrieben von istra711

Was meint ihr, sollte man diese beiden Funktionen (OCR und QR) trennen oder in einem Plugin zusammenfassen?


Ich würde es zusammenfassen. Ist für den Endanwender weniger verwirrend.

hibiscus

Betreff:

Re: OCR-Plugin zur autom. Rechnungsauswertung

 ·  Gepostet: Heute um 09:43 Uhr  ·  #186879
Denke ich auch. Dann müsste der User im Optimalfall nicht mal wählen, woher die Daten gelesen werden. Er importiert einfach nur die Rechnung. Wenn sie einen QR-Code enthält, wird der genommen. Wenn nicht, dann per OCR.

Ich würde dir auch empfehlen, einen Importer zu implementieren (also eine Klasse, die das Hibiscus-Interface "Importer" implementiert und sich in "getIOFormats" für Überweisungen registriert (analog zu https://github.com/willuhn/hib…orter.java). Der Importer wird dann Hibiscus automatisch gefunden und direkt mit in der Dateiformat-Auswahl erscheinen, wenn der User in der Liste der Überweisungen im Kontextmenü auf "Importieren..." klickt.

infoman

Betreff:

Re: OCR-Plugin zur autom. Rechnungsauswertung

 ·  Gepostet: Heute um 09:51 Uhr  ·  #186881
@hibiscus
es gibt doch auch KI-OCR Anwendungen die lokal laufen und die Qualität ist anscheinend viel besser als herkömmliches OCR.
ja es bauscht das ganze auf, aber auf einem Windows-PC sollte das jetzt nicht unbedingt ein Problem sein.

war ja nur eine Idee und soll das o.g. Angebot in keinster weise schmälern

hibiscus

Betreff:

Re: OCR-Plugin zur autom. Rechnungsauswertung

 ·  Gepostet: Heute um 09:56 Uhr  ·  #186884
Zitat geschrieben von infoman

es gibt doch auch KI-OCR Anwendungen die lokal laufen und die Qualität ist anscheinend viel besser als herkömmliches OCR.

Also wenn du eine kennst, gern her damit. Ich kenne kein KI-Modell, dass OCR kann und nicht wenigstens einige GB gross ist.

istra711

Betreff:

Re: OCR-Plugin zur autom. Rechnungsauswertung

 ·  Gepostet: Heute um 10:08 Uhr  ·  #186886
Ok, danke für euer Feedback, dann werde ich mich mal dran machen und die beiden zusammenzufassen. Da das mit Linux und MacOS sicherlich kompliziert wird, muss ich mich aus Zeitgründen erstmal auf die Windows-Version konzentrieren.

@hibiscus
Bezüglich der Implementierung in Jameica/Hibiscus mit dem "Importer" brauche ich vermutlich etwas Unterstützung aber ich versuche es erstmal mit den Infos zu deinem Vorschlag hinzubekommen.

@infoman
Hast du da bereits eine lokale KI-Lösung im Auge, die für diesen Anwendungsfall geeignet wäre?

istra711

Betreff:

Re: OCR-Plugin zur autom. Rechnungsauswertung

 ·  Gepostet: Heute um 10:13 Uhr  ·  #186887
Zitat geschrieben von hibiscus

Zitat geschrieben von infoman

es gibt doch auch KI-OCR Anwendungen die lokal laufen und die Qualität ist anscheinend viel besser als herkömmliches OCR.

Also wenn du eine kennst, gern her damit. Ich kenne kein KI-Modell, dass OCR kann und nicht wenigstens einige GB gross ist.


OCR müsste sie nicht direkt können aber bei der Zuordnung (semantische Erkennung ) könnte sie sehr hilfreich sein und auch möglicherweise Fehler in der Erkennung korrigieren. So hatte ich in der IBAN zum Beispiel ein "I" statt einer "1" stehen, das kann ich derzeit nicht abfangen, die KI könnte das aber korrigieren....

hibiscus

Betreff:

Re: OCR-Plugin zur autom. Rechnungsauswertung

 ·  Gepostet: Heute um 10:28 Uhr  ·  #186889
Das kleinste mir bekannte LLM, dessen Sprachverständnis reichen könnte, um zu einem gegebenen Text Fragen beantworten zu lassen (sprich: man würde den von der OCR gelieferten Text + Prompt mit den Fragen zu den benötigten Feldern übergeben), ist "Qwen2-0.5B". Gibt's bei https://huggingface.co/Qwen/Qwen2-0.5B - allerdings ist auch das ~1GB gross. Erst ab ca. 8 Mrd. Parametern (z.B. die Llama 3 Modelle sind gut) kommt man aber in einen Bereich, wo qualitativ brauchbare Antworten kommen. Da bist du dann aber schon bei 4GB. Und um das performant laufen lassen zu können, brauchst du GPU/NPU.

infoman

Betreff:

Re: OCR-Plugin zur autom. Rechnungsauswertung

 ·  Gepostet: Heute um 18:59 Uhr  ·  #186902
@hibiscus
bzgl. Größe usw. habe ich keine Ahnung.
ich weiß nur im Office-Bereich (bspw. paperless-ngx) wurde vor ein paar Monate, als die Angelegenheit Fahrt aufgenommen hat div. Vergleiche (herkömmliches OCR zu KI-OCR) durchgeführt bspw.: https://www.youtube.com/watch?v=treF7oFLLmk bzw. https://www.youtube.com/watch?v=1uja1SGL0pY und die waren beeindruckend
Office-Apps mit KI-OCR Funktionen die (local) nur auf bspw. iOS laufen, sind ja anscheinend auch in der Entwicklung: https://stadt-bremerhaven.de/p…-geraeten/

Jedoch bin ich DAU und habe bspw. kein iOS, dass ich dies überprüfen/testen könnte.

istra711

Betreff:

Re: OCR-Plugin zur autom. Rechnungsauswertung

 ·  Gepostet: Heute um 19:06 Uhr  ·  #186903
Zitat geschrieben von hibiscus

Denke ich auch. Dann müsste der User im Optimalfall nicht mal wählen, woher die Daten gelesen werden. Er importiert einfach nur die Rechnung. Wenn sie einen QR-Code enthält, wird der genommen. Wenn nicht, dann per OCR.

Ich würde dir auch empfehlen, einen Importer zu implementieren (also eine Klasse, die das Hibiscus-Interface "Importer" implementiert und sich in "getIOFormats" für Überweisungen registriert (analog zu https://github.com/willuhn/hib…orter.java). Der Importer wird dann Hibiscus automatisch gefunden und direkt mit in der Dateiformat-Auswahl erscheinen, wenn der User in der Liste der Überweisungen im Kontextmenü auf "Importieren..." klickt.



Hallo Olaf,

ich habe versucht deinen Vorschlag umzusetzen aber es funktioniert nicht.
Die IORegistry scannt nur den Hibiscus-eigenen ClassFinder. Externe Plugin-Importer werden nicht erkannt, da die ClassService beim JAR-Scan die Hibiscus-Klassen (Importer, IOFormat, etc.) noch nicht im ClassLoader hat.

Das Problem scheint zu sein, dass der IORegistry in Hibiscus nur Importer im eigenen Classpath sucht (Zeile 60 in IORegistry.java):
ClassFinder finder = Application.getPluginLoader().getPlugin(HBCI.class)
.getManifest().getClassLoader().getClassFinder();

Das bedeutet: Externe Plugin-Importer werden nicht erkannt.

Ist meine Schlussfolgerung richtig bzw. was muss ich machen, damit meine Class vom Finder erkannt/gefunden wird?
Gibt es ein Beispiel, wo das mal umgesetzt wurde?

Gruß
Michael

hibiscus

Betreff:

Re: OCR-Plugin zur autom. Rechnungsauswertung

 ·  Gepostet: Heute um 19:35 Uhr  ·  #186905
Ja, stimmt. Hatte ich nicht auf dem Schirm. Ich schau mal, wie ich das ändern kann, damit das auch für Erweiterungsplugins funktioniert. Denn an sich finde ich die Stelle im allgemeinen Contextmenü für den Import schon die naheliegende.

istra711

Betreff:

Re: OCR-Plugin zur autom. Rechnungsauswertung

 ·  Gepostet: Heute um 20:54 Uhr  ·  #186906
Ich habe die KI mal auf den Hibiscus-Code und das Problem angesetzt, demnach müsste nur eine Zeile ändern in IORegistry.load() - statt nur den Hibiscus-ClassFinder zu nutzen, müssten alle Plugin-ClassFinder durchsucht werden:

Code

//Aktueller Code (Problem):
// Zeile 60 - nur Hibiscus-ClassFinder

ClassFinder finder = Application.getPluginLoader()
    .getPlugin(HBCI.class)
    .getManifest()
    .getClassLoader()
    .getClassFinder();

// Benötigte Änderung:
// Der IORegistry müsste alle Plugin-ClassFinder durchsuchen:
// Lösung: Alle Plugins durchsuchen

List<ClassFinder> finders = new ArrayList<>();

// Hibiscus als erstes
finders.add(Application.getPluginLoader()
    .getPlugin(HBCI.class)
    .getManifest()
    .getClassLoader()
    .getClassFinder());

// Dann alle anderen Plugins
for (Plugin p : Application.getPluginLoader().getInstalledPlugins()) {
    if (p == null) continue;
    ClassFinder cf = p.getManifest().getClassLoader().getClassFinder();
    if (cf != null && !finders.contains(cf)) {
        finders.add(cf);
    }
}

// Alle Finders zusammenführen
ClassFinder combined = new ClassFinder();
for (ClassFinder cf : finders) {
    combined.addFinder(cf);
}

// Dann suchen
Class<T>[] list = combined.findImplementors(type);




----------------------------------------------------------------------------------
Gruß
Michael