Do. Okt 22nd, 2020
0
(0)

Letztes Update: 17.8.18

In diesem kleinen Tutorial möchte ich Euch erklären wie ihr Optical Character Recoginition, kurz OCR, mit Hilfe von Docker Containern für Nextcloud einrichtet. Dazu müssen zu erst ein paar Abhängigkeiten installiert werden.Was braucht ihr?

  • Nextcloud 13+
  • Linux Betriebsystem basierend auf Ubuntu 14.04 oder älter mit AMD, Intel Prozessoren. ARM Prozessoren werden nicht unterstützt (Wie Raspberry Pi oder ODROID C2)
  • Docker (Hiermit wird Tesseract und OCRmyPDF im Container ausgeführt.
  • Terreract-OCR und OCRmyPDF

Gut, zuerst installieren wir alles nötige. Dies geht mit

sudo apt-get install docker php-redis

Nun muss der Cloud die OCR App installiert und aktiviert werden. Anschließend wechseln wir in folgendes Verzeichnis.

cd /var/www/nextcloud/app/ocr/worker

Mit vi Dockerfile passen wir unten stehenden Code an und ersetzen „OCR“ mit unserem Passwort.Denkt daran, dass Ihr ein sehr Sichereres nehmt. Meines hat beispielsweise 25 Stellen

# This image serves the redis instance for the ocr worker and the nextcloud ocr app.
# important steps:
# docker build --build-arg PASSWORD="verysavepassword" -t <your username> /redis .
# docker run --name redis --network=isolated_ocr -p 6379:6379 -d <your username> /redis
# Please notice: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.
FROM redis LABEL maintainer=<janiskoehr@icloud.com&#8220; description=This image serves the redis instance for the ocr worker and the nextcloud ocr app.&#8220; vendor=
“Janis Koehr” 
ARG PASSWORD=“secret”
COPY redis.conf /usr/local/etc/redis/redis.conf
RUN if [ -n “$PASSWORD” ]; then echo “requirepass $PASSWORD” >> /usr/local/etc/redis/redis.conf; fi 
CMD [ “redis-server”, “/usr/local/etc/redis/rFileedis.conf” ]
[...]

Das gleiche ändern wir in dem  **redis.conf** im gleichen Verzeichnis. Sucht hier nach **requirepass**. Dieses auskommentieren und Eurer Passwort dahinter setzen. Zeile 397

```bash
# requirepass foobared
requirepass secret

Mit dem folgenden Kommando kommen wir zum nächsten Teil der Anleitung. Nun wird der eigentliche Redis Container erstellt und mit einem Passwort versehen. Das Gleiche wie vorhin auch. Ersetzt bitte auch “user” mit eurem Namen in der Cloud. (Es wird nur Kleingeschriebenes akzeptiert von Docker). Dies geschieht ebenfalls im Worker Verzeichnis.

docker build --build-arg PASSWORD="secret" -t user/redis .

Für den nächsten Schritt müssen wir in das ocr Verzeichnis wechseln. Dies geht am besten mit

cd ../worker

Hier editieren wir die Dockerfile Datei.

# This image serves the redis instance for the ocr worker and the nextcloud ocr app.
# important steps:
# docker build --build-arg PASSWORD="" -t /redis .
# docker run --name redis --network=isolated_ocr -p 6379:6379 -d /redis
# Please notice: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.
FROM redis
LABEL maintainer="janiskoehr@icloud.com" description="This image serves the redis instance for the ocr worker and the nextcloud ocr app." vendor="Janis Koehr"
ARG PASSWORD="secret"
COPY redis.conf /usr/local/etc/redis/redis.conf
RUN if [ -n "$PASSWORD" ]; then echo "requirepass $PASSWORD" &gt;&gt; /usr/local/etc/redis/redis.conf; fi
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
```

```bash
docker build --build-arg LANGUAGES="tesseract-ocr-deu" -t user/ocr .

und starten anschließend die Docker Container. Zuerst aber die Zeilen wiederum anpassen, User ersetzen und das Passwort einfügen.

Update:

Seit einiger Zeit muss man ein file anpassen damit es zu keinem Fehler kommt. Man wechselt in das Verzeichnis /var/www/nextcloud/apps/ocr/worker/src/configuration/ und editiert die worker.configuration.ts Datei. Den Inhalt der Datei durch diesen hier ersetzen:

Danach läuft das Script richtig durch. Bitte denkt daran daß das Verzeichnis /var/www/nextcloud/tmp
vor dem Containerstart vorhanden sein muss!

docker run  --restart always --name redis --network=ocr -p 6379:6379 -d user/redis
docker run --restart always --name ocr --network=ocr -e "NODE_ENV=production" -e "REDIS_HOST=redis" -e "REDIS_PORT=6379" -e "REDIS_DB=0" -e "REDIS_PASSWORD=secret" -v /var/www/nextcloud/data/user:/home/node/data:ro -v /var/www/nextcloud/tmp:/home/node/output -d user/ocr

Abschließend sollte man mit docker ps kontrollieren ob die Container auch laufen. Wenn dies alles funktioniert hat, wechseln wir wieder in unsere Nextcloud und geben alle Parameter ein. In meinem Fall habe ich einen anderen Port gewählt, weil der Port 6379 bereits belegt ist, für das eigentliche Caching von Nextcloud und WordPress.

Das Setup wäre erledigt und Ihr könnt mit dem Bearbeiten der Dateien anfangen. Mehr Infos zu dem Projekt gibt es auf Github

Aktuell habe ich aber ein Fehler im “System” wie hier nachzulesen ist. Es ist so das angeblich die Dateien im OCR Container nicht gefunden werden können, obwohl diese vorhanden sind.

The execution of “ocrmypdf” command failed: ERROR -File not found- /home/node/data/lars/files/Clatronic_user_manual_MWG_775_H.pdf

An was das nun liegt, keine Ahnung. Aber ich hoffe der Developer Janis findet eine Lösung. ?

Wennn euch die Anleitung gefallen hat, lasst einen Kommentar da. Ich würde mich über ein wenig Feedback freuen ?

Comments from Mastodon:

Wie fandest du den Post?

Auf einen Stern klicken zum bewerten

durchschnittlich 0 / 5. bereits abgestimmt haben: 0

Keine Bewertungen bisher, sei der erste

Von lars

0 Gedanken zu „OCR Setup für Nextcloud“
  1. Hallo,
    Redis läuft auch auf passenden Port verschoben, da in der Nextcloud Onlyoffice diesen bereits belegt.
    ich kann mich auf den Kopf stellen, habe alle Varianten durch und bekomme immer nur den Abbruch beim OCR – Dockerfile erstellen , mit folgender Meldung:
    node-ocr-worker@0.0.0 build /home/node/worker

    rm -rf dist/ && tsc -p tsconfig.app.json

    src/configuration/worker.configuration.ts(7,28): error TS2322: Type ‘{ db: string | number; host: string; keyPrefix: string; password: string; port: string | number; …’ is not assignable to type ‘RedisOptions’.
    Types of property ‘port’ are incompatible.
    Type ‘string | number’ is not assignable to type ‘number’.
    Type ‘string’ is not assignable to type ‘number’.
    npm ERR! code ELIFECYCLE
    npm ERR! errno 2
    npm ERR! node-ocr-worker@0.0.0 build: rm -rf dist/ && tsc -p tsconfig.app.json
    npm ERR! Exit status 2
    npm ERR!
    npm ERR! Failed at the node-ocr-worker@0.0.0 build script.
    npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
    npm ERR! A complete log of this run can be found in:
    npm ERR! /root/.npm/_logs/2018-06-22T18_26_01_769Z-debug.log
    The command ‘/bin/sh -c npm run build && rm -r src/ package.json tsconfig.app.json tsconfig.json’ returned a non-zero code: 2
    root@runcracker:/var/www/html/nextcloud/apps/ocr/worker#
    Viele liebe Grüße
    Werner

  2. Weißt du wo du die Container ID findest? Steht ganz links in der shell nach Eingabe von
    docker ps
    dann folgendes eingeben
    docker exec – it CONTAINERID /bin/bash
    Dann bist du im Container

  3. Weißt du wo du die Container ID findest? Steht ganz links in der shell nach Eingabe von
    docker ps
    dann folgendes eingeben
    docker exec – it CONTAINERID /bin/bash
    Dann bist du im Container

  4. Danke vorab für die Einladung.
    Nach langen gedrehe haben wir den Zugang zum Container erhalten , allerdings hat zu dem Ordener nur User www-data oder ä. Zugang.
    Es ist also schwer zu sehen , was darin abgeht oid er ob es meinen Nutzernamen dort als Ordner hinterlegt gibt.
    Der Temp Ordner existiert (output) und ist auch frei verfügbar / zugänglich.
    Bei der Gelegenheit ist mir heute , weil ich zwischendurch neustarten musste aufgefallen, entschuldige den Ausdruck, der ganze “Containermist” und Einstellungen ausser der ipv6 Einstellung die mir die wiederholte Einrichtung verhindert, nicht mal bootfest ist!
    Die Verzeichnisse mit den Dockerimages sind danach auf nimmer Wiedersehen weg.
    Somit blieb mir nur das zurückgehen auf Snapshot x vor dem Einrichten 😎 .
    Dieses sollte nicht so sein oder? Oder welche Philosophie hat sowas fragieles im System?
    Meine Basis:
    Ubuntu Server 18.4 mit nachinstallierter GUI , weil ich kein Text- fetisch bin und PHP 7.2 sind meine Systembasis. NGNIX Maria DB und Apache2 werkeln in latest Version.
    Es funktionieren tadellos in der VM ein Documentenserver für OnlyOffice, Nextcloud , und SSL – Zertifizierungs Bot.
    Mir missfällt langsam diese Struktur mit den Docker und verwirrenden Zugriffsrechten sowie Fehlerquellen aus der Installation.
    Ich stelle mir bereits die Frage, ob eine ordentliche Ubuntu VM nur mit dem OCR nicht sinnvoller und besser zugänglich wäre.
    Und eine Freigabe auf IP: 192.xxx.xxx.xxx:6378 nicht der sauberere Cut zwischen den Systemen als das Local mit unzugänglich zu konfigurieren und nur temporär vorhandenen Dockern zu lösen.
    Zumal ich keine Nextcloud benötige , derer Einstellungen und Modulare Docker Systemausfälle nicht überlebt…..
    Das scheint mir schlichtweg die falsche Richtung

  5. Danke vorab für die Einladung.
    Nach langen gedrehe haben wir den Zugang zum Container erhalten , allerdings hat zu dem Ordener nur User www-data oder ä. Zugang.
    Es ist also schwer zu sehen , was darin abgeht oid er ob es meinen Nutzernamen dort als Ordner hinterlegt gibt.
    Der Temp Ordner existiert (output) und ist auch frei verfügbar / zugänglich.
    Bei der Gelegenheit ist mir heute , weil ich zwischendurch neustarten musste aufgefallen, entschuldige den Ausdruck, der ganze “Containermist” und Einstellungen ausser der ipv6 Einstellung die mir die wiederholte Einrichtung verhindert, nicht mal bootfest ist!
    Die Verzeichnisse mit den Dockerimages sind danach auf nimmer Wiedersehen weg.
    Somit blieb mir nur das zurückgehen auf Snapshot x vor dem Einrichten 😎 .
    Dieses sollte nicht so sein oder? Oder welche Philosophie hat sowas fragieles im System?
    Meine Basis:
    Ubuntu Server 18.4 mit nachinstallierter GUI , weil ich kein Text- fetisch bin und PHP 7.2 sind meine Systembasis. NGNIX Maria DB und Apache2 werkeln in latest Version.
    Es funktionieren tadellos in der VM ein Documentenserver für OnlyOffice, Nextcloud , und SSL – Zertifizierungs Bot.
    Mir missfällt langsam diese Struktur mit den Docker und verwirrenden Zugriffsrechten sowie Fehlerquellen aus der Installation.
    Ich stelle mir bereits die Frage, ob eine ordentliche Ubuntu VM nur mit dem OCR nicht sinnvoller und besser zugänglich wäre.
    Und eine Freigabe auf IP: 192.xxx.xxx.xxx:6378 nicht der sauberere Cut zwischen den Systemen als das Local mit unzugänglich zu konfigurieren und nur temporär vorhandenen Dockern zu lösen.
    Zumal ich keine Nextcloud benötige , derer Einstellungen und Modulare Docker Systemausfälle nicht überlebt…..
    Das scheint mir schlichtweg die falsche Richtung

  6. Sollte natürlich nicht so sein das die Docker Images nicht Bootfest sind. Ich habe bei allen Containern ein –restart= always angehangen. Und habe X reboots gemacht und alles läuft. Nur muss man die Konfigurationen aus dem Container auslagern als Volume. Ich selber kenne mich nicht wirklich gut aus mit VM’s setze selber keine ein. Wie sich das mit Containern in VM verhält, wie gesagt keine Ahnung. Die Zugriffsrechte im Container sind anders wie auf dem Hostsystem.

  7. Sollte natürlich nicht so sein das die Docker Images nicht Bootfest sind. Ich habe bei allen Containern ein –restart= always angehangen. Und habe X reboots gemacht und alles läuft. Nur muss man die Konfigurationen aus dem Container auslagern als Volume. Ich selber kenne mich nicht wirklich gut aus mit VM’s setze selber keine ein. Wie sich das mit Containern in VM verhält, wie gesagt keine Ahnung. Die Zugriffsrechte im Container sind anders wie auf dem Hostsystem.

  8. Beides war erledigt.
    in beiden Formen.
    Hatte dem System dann das /tmp/nextcloud-temp angelegt, da dann definitiv keine ggf. fehlenden Rechte blockierend wirken können.
    Im tmp verzeichnis kann von hause aus jeder schreiben.

  9. Beides war erledigt.
    in beiden Formen.
    Hatte dem System dann das /tmp/nextcloud-temp angelegt, da dann definitiv keine ggf. fehlenden Rechte blockierend wirken können.
    Im tmp verzeichnis kann von hause aus jeder schreiben.

  10. Hallo,
    vielen Dank für die detaillierte Anleitung, um Tesseract und OCRmyPDF im Container auszuführen.
    Diese kann ich bis auf zwei Punkte gut nachvollziehen:
    Wo finde ich das passende php-redis für meine Debian Jessie Distribution? Auf meinem System wird php-redis nicht gefunden.
    Wann und wo findet die Installation von Terreract-OCR und OCRmyPDF statt? Ganz oben in der Anleitung wird darauf verwiesen. Dann kommt es zu einem docker build im worker Verzeichnis der Nextcloud App &#8222OCR&#8220, aber es findet kein &#8222apt-get install tesseract-ocr&#8220 oder ähnliches davor statt.
    Vielen Dank für weitere Hinweise!
    Peter

  11. Hallo,
    vielen Dank für die detaillierte Anleitung, um Tesseract und OCRmyPDF im Container auszuführen.
    Diese kann ich bis auf zwei Punkte gut nachvollziehen:
    Wo finde ich das passende php-redis für meine Debian Jessie Distribution? Auf meinem System wird php-redis nicht gefunden.
    Wann und wo findet die Installation von Terreract-OCR und OCRmyPDF statt? Ganz oben in der Anleitung wird darauf verwiesen. Dann kommt es zu einem docker build im worker Verzeichnis der Nextcloud App &#8222OCR&#8220, aber es findet kein &#8222apt-get install tesseract-ocr&#8220 oder ähnliches davor statt.
    Vielen Dank für weitere Hinweise!
    Peter

  12. Hallo,
    bei meiner Installation läuft Nextcloud in einem Docker Container, der regelmäßig aktualisiert wird, sodass deshalb innerhalb des Nextcloud Docker Containers keine oder möglichst wenige Änderungen gemacht werden sollten, da ich diese nach einer Aktualisierung des Nextcloud Docker Containers immer wieder manuell nachziehen müsste.
    Leider bin ich in der Docker-Thematik noch sehr an der Oberfläche, um die Anleitung, die nach meinem Verständns davon ausgeht, dass Nextcloud direkt am Server läuft, darauf zu adaptieren, dass auch Nextcloud in einem separaten Docker Container läuft. Zwar könnte ich mich direkt in den Nextcloud Docker Container hineinbegeben und darin die erforderlichen Pakete installieren, aber dann würde das nach meinem Verständnis wieder verloren gehen, wenn ich ein Update des Nextcloud Containers vornehme.
    Kann mir jemand Hinweise geben, wie unter diesen Umständen OCR idealerweise aufzusetzen wäre und welche Auswirkungen das auf die obige Anleitung hat?
    Vielen Dank
    Peter

  13. Hallo,
    bei meiner Installation läuft Nextcloud in einem Docker Container, der regelmäßig aktualisiert wird, sodass deshalb innerhalb des Nextcloud Docker Containers keine oder möglichst wenige Änderungen gemacht werden sollten, da ich diese nach einer Aktualisierung des Nextcloud Docker Containers immer wieder manuell nachziehen müsste.
    Leider bin ich in der Docker-Thematik noch sehr an der Oberfläche, um die Anleitung, die nach meinem Verständns davon ausgeht, dass Nextcloud direkt am Server läuft, darauf zu adaptieren, dass auch Nextcloud in einem separaten Docker Container läuft. Zwar könnte ich mich direkt in den Nextcloud Docker Container hineinbegeben und darin die erforderlichen Pakete installieren, aber dann würde das nach meinem Verständnis wieder verloren gehen, wenn ich ein Update des Nextcloud Containers vornehme.
    Kann mir jemand Hinweise geben, wie unter diesen Umständen OCR idealerweise aufzusetzen wäre und welche Auswirkungen das auf die obige Anleitung hat?
    Vielen Dank
    Peter

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.