OCR Server
Der OCR Server ist ein optionaler Bestandteil von WWS MAX, der die Texterkennung in PDF-Dokumenten ermöglicht. Mit dem OCR Server können gescannte Dokumente in durchsuchbare PDF-Dateien umgewandelt werden.
Die OCR-Funktion wird dabei nicht von WWS MAX selbst bereitgestellt, sondern über einen externen Dienst.
Für die Nutzung von OCR gibt es drei Möglichkeiten:
-
Den WWS Max OCR Server lokal auf den Arbeitsstationen installieren
-
Manuelles OCR von Dateien per Kontextmenü aus dem Dateiexplorer von WWS Max.
-
Nur auf der Arbeitsstation verfügbar, auf der der WWS Max OCR Server installiert wurde.
Siehe: Installation von WWS Max OCR Server auf den Arbeitsstationen
-
-
Den WWS Max OCR Server auf dem Server installieren, auf dem auch der Systemdienst von WWS Max installiert wurde.
-
Automatisches OCR von Dateien, sobald diese in WWS Max abgelegt oder entdeckt werden.
-
Manuelles OCR von Dateien per Kontextmenü aus dem Dateiexplorer von WWS Max von allen Arbeitsstationen aus.
-
-
Einen eigenen OCR-Server betreiben (z.B. Linux mit OCRmyPDF)
-
Automatisches OCR von Dateien, sobald diese in WWS Max abgelegt werden.
-
Manuelles OCR von Dateien per Kontextmenü aus dem Dateiexplorer von WWS Max von allen Arbeitsstationen aus.
-
Die Clients müssen eine Direktverbindung zum OCR-Server herstellen können.
-
Installation von WWS Max OCR Server auf dem Server
Section titled “Installation von WWS Max OCR Server auf dem Server”Das vorgehen ist identisch mit der Installation auf den Arbeitsstationen. Der WWS Max OCR Server kann auf dem gleichen Server installiert werden, auf dem auch der WWS Max Systemdienst läuft.
Die Aktivierung kann in WWS Max unter Hauptmenü > Systemkonfiguration > Hintergrundaktionen (Server) überprüft werden.
Dort sollte unter Server bei Warteschlangen der Eintrag ocr angezeigt werden.
Installation von WWS Max OCR Server auf den Arbeitsstationen
Section titled “Installation von WWS Max OCR Server auf den Arbeitsstationen”-
Voraussetzungen prüfen
- Windows 10 oder Windows 11
- Multi-Core CPU
- Mindestens 8 GB RAM
-
WWS Max OCR Server herunterladen
Die aktuelle Version des WWS Max OCR Servers finden Sie auf der offiziellen Download-Seite.
-
OCR Server installieren
Installieren Sie auf jeder Arbeitsstation, die OCR-Funktionen nutzen soll, den WWS Max OCR Server.
-
WWS MAX konfigurieren
-
Öffnen Sie in WWS MAX im Admin-Modus unter Hauptmenü > Systemkonfiguration > PDF OCR Einstellungen die Konfiguration.
-
Stellen Sie die Betriebsart auf Lokaler OCR Server ein.
-
Installation von OCRmyPDF auf Linux
Section titled “Installation von OCRmyPDF auf Linux”Dieses Beispiel bezieht sich auf die Installation von OCRmyPDF auf einem Linux-Server. Für andere Systeme können die Schritte abweichen.
-
Voraussetzungen prüfen
Docker und Docker Compose müssen bereits auf einem per SSH erreichbaren Linux-Server installiert sein.
Terminal window sudo docker --versionsudo docker compose version -
OCR-Service-Benutzer anlegen
Für die Kommunikation zwischen WWS MAX und dem OCR-Server wird ein eigener Benutzer
ocrserviceangelegt:Terminal window sudo adduser --disabled-password --gecos "" ocrserviceAnschließend ein Kennwort für die SSH- und SFTP-Anmeldung vergeben:
Terminal window sudo passwd ocrserviceDieses Kennwort wird später in WWS MAX hinterlegt.
Die Benutzerinformationen können anschließend geprüft werden:
Terminal window id ocrserviceEine typische Ausgabe sieht beispielsweise so aus:
uid=1001(ocrservice) gid=1001(ocrservice) groups=1001(ocrservice) -
Installations- und Job-Verzeichnis anlegen
Das Installationsverzeichnis und das von WWS MAX verwendete Job-Verzeichnis anlegen:
Terminal window sudo mkdir -p /opt/ocrmypdf/jobsDer Benutzer
ocrservicebenötigt nur innerhalb des Job-Verzeichnisses Schreib- und Leserechte:Terminal window sudo chown -R ocrservice:ocrservice /opt/ocrmypdf/jobssudo chmod 2770 /opt/ocrmypdf/jobsDas übergeordnete Installationsverzeichnis kann weiterhin administrativ verwaltet werden:
Terminal window sudo chown root:root /opt/ocrmypdfsudo chmod 755 /opt/ocrmypdfDie Berechtigungen kontrollieren:
Terminal window ls -ld /opt/ocrmypdfls -ld /opt/ocrmypdf/jobsDer Schreibzugriff des Service-Benutzers kann getestet werden:
Terminal window sudo -u ocrservice touch /opt/ocrmypdf/jobs/test.txtsudo -u ocrservice rm /opt/ocrmypdf/jobs/test.txt -
Benutzer- und Gruppen-ID für den Container speichern
Der OCRmyPDF-Container soll unter der gleichen Benutzer- und Gruppen-ID wie
ocrserviceausgeführt werden. Dadurch gehören vom Container erzeugte PDF-Dateien auch auf dem Linux-Host dem Benutzerocrservice.Die Datei
/opt/ocrmypdf/.envmit UID und GID vonocrserviceerzeugen:Terminal window sudo sh -c 'printf "OCR_UID=%s\nOCR_GID=%s\n" "$(id -u ocrservice)" "$(id -g ocrservice)" > /opt/ocrmypdf/.env'Die Konfigurationsdatei soll nur administrativ verändert werden können:
Terminal window sudo chown root:root /opt/ocrmypdf/.envsudo chmod 644 /opt/ocrmypdf/.envInhalt kontrollieren:
Terminal window cat /opt/ocrmypdf/.envEine typische Ausgabe sieht beispielsweise so aus:
OCR_UID=1001OCR_GID=1001 -
Docker-Compose-Datei erstellen
Terminal window cd /opt/ocrmypdfsudo tee compose.yaml > /dev/null <<'YAML'services:ocrmypdf:image: jbarlow83/ocrmypdf-alpinecontainer_name: ocrmypdfrestart: unless-stoppeduser: "${OCR_UID}:${OCR_GID}"entrypoint:- /bin/sh- -ccommand:- while true; do sleep 3600; donevolumes:- ./jobs:/jobsYAMLDie Datei soll nur administrativ verändert werden können:
Terminal window sudo chown root:root /opt/ocrmypdf/compose.yamlsudo chmod 644 /opt/ocrmypdf/compose.yamlDatei anzeigen:
Terminal window cat /opt/ocrmypdf/compose.yamlCompose-Konfiguration auf Syntaxfehler prüfen:
Terminal window cd /opt/ocrmypdfsudo docker compose config -
Docker-Image herunterladen
Terminal window cd /opt/ocrmypdfsudo docker compose pullInstallierte OCRmyPDF-Version prüfen:
Terminal window sudo docker run --rm \jbarlow83/ocrmypdf-alpine \--version -
Verfügbare OCR-Sprachen prüfen
Terminal window sudo docker run --rm \--entrypoint tesseract \jbarlow83/ocrmypdf-alpine \--list-langsIn der Ausgabe müssen mindestens folgende Sprachkennungen enthalten sein:
deuengFalls
deufehlt, kann die deutsche OCR-Erkennung mit diesem Image nicht verwendet werden. -
OCR-Container starten
Terminal window cd /opt/ocrmypdfsudo docker compose up -dContainerstatus anzeigen:
Terminal window sudo docker compose psErwartete Ausgabe:
NAME IMAGE STATUSocrmypdf jbarlow83/ocrmypdf-alpine UpPrüfen, ob OCRmyPDF innerhalb des laufenden Containers verfügbar ist:
Terminal window sudo docker exec ocrmypdf ocrmypdf --version -
Geschütztes OCR-Skript erstellen
WWS MAX erhält keinen direkten Zugriff auf Docker. Stattdessen wird ein fest definiertes Skript angelegt, welches ausschließlich die benötigte OCRmyPDF-Verarbeitung ausführt.
Das Skript
/usr/local/sbin/ocr-runerstellen:sudo tee /usr/local/sbin/ocr-run > /dev/null <<'SH'#!/bin/shset -euif [ "$#" -ne 2 ]; thenecho "Usage: ocr-run <input-file> <output-file>" >&2exit 2fiINPUT="$1"OUTPUT="$2"# Nur einfache Dateinamen zulassen.# Verzeichnispfade und Shell-Sonderzeichen sind nicht erlaubt.case "$INPUT" in*[!A-Za-z0-9._-]*|"")echo "Invalid input filename" >&2exit 2;;esaccase "$OUTPUT" in*[!A-Za-z0-9._-]*|"")echo "Invalid output filename" >&2exit 2;;esac# Versteckte Dateien und relative Pfadangaben verhindern.case "$INPUT" in.*|".."*)echo "Invalid input filename" >&2exit 2;;esaccase "$OUTPUT" in.*|".."*)echo "Invalid output filename" >&2exit 2;;esacif [ "$INPUT" = "$OUTPUT" ]; thenecho "Input and output filenames must differ" >&2exit 2fiINPUT_PATH="/jobs/$INPUT"OUTPUT_PATH="/jobs/$OUTPUT"exec /usr/bin/docker exec ocrmypdf \ocrmypdf \-l deu+eng \--mode skip \--rotate-pages \--deskew \--output-type pdf \"$INPUT_PATH" \"$OUTPUT_PATH"SHBesitzer und Berechtigungen setzen:
Terminal window sudo chown root:root /usr/local/sbin/ocr-runsudo chmod 755 /usr/local/sbin/ocr-runBerechtigungen kontrollieren:
Terminal window ls -l /usr/local/sbin/ocr-runErwartet wird beispielsweise:
-rwxr-xr-x 1 root root ... /usr/local/sbin/ocr-run -
Ausschließlich das OCR-Skript über sudo erlauben
Für
ocrservicewird eine eigene sudo-Regel eingerichtet. Diese erlaubt ausschließlich die Ausführung von/usr/local/sbin/ocr-runmit Root-Rechten und ohne erneute Kennwortabfrage.Die sudoers-Datei erstellen:
Terminal window sudo tee /etc/sudoers.d/ocrservice > /dev/null <<'SUDOERS'ocrservice ALL=(root) NOPASSWD: /usr/local/sbin/ocr-runSUDOERSBesitzer und zwingend erforderliche Zugriffsrechte setzen:
Terminal window sudo chown root:root /etc/sudoers.d/ocrservicesudo chmod 0440 /etc/sudoers.d/ocrserviceDie sudo-Konfiguration anschließend validieren:
Terminal window sudo visudo -cDie Ausgabe sollte unter anderem enthalten:
/etc/sudoers: Syntax OK/etc/sudoers.d/ocrservice: Syntax OKPrüfen, welche privilegierten Befehle
ocrserviceausführen darf:Terminal window sudo -u ocrservice sudo -l/usr/local/sbin/ocr-runmuss dort als erlaubterNOPASSWD-Befehl erscheinen. -
Einschränkung des Service-Benutzers testen optional / empfohlen
Zunächst prüfen, dass
ocrservicekeinen direkten Docker-Zugriff besitzt:Terminal window sudo -u ocrservice docker psDieser Befehl soll mit einer Zugriffsverletzung fehlschlagen.
Auch Docker über
sudodarf nicht erlaubt sein:Terminal window sudo -u ocrservice sudo docker psDieser Befehl muss ebenfalls abgewiesen werden.
Dagegen muss das OCR-Skript grundsätzlich aufrufbar sein:
Terminal window sudo -u ocrservice sudo /usr/local/sbin/ocr-run test-input.pdf test-output.pdfOhne vorhandene gültige Eingabedatei wird OCRmyPDF zwar
InputFileError: File not foundmelden, der Aufruf des Skripts selbst muss jedoch vonsudoerlaubt werden. -
OCR-Verarbeitung mit einer PDF testen optional
Eine Test-PDF in das Job-Verzeichnis kopieren:
Terminal window sudo cp /pfad/zur/test.pdf /opt/ocrmypdf/jobs/test-input.pdfDer Datei
ocrserviceals Besitzer zuweisen:Terminal window sudo chown ocrservice:ocrservice /opt/ocrmypdf/jobs/test-input.pdfOCR-Verarbeitung als
ocrservicestarten:Terminal window sudo -u ocrservice sudo /usr/local/sbin/ocr-run test-input.pdf test-output.pdfAnschließend das Ergebnis prüfen:
Terminal window ls -lh /opt/ocrmypdf/jobs/test-input.pdfls -lh /opt/ocrmypdf/jobs/test-output.pdfWenn
test-output.pdferzeugt wurde, funktionieren Dateirechte, Docker-Volume und das OCR-Skript korrekt zusammen.Testdateien anschließend löschen:
Terminal window sudo -u ocrservice rm /opt/ocrmypdf/jobs/test-input.pdfsudo -u ocrservice rm /opt/ocrmypdf/jobs/test-output.pdf -
SSH- und SFTP-Zugriff testen optional
Von einem anderen Rechner kann die Anmeldung mit dem zuvor vergebenen Kennwort getestet werden:
Terminal window ssh ocrservice@<Hostname oder IP-Adresse>Nach erfolgreicher Anmeldung:
Terminal window whoamiErwartete Ausgabe:
ocrserviceDen Schreibzugriff auf das Job-Verzeichnis prüfen:
Terminal window touch /opt/ocrmypdf/jobs/ssh-test.txtrm /opt/ocrmypdf/jobs/ssh-test.txtDen erlaubten OCR-Befehl prüfen:
Terminal window sudo /usr/local/sbin/ocr-run test-input.pdf test-output.pdfDer Benutzer besitzt weiterhin keine Berechtigung für einen direkten Docker-Zugriff.
-
WWS MAX konfigurieren
In WWS MAX im Admin-Modus unter Hauptmenü > Systemkonfiguration > PDF OCR Einstellungen die Konfiguration zum OCR-Server eintragen.
Dies ist ein Minimalbeispiel, das an die jeweilige Umgebung angepasst werden muss:
-
Allgemein
- Betriebsart:
SSH Job
- Betriebsart:
-
SSH
- Benutzername:
ocrservice - Kennwort:
<Kennwort von ocrservice> - Hostname:
<Hostname oder IP-Adresse des OCR-Servers> - Port:
22 - Unbekannte Hosts akzeptieren:
Ja - OCR Befehl:
sudo /usr/local/sbin/ocr-run {input} {output}
- Benutzername:
-
Verarbeitung
- Zeitüberschreitung:
240Sekunden
- Zeitüberschreitung:
-
Verzeichnisse
-
Job-Ordner:
/opt/ocrmypdf/jobsDies ist der Job-Ordner auf dem OCR-Server.
-
WWS MAX führt die Verarbeitung anschließend nach folgendem Schema aus:
- Falls Bilder für OCR ausgewählt wurden, werden diese zunächst in PDF-Dateien umgewandelt.
- Es wird geprüft, ob die PDF-Dateien bereits durchsuchbar sind.
- PDF per SFTP nach /opt/ocrmypdf/jobs übertragen.
sudo /usr/local/sbin/ocr-run {input} {output}per SSH ausführen- Auf das Ende des OCR-Befehls warten
- Ausgabe-PDF per SFTP herunterladen und Original ersetzen
- Temporäre Ein- und Ausgabedateien per SFTP löschen
Die Platzhalter
{input}und{output}enthalten dabei nur die jeweiligen Dateinamen. Das serverseitige Skript legt fest, dass ausschließlich Dateien innerhalb von/jobsim Docker-Container verarbeitet werden können. -