OCR-Workflow

Aus Allegro
Wechseln zu: Navigation, Suche

1 Einleitung[Bearbeiten | Quelltext bearbeiten]

Diese Seite beschreibt den BBF-eigenen OCR-Workflow für goobi.workflow.

Die vollständige Workflow umfasst aus Sicht eines Users folgende Schritte:

  1. In einem goobi-Vorgang wird ein OcrTessa-Schritt eingefügt und ausgeführt.
  2. Der Vorgang meldet zurück, wenn er abgeschlossen ist.
  3. Optional für bereits exportierte Vorgänge: Die Digitalisate des Vorgangs werden mit OCR noch einmal ins Präsentationssystem exportiert.

Dieser Workflow ist in drei Software-Komponenten umgesetzt:

  1. das Programm tesseract führt die eigentliche Texterkennung aus.
  2. ein Ant-Skript regelt einzelne Schritte wie Ausführung der Texterkennung in verschiedene Formate, Umkopieren von Dateien, Löschen temporärerer Dateien usw.
  3. drei Python-Skripte bewerkstelligen die Kommunikation zwischen goobi.workflow und den anderen Komponenten (Message Oriented Middleware)

Alle ausführenden Programme (tesseract, ant, python) sind in der von uns eingesetzten Linux-Distribution Ubuntu bereits enthalten und können durch die Paketverwaltung installiert und aktualisiert werden. Die von uns entwickelten Programme liegen unter

  HIER DER PFAD

1.1 Hintergründe, Leitlinien[Bearbeiten | Quelltext bearbeiten]

  • Die verwendete Komponenten sind Standard-Programme, die einzelnen Skripte umfassen nur wenige Zeilen.
  • Für tesseract spricht die hervorragenden Texterkennung für Deutsch und Fraktur. tesseract erkennt zuverlässig das lange s; Abbyy ersetzt es - also das S - durch ein s.
  • Die Erkennungsergebnisse wurden von Abbyy und tesseract wurden von uns verglichen und können als gleichwertig gelten.
  • Die Texterkennung ist eine "Roh-OCR". Die Resultate werden von uns nicht korrigiert.
  • Die Performance der virtuellen Maschinen wurde von uns überprüft.
  • Der Messaging Service wurde von uns selbst geschrieben, weil vorhandene System für die gestellt Aufgabe zu komplex und zu resourcen-hungrirg sind.
  • Der Python-Code ist einfach, xmlrpc das Mittel der Wahl.
  • Die Worker sind als virtuelle Maschinen (im Ganzen) beliebig kopierbar.

2 Ablauf des Workflows[Bearbeiten | Quelltext bearbeiten]

2.1 Übersicht[Bearbeiten | Quelltext bearbeiten]

  1. Der OCR-Vorgang wird manuell aus goobi heraus angestoßen.
  2. Der Goobi-Step führt ein lokales Python-Skript aus, das Vorgangs-ID, Vorgangstitel und Sprache an eine Warteschlage (Messagebroker) übermittelt.
  3. Die Warteschlange (MessageBroker) - ein Python-Skript - speichert die Vorgangs-ID, Vorganstitel und Sprache als OCR-Job einer Datenbank.
  4. Ein Python-Skript (Worker) fragt regelmäßig den MessageBroker nach Arbeit (über xmlrpc).
    1. Der Worker erhält von der Wartenschlange einen Job.
    2. Der Worker führt nun ein Ant-Skript aus. Das Ant-Skript
      1. kopiert die Image-Dateien
      2. erzeugt (hintereinander) die Texterkennung mit tesseract für Text (txt) und hinterlegtes PDF und hocr
      3. eine [Transformation erzeugt ALTO]
      4. Die Ergebnisse werden auf den goobi-Server kopiert.
      5. Die temporären Dateien werden gelöscht.
    3. Der Worker meldet an die Warteschlange, das der Job erledigt ist.
  5. Die Warteschlange meldet an goobi.workflow, dass der Schritt erledigt ist.
  6. Optional: Die OCR wird durch einen automatischen Schritt in das Präsentationssystem exportiert.


2.2 Ausführung aus Sicht des Goobi-User[Bearbeiten | Quelltext bearbeiten]

2.2.1 OcrTess als Standard-Schritt[Bearbeiten | Quelltext bearbeiten]

TODO: Perspektivisch wird die OCR als Standardschritt in die Vorgangsvorlagen integriert. Der Vorgang erscheint dann wie üblich in diversen Listen und kann manuell mit einem Klick auf das Zahnrad ausgeführt werden. Der Vorgang dauert relativ lange und ähnelt damit z.B. dem Schritt zur URN-Generierung.

2.2.2 OcrTess nachträglich einem Vorgang hinzufügen[Bearbeiten | Quelltext bearbeiten]

Der OCR-Schritt kann einem einzelnen Vorgang mit folgenden Informationen zugefügt werden:

 OcrTess /usr/bin/python3 /opt/bbf/ocrmsgr/ocrregistrar.py {processid} {processtitle} {product.Schrifttyp} {stepid}

2.2.3 OcrTess nachträglich mehreren Vorgängen hinzufügen[Bearbeiten | Quelltext bearbeiten]

