synOCR synOCR - GUI für OCRmyPDF

whocares

Benutzer
Mitglied seit
10. Okt 2018
Beiträge
52
Punkte für Reaktionen
1
Punkte
8
Klar, ist das eine Schleife. Aber Du wirst doch eh in irgendeiner Form eine Schleife haben, um alle Dateien im Quellordner durchzugehen...
Gerade zum Testen der Scripte wäre das ungemein praktisch.

Glaube es geht darum, dass es dann eine ENDLOS-Schleife geben würde ;)
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
Nein, keine Endlosschleife, aber die "ignorierten" Dateien würden bei jedem Aufruf immer wieder berücksichtigt und durch die Maschinerie gejagt. Unglaubliche Zeitverschwendung
 

muellerml

Benutzer
Mitglied seit
28. Apr 2019
Beiträge
2
Punkte für Reaktionen
0
Punkte
0
Ich habe bei dem Skript das Problem, dass ich Rechnungen scannen lassen will, die für die Rechnungsnummer folgendes Format besitzen: 11111111111/11/11
Dies führt zu einer initialen Erkennung als Datum, wodurch das eigentliche Datum der Rechung gar nicht ausgelesen wird. Dies könnte man durch eine Erweiterung der einzelnen Regex-Ausdrücke umgehen, die überprüft, ob vor dem gefundenen Ausdruck weitere Buchstaben oder Ziffern vorhanden sind, was mit einem "negative lookbehind" möglich ist. Für den oben genannten Fall wäre dies beispielsweise durch eine Erweiterung des Regex-Ausdrucks mit (?<!\w) möglich. (s. auch
https://stackoverflow.com/a/7317087).
 

lriegel

Benutzer
Mitglied seit
30. Apr 2019
Beiträge
3
Punkte für Reaktionen
0
Punkte
0
Hallo,
ich habe aktuell Probleme das Paket zum Laufen zu bekommen.

Ich bekomme aktuell folgende Fehlermeldung in den Logs:
--> OCRmyPDF-LOG:
ERROR - -: file not found or invalid argument
read unix @->/var/run/docker.sock: read: connection reset by peer
<-- OCRmyPDF-LOG-END

Lt. docker ps startet der Container kurzzeitig - scheint dann aber frühzeitig beendet zu werden.

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6a40379e88bd jbarlow83/ocrmypdf "/application/dock..." 5 seconds ago Up 1 second synOCR

Hätte ggf. jemand eine Idee und kann mir weiterhelfen?

Gruß
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.385
Punkte für Reaktionen
1.199
Punkte
234
Zunächst ersteinmal ein Hallo an muellerml und lriegel und herzlich willkommen hier im Forum.
Bitte entschuldigt die zum Teil späte Antwort, aber offline bin ich gerade ziemlich ausgelastet …

Ich habe bei dem Skript das Problem, dass ich Rechnungen scannen lassen will, die für die Rechnungsnummer folgendes Format besitzen: 11111111111/11/11
Dies führt zu einer initialen Erkennung als Datum, wodurch das eigentliche Datum der Rechung gar nicht ausgelesen wird. …

Ich hatte da schon mehrmals ein false positiv Ergebnis, was ich aber nicht nachvollziehen kann. In einem Fall war es z.B. der String "[72.07.41" der gematchd wird.
Die zugrunde liegende RegEx sieht derzeit so aus:
Rich (BBCode):
# Format: mm[./-]dd[./-]yy(yy) amerikanisch
"[0-1]?[0-9][\./-](0[1-9]|[1-2][0-9]|3[0-1])[\./-](19[0-9]{2}|20[0-9]{2}|[0-9]{2})"

Ein weiterer Fall war der String "049/011-2/017-206-206-011/000049-00002-M",
Die zugrunde liegende RegEx sieht derzeit so aus:
Rich (BBCode):
# Format: dd[./-]mm[./-]yy(yy)
"([1-9]|[1-2][0-9]|3[0-1])[\./-][0-1]?[0-9][\./-](19[0-9]{2}|20[0-9]{2}|[0-9]{2})"
sowie:
Rich (BBCode):
# Format: yy(yy)[./-]mm[./-]dd
"(19[0-9]{2}|20[0-9]{2}|[0-9]{2})[\./-][0-1]?[0-9][\./-](0[1-9]|[1-2][0-9]|3[0-1])"

Wo liegt da der Fehler? :confused:
Jemand eine Idee?



Hallo,
ich habe aktuell Probleme das Paket zum Laufen zu bekommen.

Lt. docker ps startet der Container kurzzeitig - scheint dann aber frühzeitig beendet zu werden …

Also zum einen ist es ja nur ein temporärer Container. Wenn man ihn startet, beendet er sich auch gleich wieder. Für synOCR ist es also nur wichtig, das Docker installiert ist - um das Image und den Container sollte ich synOCR kümmern.

Aber deine Fehlermeldung aus dem Log finde ich schon eigenartig.

Hast du vielleicht nocht bestimmte Parameter für OCRmyPDF in der Konfiguration gesetzt?
Enthält der Dateipfad vielleicht irgendwelche Sonderzeichen?
Mal mit einer anderen Datei / Quellpfad getestet?
 
Zuletzt bearbeitet:

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
Für das Datum amerikanisch wäre ne Idee (kannst du sicher alles besser testen, wenn du genügend samples hast)
Code:
# Format: mm[./-]dd[./-]yy(yy) amerikanisch
(^[0-9]|[01][0-9])[\.\/-]([0-9]|[012][0-9]|3[01])[\.\/-](19[0-9]{2}|20[0-9]{2}|[0-9]{2}$)

Für das Datum
Code:
# Format: dd[./-]mm[./-]yy(yy)
(^[1-9]|[012][0-9]|3[01])[\.\/-]([1-9]|[01][0-9])[\.\/-](19[0-9]{2}|20[0-9]{2}|[0-9]{2}$)

Für das Dritte habe ich grad nix sinnvolles.

Edit: Nachtrag, vielleicht damit (wobei das nicht so 100% ist)
Code:
# Format: yy(yy)[./-]mm[./-]dd
(19[0-9]{2}|20[0-9]{2}|[0-9]{2})[\.\/-]([0-9]|[01][0-9])[\.\/-]([1-9]|[12][0-9]|3[0-1])

Edit2:
Immer die Frage, was man voraussetzen darf. Ob z.B. vor/nach dem Datum mindestens ein leerzeichen/space kommt etc.
 
Zuletzt bearbeitet:

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.385
Punkte für Reaktionen
1.199
Punkte
234
Hallo Fusion,

vielen Dank zunächst für deinen Input.
Einiges geht so besser, aber manches immer noch nicht (z.B. der String von muellerml oben. Der wird mit jeder RegEx hier gefunden … :confused:).

Ich poste mal ein kleines Testskript, welches den Suchstring aus der Parameterübergabe nimmt. Besonders die (für uns) umgekehrte Datumssuche ist besonders rückgabefreudig:
Rich (BBCode):
#!/bin/sh

# Beispiele von falsepositive Ergebnissen:
# 1-3:     /volume3/DEV/test.sh "etwas davor 11111111111/11/11 und noch mehr danach"
# 2:       /volume3/DEV/test.sh "etwas davor [72.07.41 und noch mehr danach"
# 2:       /volume3/DEV/test.sh "etwas davor 35.04.1998 und noch mehr danach"
# 2:       /volume3/DEV/test.sh "etwas davor 30.04.1998 und noch mehr danach"

parseRegex () 
{
echo "$1" | awk '{
    for(i=1; i<=NF; i++) {
        tmp=match($i, /'"${2}"'/)
        if(tmp) {
                print $i
            }
        }
    }'
} 

