<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>OCR-D | FDMLab@LABW</title><link>https://fdmlab.landesarchiv-bw.de/tag/ocr-d/</link><atom:link href="https://fdmlab.landesarchiv-bw.de/tag/ocr-d/index.xml" rel="self" type="application/rss+xml"/><description>OCR-D</description><generator>Wowchemy (https://wowchemy.com)</generator><language>de-de</language><lastBuildDate>Fri, 18 Jun 2021 11:00:00 +0000</lastBuildDate><image><url>https://fdmlab.landesarchiv-bw.de/media/sharing.jpg</url><title>OCR-D</title><link>https://fdmlab.landesarchiv-bw.de/tag/ocr-d/</link></image><item><title>80. Südwestdeutscher Archivtag 2021</title><link>https://fdmlab.landesarchiv-bw.de/event/2021-werkzeuge-zur-texterkennung/</link><pubDate>Fri, 18 Jun 2021 11:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/event/2021-werkzeuge-zur-texterkennung/</guid><description>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/PaEjLgqzmo8" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div></description></item><item><title>Werkzeuge zur Texterkennung: ein Blick in die digitale Werkstatt des FDMLab am Landesarchiv Baden-Württemberg</title><link>https://fdmlab.landesarchiv-bw.de/publication/2021-suedwestdeutscher-archivtag/</link><pubDate>Fri, 18 Jun 2021 11:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/publication/2021-suedwestdeutscher-archivtag/</guid><description/></item><item><title>2. Workshop des OCR-BW-Projektes 2021</title><link>https://fdmlab.landesarchiv-bw.de/event/2021-ocr-im-archiv/</link><pubDate>Wed, 09 Jun 2021 11:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/event/2021-ocr-im-archiv/</guid><description/></item><item><title>Wie wir Docker einsetzen</title><link>https://fdmlab.landesarchiv-bw.de/post/2021-06-wie-wir-docker-einsetzen/</link><pubDate>Tue, 08 Jun 2021 00:00:00 +0000</pubDate><guid>https://fdmlab.landesarchiv-bw.de/post/2021-06-wie-wir-docker-einsetzen/</guid><description>&lt;p>Programme haben Anforderungen an ihre Umgebung.
Dies kann ein bestimmtes Betriebssystem sein (Windows, Linux, macOS),
eine Laufzeitumgebung für eine Programmiersprache (Python, Java, C#),
oder die Verfügbarkeit bestimmter Bibliotheken (GTK, .NET, Qt).
Wir wollen uns beim Testen und Evaluieren aber nicht einschränken!&lt;/p>
&lt;p>Im FDMLab evaluieren wir Programme und Bibliotheken, die sowohl für den Gebrauch am Rechner, als auch als Serveranwendung entwickelt wurden.
Würden wir diese alle auf unserem Testrechner installieren, hätten wir schnell die von Randall Munroe dargestellte Situation erzeugt.
Also unser System mit Programmen, Laufzeitumgebungen und Konfigurationsdateien vollgemüllt.&lt;/p>
&lt;figure id="figure-python-environmenthttpsxkcdcom1987-von-randall-munroe-unter-cc-by-nc-lizenzhttpcreativecommonsorglicensesby-nc25">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" >&lt;img alt="[Python Environment](https://xkcd.com/1987/) von Randall Munroe unter [CC BY-NC Lizenz](http://creativecommons.org/licenses/by-nc/2.5/)." srcset="
/post/2021-06-wie-wir-docker-einsetzen/python_environment_huf01e0eb7d16bfdafe1594868b0e0e25e_54078_eaf385cb765fbdd143396c6e7cb3e5a8.webp 400w,
/post/2021-06-wie-wir-docker-einsetzen/python_environment_huf01e0eb7d16bfdafe1594868b0e0e25e_54078_cd12d25540c3a8bdf9c0e7a4206b9819.webp 760w,
/post/2021-06-wie-wir-docker-einsetzen/python_environment_huf01e0eb7d16bfdafe1594868b0e0e25e_54078_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://fdmlab.landesarchiv-bw.de/post/2021-06-wie-wir-docker-einsetzen/python_environment_huf01e0eb7d16bfdafe1594868b0e0e25e_54078_eaf385cb765fbdd143396c6e7cb3e5a8.webp"
width="492"
height="487"
loading="lazy" data-zoomable />&lt;/div>
&lt;/div>&lt;figcaption>
&lt;a href="https://xkcd.com/1987/" target="_blank" rel="noopener">Python Environment&lt;/a> von Randall Munroe unter &lt;a href="http://creativecommons.org/licenses/by-nc/2.5/" target="_blank" rel="noopener">CC BY-NC Lizenz&lt;/a>.
&lt;/figcaption>&lt;/figure>
&lt;p>Stattdessen versuchen wir - sofern möglich - die zu evaluierenden Programme als Docker Container zu testen.
Wie im Eingangsbild symbolhaft dargestellt&lt;sup id="fnref:1">&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref">1&lt;/a>&lt;/sup>, handelt es sich bei Docker Containern (vereinfacht)
um einen Standard um Anwendungen mitsamt ihrer Umgebung zu verpacken und somit auf unterschiedlichen Docker Hosts laufen zu lassen.&lt;/p>
&lt;p>Wir verwenden dafür &lt;a href="https://docs.docker.com/docker-for-windows/install/" target="_blank" rel="noopener">Docker Desktop für Windows&lt;/a>.&lt;/p>
&lt;h2 id="docker-container-via-browser">Docker Container via Browser&lt;/h2>
&lt;div class="mermaid">---
title: Docker Container via Browser
config:
look: handDrawn
theme: neutral
---
flowchart TD
subgraph Container[Container]
FC[Dateien]
Server[[Server]]
DB[(Datenbank)]
Lib{{Bibliotheken}}
end
Browser[[Browser]]
FU[Dateien]
FU &lt;--> FC --> Server
Server --> Browser
DB --> Server
Lib --> Server
&lt;/div>
&lt;p>Eine Variante Docker zu verwenden, ist mit der Anwendung in dem Container via einer Web GUI im Browser zu interagieren.
Ein Beispiel hierfür ist das Projekt &lt;a href="http://ocr4all.org/" target="_blank" rel="noopener">OCR4All&lt;/a>.
Mit dem folgenden PowerShell Befehl wird die Vorlage für einen &lt;em>OCR4All Container&lt;/em> (&lt;code>image&lt;/code>)
aus der &lt;em>Docker Hub Registry&lt;/em> heruntergeladen und lokal ein &lt;em>OCR4All Container&lt;/em> erstellt.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">docker&lt;/span> &lt;span class="n">run&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-rm&lt;/span> &lt;span class="n">-it&lt;/span> &lt;span class="n">-p&lt;/span> &lt;span class="mf">8080&lt;/span>&lt;span class="err">:&lt;/span>&lt;span class="mf">8080&lt;/span> &lt;span class="n">ls6uniwue&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="n">ocr4all&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Über die Adresse &lt;code>http://localhost:8080&lt;/code> lässt sich die Web GUI des &lt;em>OCR4All Containers&lt;/em> aufrufen und bedienen.&lt;/p>
&lt;p>Es ist möglich Daten von der eigenen Festplatte mit &lt;a href="https://docs.docker.com/storage/volumes/" target="_blank" rel="noopener">in den Container einzuhängen&lt;/a> (&lt;em>mounten&lt;/em>).&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">docker&lt;/span> &lt;span class="n">run&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-rm&lt;/span> &lt;span class="n">-it&lt;/span> &lt;span class="n">-p&lt;/span> &lt;span class="mf">8080&lt;/span>&lt;span class="err">:&lt;/span>&lt;span class="mf">8080&lt;/span> &lt;span class="n">-v&lt;/span> &lt;span class="p">${&lt;/span>&lt;span class="n">PWD&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="err">:&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="n">var&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="n">ocr4all&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="n">data&lt;/span> &lt;span class="n">ls6uniwue&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="n">ocr4all&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="docker-container-als-skript">Docker Container als Skript&lt;/h2>
&lt;p>Docker Container können ähnliche wie Skripte verwendet werden.&lt;/p>
&lt;p>Mit dem folgenden Beispiel wird ein &lt;a href="https://ocr-d.de/en/workflows" target="_blank" rel="noopener">OCR-D Workflow&lt;/a> ausgeführt,
ohne dass die mehr als 60 unterschiedlichen Prozessoren separat installiert werden müssen.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">docker&lt;/span> &lt;span class="n">run&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-rm&lt;/span> &lt;span class="n">-v&lt;/span> &lt;span class="p">${&lt;/span>&lt;span class="n">PWD&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="err">:&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="n">data&lt;/span> &lt;span class="n">-w&lt;/span> &lt;span class="p">/&lt;/span>&lt;span class="n">data&lt;/span> &lt;span class="p">--&lt;/span> &lt;span class="n">ocrd&lt;/span>&lt;span class="p">/&lt;/span>&lt;span class="n">all&lt;/span>&lt;span class="err">:&lt;/span>&lt;span class="n">maximum&lt;/span> &lt;span class="n">bash&lt;/span> &lt;span class="n">workflow&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="py">sh&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="alert alert-warning">
&lt;div>
Das Image &lt;code>ocrd/all:maximum&lt;/code> ist mehrere Gigabyte groß!
&lt;/div>
&lt;/div>
&lt;h2 id="wo-docker-nicht-funktioniert">Wo Docker nicht funktioniert&lt;/h2>
&lt;p>Es gibt Software, die nicht als Docker Image vorliegt, oder als solche verwendet werden kann.
Dazu gehört Software, die eine systemspezifische GUI Bibliothek verwendet.&lt;/p>
&lt;p>Beispiele hierfür sind der &lt;a href="https://www.primaresearch.org/tools/PAGEViewer" target="_blank" rel="noopener">Page Viewer&lt;/a>
oder der &lt;a href="https://readcoop.eu/transkribus/download/" target="_blank" rel="noopener">Transkribus Expert Client&lt;/a>.
Diese benötigen beide Java als Laufzeitumgebung und stellen ihre GUI mit nativen Betriebssystemkomponenten dar.
Docker Container haben keine nativen GUI Komponenten, weshalb diese Programme in einem Docker Container nicht genutzt werden können &lt;sup id="fnref:2">&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref">2&lt;/a>&lt;/sup>.&lt;/p>
&lt;h2 id="unser-fazit">Unser Fazit&lt;/h2>
&lt;p>Wir verwenden Docker um schnell und unkompliziert unterschiedlichste Anwendungen evaluieren zu können.
Inzwischen kommen Docker Container bei uns auch praktisch zum Einsatz.
Zum Beispiel um gemeinsame Projekte reproduzierbar bearbeiten zu können.&lt;/p>
&lt;div class="footnotes" role="doc-endnotes">
&lt;hr>
&lt;ol>
&lt;li id="fn:1">
&lt;p>Die Standardisierung von Seefracht-Containern zu &lt;a href="https://de.wikipedia.org/wiki/ISO-Container" target="_blank" rel="noopener">ISO-Containern&lt;/a> optimierte die Transportkette im Güterverkehr.
Daher werden standardisierte virtuelle Container häufig mit Fracht-Containern verglichen.&amp;#160;&lt;a href="#fnref:1" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;li id="fn:2">
&lt;p>Es gibt Bibliotheken, die die nativen GUI Komponenten für Webbrowser darstellen können.
Ein Beispiel hierfür ist &lt;a href="https://developer.gnome.org/gtk3/stable/gtk-broadway.html" target="_blank" rel="noopener">GTK Broadway&lt;/a>.&amp;#160;&lt;a href="#fnref:2" class="footnote-backref" role="doc-backlink">&amp;#x21a9;&amp;#xfe0e;&lt;/a>&lt;/p>
&lt;/li>
&lt;/ol>
&lt;/div></description></item></channel></rss>