{"id":181,"date":"2018-03-05T09:47:32","date_gmt":"2018-03-05T08:47:32","guid":{"rendered":"https:\/\/blogs.urz.uni-halle.de\/strickdings\/?p=181"},"modified":"2018-03-05T14:21:18","modified_gmt":"2018-03-05T13:21:18","slug":"ocropus-infrastruktur","status":"publish","type":"post","link":"https:\/\/blogs.urz.uni-halle.de\/strickdings\/2018\/03\/ocropus-infrastruktur\/","title":{"rendered":"Ocropus-Infrastruktur: Ordnersystem und Stapelverarbeitung"},"content":{"rendered":"<p>Im Normalfall m\u00f6chte man mehrere Bildseiten erkennen. F\u00fcr die Stapelverarbeitung ist es von Vorteil eine gewisse Infrastruktur einzurichten, damit m\u00f6glichst viele Schritte automatisch abgearbeitet werden k\u00f6nnen.<\/p>\n<p>Am Beginn steht eine gleichbleibende Ordnerstruktur, durch die man sich leicht bewegen kann. Manche Ordner werden von den Ocropus-Modulen selbstst\u00e4ndig angelegt, andere kann man selbst definieren. Abbildung 1 zeigt die Ordnerstrukur, mit der ich arbeite.<\/p>\n<figure id=\"attachment_189\" aria-describedby=\"caption-attachment-189\" style=\"width: 725px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/ordner.png\"><img loading=\"lazy\" class=\"wp-image-189 size-full\" src=\"https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/ordner.png\" alt=\"Abbildung 1: Ordner, Dateien, Erzeuger\" width=\"725\" height=\"595\" srcset=\"https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/ordner.png 725w, https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/ordner-300x246.png 300w\" sizes=\"(max-width: 725px) 100vw, 725px\" \/><\/a><figcaption id=\"caption-attachment-189\" class=\"wp-caption-text\">Abbildung 1: Ordner, Dateien, Erzeuger<\/figcaption><\/figure>\n<p>Im Hauptordner <em>book<\/em> lege ich die Ausgangsdateien ab, z.B. <em>jpg-Dateien<\/em>.<\/p>\n<div style=\"width: 530px;\" class=\"wp-video\"><!--[if lt IE 9]><script>document.createElement('video');<\/script><![endif]-->\n<video class=\"wp-video-shortcode\" id=\"video-181-1\" width=\"530\" height=\"232\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/oberordner.mp4?_=1\" \/><a href=\"https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/oberordner.mp4\">https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/oberordner.mp4<\/a><\/video><\/div>\n<p>In einem <a href=\"https:\/\/blogs.urz.uni-halle.de\/strickdings\/2017\/11\/preprocessing-mit-scantailor-2\/\">vorhergehenden Artikel<\/a> habe ich ScanTailor als Vorverarbeitungsprogramm beschrieben. ScanTailor gibt <em>tif-Dateien<\/em> aus, standardm\u00e4\u00dfig im Ordner <em>out<\/em>.<\/p>\n<div style=\"width: 530px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-181-2\" width=\"530\" height=\"232\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/out_ordner.mp4?_=2\" \/><a href=\"https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/out_ordner.mp4\">https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/out_ordner.mp4<\/a><\/video><\/div>\n<p>Diese Dateien lassen sich mit dem Programm <em>mogrify<\/em> in <em>png-Dateien<\/em> umwandeln. Ich habe das kleine Bash-Script <em><a href=\"https:\/\/github.com\/rnsrk\/occu-toolkit\">ocr-conv<\/a><\/em> geschrieben, dass<\/p>\n<p>1. einen Ordner .\/<em>ocr<\/em> erstellt (.\/ bedeutet im gleichen Verzeichnis, also book\/ocr),<\/p>\n<p><em>2. tif-Dateien<\/em>, die in einem Ordner &#8222;<em>.\/out<\/em>&#8220; liegen, batchartig <em>png-Dateien<\/em> umwandelt<\/p>\n<p>3. diese <em>png-Dateien<\/em> in den Ordner .\/<em>ocr<\/em> kopiert<\/p>\n<p>4. diese <em>png-Dateien<\/em> eine sechsstellige Laufnummer gibt.<\/p>\n<p>Damit es funktioniert muss man sich im Ordner <em>book<\/em> befinden, mit einem Unterordner <em>ocr<\/em> in dem die <em>ScanTailor-tifs<\/em> gespeichert sind, dann einfach<\/p>\n<p><code>$ bash ocr-conv.bash<\/code><\/p>\n<div style=\"width: 530px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-181-3\" width=\"530\" height=\"231\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/ocr-conv.mp4?_=3\" \/><a href=\"https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/ocr-conv.mp4\">https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/ocr-conv.mp4<\/a><\/video><\/div>\n<p>Ist dieser Schritt erledigt, folgt die Bildsegmentierung, Texterkennung, Korrektur und der Textexport. Erkl\u00e4rungen zu diesen Schritten folgen in den n\u00e4chsten Artikeln. Hier geht es erst einmal haupts\u00e4chlich um eine funtkionierende Ordnerstruktur bzw. um eine Stapelverarbeitung.<\/p>\n<p>Je nachdem wie viele Bilder (und Zeilen in diesen Bildern) erkannt werden sollen, erstellen die ocropus-Module entsprechend viele Ordner und Dateien. Die Fragezeichen symbolisieren hier die Laufnummern. F\u00fcr die drei Dateien<em> 0000001.png<\/em>, <em>000002.png<\/em> und <em>000003.png<\/em> w\u00fcrden also immer die dazugeh\u00f6rigen Ordner <em>.\/0000001<\/em> , <em>.\/0000002<\/em> und <em>.\/0000001<\/em> und Verarbeitungsdateien <em>??????.bin.png<\/em> angelegt werden.<\/p>\n<p>Mit dem kleinen Script <a href=\"https:\/\/github.com\/rnsrk\/occu-toolkit\/blob\/master\/ocr-png2html.bash\">ocr-png2html.bash<\/a> laufen die Segmentierung, Texterkennung und Transformation zur html automatisch durch. Auch dieses muss sich im Hauptordner book befinden. Dann starten mit:<\/p>\n<p><code>$ bash ocr-png2html.bash<\/code><\/p>\n<p>Hierbei erzeugt <em>ocropus-gpageseg<\/em> die Dateien <em>??????.pseg.png<\/em>, die Ordner <em>.\/ocr\/??????<\/em> mit den darin befindlichen Dateien <em>??????.bin.png<\/em><\/p>\n<p>Das Texterkennungmodul <em>ocropus-lpred<\/em> die dazugeh\u00f6rigen <em>??????.txt<\/em> und<\/p>\n<p><em>ocropus-gtedit<\/em> die Korrektur <em>correction.html<\/em>.<\/p>\n<div style=\"width: 530px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-181-4\" width=\"530\" height=\"230\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/ocr-png2html.mp4?_=4\" \/><a href=\"https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/ocr-png2html.mp4\">https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/ocr-png2html.mp4<\/a><\/video><\/div>\n<p>Wenn man will, kann man jetzt Fehler korrigieren. Um zu schauen, ob die Ordnerstruktur konzise ist, mache ich jedoch gleich weiter mit<\/p>\n<p><code>$ ocorpus-gtedit extract correction.html<\/code><\/p>\n<p>Damit werden die Groundtruth-Text-Dateien <em>??????.gt.txt<\/em> in den Ordnern <em>.\/ocr\/??????<\/em> erzeugt.<\/p>\n<div style=\"width: 530px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-181-5\" width=\"530\" height=\"231\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/gtedit-extract.mp4?_=5\" \/><a href=\"https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/gtedit-extract.mp4\">https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/gtedit-extract.mp4<\/a><\/video><\/div>\n<p>Mit <em>cat<\/em> erstellt man sich zum Schluss die finale <em>*.txt-Datei<\/em>.<\/p>\n<p><code>$ cat .\/ocr\/??????\/??????.gt.txt &gt; ocr.txt<\/code><\/p>\n<div style=\"width: 530px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-181-6\" width=\"530\" height=\"231\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/cat.mp4?_=6\" \/><a href=\"https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/cat.mp4\">https:\/\/blogs.urz.uni-halle.de\/strickdings\/files\/2018\/03\/cat.mp4<\/a><\/video><\/div>\n<p>Wie man sieht sind die Ergebnisse noch sehr schlecht. In den folgenden Artikeln gehe ich n\u00e4her darauf ein, wie man die einzelnen Module anpasst und sich eigene Erkennungsmodule trainiert, um schnellere und bessere Ergebnisse zu erzielen.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Normalfall m\u00f6chte man mehrere Bildseiten erkennen. F\u00fcr die Stapelverarbeitung ist es von Vorteil eine gewisse Infrastruktur einzurichten, damit m\u00f6glichst viele Schritte automatisch abgearbeitet werden k\u00f6nnen. Am Beginn steht eine gleichbleibende Ordnerstruktur, durch die man sich leicht bewegen kann. Manche <a class=\"more-link\" href=\"https:\/\/blogs.urz.uni-halle.de\/strickdings\/2018\/03\/ocropus-infrastruktur\/\">weiterlesen  <span class=\"screen-reader-text\">  Ocropus-Infrastruktur: Ordnersystem und Stapelverarbeitung<\/span><span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":241,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[31,3,29,30,28],"_links":{"self":[{"href":"https:\/\/blogs.urz.uni-halle.de\/strickdings\/wp-json\/wp\/v2\/posts\/181"}],"collection":[{"href":"https:\/\/blogs.urz.uni-halle.de\/strickdings\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.urz.uni-halle.de\/strickdings\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.urz.uni-halle.de\/strickdings\/wp-json\/wp\/v2\/users\/241"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.urz.uni-halle.de\/strickdings\/wp-json\/wp\/v2\/comments?post=181"}],"version-history":[{"count":9,"href":"https:\/\/blogs.urz.uni-halle.de\/strickdings\/wp-json\/wp\/v2\/posts\/181\/revisions"}],"predecessor-version":[{"id":184,"href":"https:\/\/blogs.urz.uni-halle.de\/strickdings\/wp-json\/wp\/v2\/posts\/181\/revisions\/184"}],"wp:attachment":[{"href":"https:\/\/blogs.urz.uni-halle.de\/strickdings\/wp-json\/wp\/v2\/media?parent=181"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.urz.uni-halle.de\/strickdings\/wp-json\/wp\/v2\/categories?post=181"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.urz.uni-halle.de\/strickdings\/wp-json\/wp\/v2\/tags?post=181"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}