founddate=$( parseRegex "$1" "(^[1-9]|[012][0-9]|3[01])[\.\/-]([1-9]|[01][0-9])[\.\/-](19[0-9]{2}|20[0-9]{2}|[0-9]{2}$)" | head -n1 )
echo -n "Test 1 (dd[./-]mm[./-]yy(yy)) -> "
if [ ! -z $founddate ]; then
    echo "OK: $founddate"
else
    echo "false"
fi

founddate2=$( parseRegex "$1" "(19[0-9]{2}|20[0-9]{2}|[0-9]{2})[\.\/-]([0-9]|[01][0-9])[\.\/-]([1-9]|[12][0-9]|3[0-1])" | head -n1 )
echo -n "Test 2 (yy(yy)[./-]mm[./-]dd) -> "
if [ ! -z $founddate2 ]; then
    echo "OK: $founddate2"
else
    echo "false"
fi

founddate3=$( parseRegex "$1" "(^[0-9]|[01][0-9])[\.\/-]([0-9]|[012][0-9]|3[01])[\.\/-](19[0-9]{2}|20[0-9]{2}|[0-9]{2}$)" | head -n1 )
echo -n "Test 3 (mm[./-]dd[./-]yy(yy)) -> "
if [ ! -z $founddate3 ]; then
    echo "OK: $founddate3"