Mehreren Vorgängen kann dieser Step mit einem goobi-Skript hinzugefügt werden

 action:addStep "steptitle:OcrTess" number:50
 action:addShellScriptToStep "steptitle:OcrTess" "label:OcrTess" "script:/usr/bin/python3 /opt/bbf/ocrmsg/ocrregistrar.py {processid} {processtitle} {product.Schrifttyp} {stepid}"

Der Schritt kann dann über folgenden goobi-Skript-Befehl für die Vorgänge aufgerufen werden:

 action:runScript "steptitle:OcrTess"

Am besten fügt man gleich noch einen Re-Export hinzu:

 action:addStep "steptitle:Re-Export ins Präsentationssystem" number:51
 action:setTaskProperty "steptitle:Re-Export ins Präsentationssystem" property:exportdms value:true
 action:setTaskProperty "steptitle:Re-Export ins Präsentationssystem" property:automatic value:false

Der Re-Export ist nicht autormatisch.

3 Installation[Bearbeiten | Quelltext bearbeiten]

3.1 Einrichtung einer Virtuellen Maschine als OCR-Worker[Bearbeiten | Quelltext bearbeiten]

Wir verwenden eine virtuelle Maschine mit 2GB RAM (evtl. auch weniger) und 2 Rechenkernen. [Diese Konfiguration ist ermittelt durch einen Performancevergleich mit anderen VMs]

Neue Worker-Vms können einfach durch die IT-Abbteilung (z.B. HeWi) kopiert werden.

3.1.1 Installation der Software[Bearbeiten | Quelltext bearbeiten]

# tesseract, Trainingsdaten für Deutsch und Fraktur
sudo apt-get install tesseract-ocr tesseract-ocr-deu tesseract-ocr-frk
# Zum mounten der Windows-Shares
sudo apt-get install cifs-utils
# (optional) tools
sudo apt-get install vim tmux
# Der Skript-Prozessor
sudo apt-get install ant
# xslt
sudo apt-get install libsaxonhe-java
# REST
sudo apt-get install curl

Einträge in die /etc/fstab:

//bbfdata1/Digitalisate /mnt/goobidigi/ cifs username=goobimeta,password=XXXXXXX,domain=domain=DIPF-INTERN.DE,credentials=/home/schmidtner/.goobi-storage-credentials,dir_mode=0777,file_mode=0777,x-systemd.automount        0       0
//bbfdata1/office /mnt/office/ cifs username=goobimeta,password=XXXXXXX,domain=domain=DIPF-INTERN.DE,credentials=/home/schmidtner/.goobi-storage-credentials,dir_mode=0777,file_mode=0777,x-systemd.automount        0       0

3.2 Einrichtung der Skripte[Bearbeiten | Quelltext bearbeiten]

  • Alle Skripte liegen in einem Verzeichnis. Als Standrad wird /opt/bbf/ocrmsg empfohlen.
  • Die Skripte für die Warteschlage und für Worker sind immer aktiv, z.B. als Webserver.

3.2.1 Die Warteschlange[Bearbeiten | Quelltext bearbeiten]

Das Skript für die Warteschlange kann der Einfachheit halber auf dem Goobi-Server gestartet werden, da die Freischaltung für die Web-API in goobi-Workflow bereits erfolgt ist.

 python3 msgqueue.py 172.20.1.12

Das Skript startet einen Webserver auf Port 8000 und bietet dort eine XMLRPC-Schnittstelle an. Die Jobs werden in einer Datenbank gespeichert. Das Skript läuft am besten mit Rechten eines bestimmten Benutzers (TODO).

3.2.2 Registrar[Bearbeiten | Quelltext bearbeiten]

Das Skript ocrregistrar.py übermittelt den OCR-Auftrag an die Warteschlange. Das Skript muss auf dem Goobi-Server liegen, damit es von goobi ausgeführt werden kann.

Das Skript benötigt Parameter für den Vorgang (ID, Titel) und Sprache.

 python3 ocrregistrar.py

Das Skript wird normalerweise nicht manuell ausgeührt. Um das Skript zu testen, können folgende Werte verwendet werden:

 python3 ocrregistrar.py 6639 wagnillu_346648319 Fraktur
 python3 ocrregistrar.py 8268 vettbauk_484779001_0001 deu

Dieses Skript wird als Admin- und Berichtstool für den Workflow ausgebaut.

  • clearJobQueue
  • listJobs: waiting, inProcess

3.2.3 Worker[Bearbeiten | Quelltext bearbeiten]

Das Skript worker.py wird auf anderen Rechnern als dem Computer mit der Warteschlage gestartet. Vor dem Start muss die IP-Adresse des Host-Servers eingetragen werden.

 python3 worker.py

Das Skript fragt nun nach einem Job. Wenn ein Job vorhanden ist, wird nun Ant gestartet, das die notwendigen Dateien kopiert, an tesseract übergibt, die Resultate zurückkopiert und die temporären Dateien löscht.

3.3 Das Ant-Skript[Bearbeiten | Quelltext bearbeiten]

Das Ant-Skript wird getestet mit

 ant -Darg0=6639 -Darg1=wagnillu_346648319 -Darg2=frk cleanup

4 Siehe auch[Bearbeiten | Quelltext bearbeiten]