else
    echo "false"
fi

… Immer die Frage, was man voraussetzen darf. Ob z.B. vor/nach dem Datum mindestens ein leerzeichen/space kommt etc …
Das muss synOCR halt universal abfangen - man weiß ja nie, was da kommt.
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
Ganz universell wird es denke nicht gehen. Sonst wird man immer false positives über behalten wenn jemand strings verwendet von denen Teilstrings einem Datums Format entsprechen. Ohne weitere Kriterien wird es unmöglich das dann zu entscheiden, also Bsp. Findet sich noch woanders eine Rechnungsnummer oder ähnlich. Sehr schnell sehr komplex zu entscheiden. Von daher finde ich ein Kriterium ala 'das Datum steht frei' und ist nicht Teil eines größeren Strings ('19701980.02.12' darf nicht erkannt werden, '1970 1980.02.12' hingegen schon) finde ich jetzt nicht zu sehr einschränkend.

Ich schaue morgen nochmal drauf, ob ich noch einen Geistesblitz habe.
 

lriegel

Benutzer
Mitglied seit
30. Apr 2019
Beiträge
3
Punkte für Reaktionen
0
Punkte
0
Ok - neuer Versuch mit anderem Pfad.
Erneut der gleiche Fehler.
Konfiguration entspricht den Default werten.

Also zum einen ist es ja nur ein temporärer Container. Wenn man ihn startet, beendet er sich auch gleich wieder. Für synOCR ist es also nur wichtig, das Docker installiert ist - um das Image und den Container sollte ich synOCR kümmern.

Aber deine Fehlermeldung aus dem Log finde ich schon eigenartig.

Hast du vielleicht nocht bestimmte Parameter für OCRmyPDF in der Konfiguration gesetzt?
Enthält der Dateipfad vielleicht irgendwelche Sonderzeichen?
Mal mit einer anderen Datei / Quellpfad getestet?

Rich (BBCode):
    -----------------------------------
    |    ==> Installationsinfo <==    |
    -----------------------------------

synOCR-User:              root
synOCR-Version:           0.15.1
Architektur:              x86_64
DSM-Build:                23824
Gerät:                    216plus (1679727142)
aktuelles Profil:         default
verwendetes Image:        jbarlow83/ocrmypdf
verwendete Parameter:     -srd -l deu
ersetze Suchpräfix:       no
Umbenennungssyntax:       
Loglevel:                 erweitert
Anwendungsverzeichnis:    /usr/syno/synoman/webman/3rdparty/synOCR
Quellverzeichnis:         /volume1/scan/synOCR/inbox/
Quellverzeichnis:         /volume1/scan/synOCR/ocr/
BackUp-Verzeichnis:       /volume1/scan/synOCR/_BACKUP/


    ----------------------------------
    |    ==> Funktionsaufrufe <==    |
    ----------------------------------

    VERARBEITE:       --> scan0302.pdf (Tue Apr 30 17:12:16 CEST 2019)
                          temp. Zieldatei: /tmp/tmp.S2xwZtXabG/scan0302.pdf

                      --> OCRmyPDF-LOG:
                         ERROR - -: file not found or invalid argument
                       read unix @->/var/run/docker.sock: read: connection reset by peer
                      <-- OCRmyPDF-LOG-END

                          L=> fehlgeschlagen! (Zieldatei ist leer oder nicht vorhanden)
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.385
Punkte für Reaktionen
1.199
Punkte
234
Ganz universell wird es denke nicht gehen. Sonst wird man immer false positives über behalten wenn jemand strings verwendet von denen Teilstrings einem Datums Format entsprechen …
Ja, damit rechne ich schon auch, aber mit universell meinte ich auch eher, dass es zumindest jedes Datum findet, unabhängig in welchem Kontext es steht

… Von daher finde ich ein Kriterium ala 'das Datum steht frei' und ist nicht Teil eines größeren Strings ('19701980.02.12' darf nicht erkannt werden, '1970 1980.02.12' hingegen schon) finde ich jetzt nicht zu sehr einschränkend. ...
So sehe ich das auch. Ich verstehe allerdings noch nicht, warum überhaupt solche völlig abweichende Strings gematched werden, in denen nicht einmal ein gültiges Datumsformat enthalten ist.
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.385
Punkte für Reaktionen
1.199
Punkte
234
Ok - neuer Versuch mit anderem Pfad.
Erneut der gleiche Fehler.
Konfiguration entspricht den Default werten …

Das tut mir leid - verstehen tue ich's nicht …
Kannst du mal in der Konfiguration das Polyglot-Image für OCRmyPDF auswählen und damit testen? Ist nur ein Blindversuch.
 

muellerml

Benutzer
Mitglied seit
28. Apr 2019
Beiträge
2
Punkte für Reaktionen
0
Punkte
0
Ja, damit rechne ich schon auch, aber mit universell meinte ich auch eher, dass es zumindest jedes Datum findet, unabhängig in welchem Kontext es steht


So sehe ich das auch. Ich verstehe allerdings noch nicht, warum überhaupt solche völlig abweichende Strings gematched werden, in denen nicht einmal ein gültiges Datumsformat enthalten ist.

Das funktioniert, weil der Regex ohne jeden Kontext angewendet wird, d.h. der Regex erkennt auch nicht, was vor dem beginnenden Zeichen stand, bei 19701980.02.12 wird z.B. 1980.02.12 als valides Datumsformat erkannt. Sieht der Regex (ohne Rücksicht auf die korrekte Syntax bzw. das korrekte Escapen) also so wie folgt aus: (?<!\w)(19[0-9]{2}|20[0-9]{2}|[0-9]{2})[.\/-][0-1]?[0-9][.\/-](0[1-9]|[1-2][0-9]|3[0-1]) wird zuerst der "hintere" Teil gematched, bevor das "(?<!\w)" angewendet wird. In diesem Fall würde mein Beispielstring nicht mehr matchen, der von Fusion aber wie erwartet schon. (getestet mit https://regex101.com/)
 

lriegel

Benutzer
Mitglied seit
30. Apr 2019
Beiträge
3
Punkte für Reaktionen
0
Punkte
0
Das tut mir leid - verstehen tue ich's nicht …
Kannst du mal in der Konfiguration das Polyglot-Image für OCRmyPDF auswählen und damit testen? Ist nur ein Blindversuch.
Vielen Dank Stephan, Ich verstehe es auch nicht, aber die Verwendung des Polyglot-Images hat tatsächlich geholfen.
 

mördock

Benutzer
Mitglied seit
04. Jan 2012
Beiträge
796
Punkte für Reaktionen
15
Punkte
44
Nabend,
Keine Ahnung ob das folgende Problem hier bereits mal aufgetreten ist. Wenn ja, ignoriert was ich schreibe. Wenn nein, hilft mein Text vielleicht.
Bei mir startet täglich um 12 Uhr die Konvertierung per Zeitplan, klappt auch grundsätzlich einwandfrei.
Am Freitag allerdings hat der Vorgang sich aufgehangen, habe es erst heute gemerkt.
Ein Dokument wurde bearbeitet, dann war Ende. Heute habe ich gemerkt das die Dokumente nicht fertiggestellt sind und ich habe nach dem -Fehler gesucht.
-Zeitplan, aktiv.
-Synocr sagt, noch 18 Dokumente sind zu bearbeiten.
-Manuelles starten führt zu der Meldung das noch eine Bearbeitung aktiv ist. Bekomme auch eine Prozess id angezeigt
-Beenden lässt sich der Vorgang nicht
-Die Prozess id konnte ich im Resourcenmonitor nicht finden
-Die CPU Auslastung und RAM Auslastung sind völlig entspannt, wie im Leerlauf
Das beste ist aber, die DS läuft seit vier Tagen durch, sonst geht sie nachts aus. Ich kann sie komplett bedienen, nur runterfahren kam ich sie nicht., weder über DSM noch über den Powerknopf. Wird der Powerknopf gedrückt blinkt er blau aber nichts passiert. Erst durch sehr langes Socken geht die DS schlagartig aus. Nach dem Neustart kam die Meldung das sich ein Dockrtcontainer aufgehangen hat.
Fazit: synocr ist top, der Fehler lag wohl im benutzten Container. Jetzt läuft alles wieder.
Vielleicht hilft dieser Erfahrungsbericht jemanden der sich wundert warum synocr nicht seine Arbeit verrichtet.

#Mördock#
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.385
Punkte für Reaktionen
1.199
Punkte
234
Hallo Mördock,

danke für dein Input. So etwas habe ich noch nicht beobachtet, aber da scheint sich ja wirklich der Container aufgehängt zu haben.
 

Schlabbi

Benutzer
Mitglied seit
09. Apr 2019
Beiträge
4
Punkte für Reaktionen
0
Punkte
1
Exakt das gleiche Problem habe ich auch seit einiger Zeit, bin aber noch nicht dazu gekommen mich eingehender damit zu beschäftigen. Neustart der DS und der Versuch den Docker anzuhalten brachten alles nichts... Zwar waren die Prozesse bei mir unter der ID zu finden, beenden oder abbrechen konnte ich sie aber nicht.
Jetzt habe ich es gerade nochmal mit dem Hart-Aus über den Powerbutton versucht und nun geht es wieder...
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.385
Punkte für Reaktionen
1.199
Punkte
234
Funktioniert es, nicht das Paket Docker zu beenden, sondern den Container synOCR zu beenden (bzw. 'Stopp erzwingen')?

Vielleicht könnt ihr auch mal das Image von OCRmyPDF löschen, sodass es mal neu geladen werden muss. Vielleicht ist ja in dem entsprechenden Build in Fehler drin.
 

mördock

Benutzer
Mitglied seit
04. Jan 2012
Beiträge
796
Punkte für Reaktionen
15
Punkte
44
Jetzt weiß ich ja das es am Container lag, sollte der Fehler erneut auftreten werde ich versuchen den Container und/oder Docker zu beenden. Ich gebe dann eine Rückmeldung.

#Mördock#
 

paulchen0815

Benutzer
Mitglied seit
17. Okt 2012
Beiträge
59
Punkte für Reaktionen
0
Punkte
0
Danke für das tolle Paket synOCR!! Endlich habe ich eine praktikable Lösung für mein privates papierloses Büro! Danke! Danke! Danke!
 

FelixJ

Benutzer
Mitglied seit
30. Nov 2015
Beiträge
2
Punkte für Reaktionen
0
Punkte
0
Hallo geimist,
vielen Dank für Dein Paket. Ein Kaffee wird gleich auf dem Weg sein. Dennoch habe ich noch eine Frage, welche ich im Forum jetzt nicht finden konnte. Ist es möglich, gewisse Tags der Datei vorzugeben?
Ich möchte gerne durch Shortcuts auf meinem Dokumentenscanner bereits Tags mitgeben. Also zum Beispiel "Steuer", wenn das Dokument relevant für die Steuererklärung ist. Dann könnte ich dem Dokumentenscanner einen Namen vorgeben, der dann mit Deinem Script berücksichtigt wird. Ist sowas bereits möglich?
Vielen Dank und Gruß
Felix
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat