more feedback

This commit is contained in:
Simon
2024-02-16 12:32:21 +01:00
parent 788f0b9bd7
commit a486e1663d
16 changed files with 87 additions and 38 deletions

View File

@@ -56,3 +56,4 @@ Hermite
Hermite-Interpolation
Nearest-Neighbor
unimodalen
Nachbearbeitungskette

View File

@@ -9,4 +9,4 @@ Die Nutzung der in \autoref{einleitung} erwähnten Anwendungen \bzw Dienstleistu
\subsection{Bildbearbeitungswerkzeug}
\label{bildbearbeitungswerkzeug}
Als Werkzeug für die Durchführung der notwendigen Bildbearbeitungsschritte wurde die Softwarebibliothek "ImageMagick" \mcite{imagemagick} gewählt. Sie ist umfassend dokumentiert, flexibel und kann Dank der Unterstützung für eine Vielzahl von Programmiersprachen direkt in Programme eingebunden werden. Viele in der Bildverarbeitung genutzte Operationen sind bereits implementiert, was schnelles Prototyping vereinfacht und die Bibliothek zu einer idealen Wahl für die Realisierung von Bildbearbeitungsschritten in der prototypischen Implementierung macht.
Als Werkzeug für die Durchführung der notwendigen Bildbearbeitungsschritte wurde aufgrund persönlicher Erfahrungen die Softwarebibliothek "ImageMagick" \mcite{imagemagick} gewählt. Sie ist umfassend dokumentiert, flexibel und kann Dank der Unterstützung für eine Vielzahl von Programmiersprachen direkt in Programme eingebunden werden. Viele in der Bildverarbeitung genutzte Operationen sind bereits implementiert, was schnelles Prototyping vereinfacht. Dadurch ist die Bibliothek eine ideale Wahl für die Realisierung von Bildbearbeitungsschritten in der prototypischen Implementierung, sie kann jedoch auch durch eine andere Implementierung ersetzt werden.

View File

@@ -14,11 +14,11 @@ Wie in \autoref{fig:screenshot_postprocessing_confidence} gezeigt, prüft der Co
\begin{figure}[ht]
\centering
\begin{minipage}{0.49\textwidth}
\lstinputlisting[firstnumber=2,linerange={2-14}]{include/postprocessing/source.detailed.json}
\lstinputlisting[firstnumber=82,linerange={82-93}]{include/postprocessing/source.detailed.json}
\end{minipage}
\hfill
\begin{minipage}{0.49\textwidth}
\lstinputlisting[firstnumber=2,linerange={2-14}]{include/postprocessing/confidence.detailed.json}
\lstinputlisting[firstnumber=58,linerange={58-69}]{include/postprocessing/confidence.detailed.json}
\end{minipage}
\caption{Auszug aus den Ergebnisdaten der Texterkennung aus \ref{fig:screenshot_postprocessing} nach der Confidence-Filterung. Alle Wörter unter dem Schwellenwert werden entfernt.}
\label{fig:screenshot_postprocessing_confidence}
@@ -32,11 +32,11 @@ Um die aus der Texterkennung gewonnenen Daten zunächst für die weitere Filteru
\begin{figure}[ht]
\centering
\begin{minipage}{0.49\textwidth}
\lstinputlisting[firstnumber=2,linerange={2-14}]{include/postprocessing/confidence.json}
\lstinputlisting[firstnumber=14,linerange={14-19}]{include/postprocessing/confidence.json}
\end{minipage}
\hfill
\begin{minipage}{0.49\textwidth}
\lstinputlisting[firstnumber=2,linerange={2-14}]{include/postprocessing/normalize.json}
\lstinputlisting[firstnumber=14,linerange={14-19}]{include/postprocessing/normalize.json}
\end{minipage}
\caption{Auszug aus den Ergebnisdaten der Texterkennung aus \ref{fig:screenshot_postprocessing} nach der Normalisierung. Alle Wörter beinhalten nun ausschließlich Kleinbuchstaben.}
\label{fig:screenshot_postprocessing_normalisierung}
@@ -54,7 +54,7 @@ Nach der Normalisierung werden Duplikate innerhalb der erkannten Textdaten entfe
\end{minipage}
\hfill
\begin{minipage}{0.49\textwidth}
\lstinputlisting[firstnumber=14,linerange={14-22}]{include/postprocessing/duplicates.json}
\lstinputlisting[firstnumber=14,linerange={14-18}]{include/postprocessing/duplicates.json}
\end{minipage}
\caption{Auszug aus den Ergebnisdaten der Texterkennung aus \ref{fig:screenshot_postprocessing} nach der Duplikatentfernung.}
\label{fig:screenshot_postprocessing_duplikate}

View File

@@ -52,7 +52,15 @@ Befindet sich Text zu nah am Rand des Bildes, kommt es vor, dass dieser nicht ri
\subsubsection{Binarisierung}
\label{algorithmen_binarisierung}
Das Erzeugen eines Binärbildes ist durch Anwendung von Segmentierungsverfahren möglich. Schwellenwertverfahren (\engl{Thresholding}) bilden eine Untergruppe der Segmentierungsverfahren und werden genutzt, um Graustufenbilder Pixel für Pixel in binarisierte Ergebnisbilder mit zwei Segmenten, also einem Vordergrund und einem Hintergrund umzuwandeln. Der dazu notwendige Schwellenwert kann entweder fest definiert oder anhand von verschiedensten Algorithmen automatisch \bzw halbautomatisch ermittelt werden. Ziel ist es, durch die Binarisierung textuelle Bildinhalte unabhängig von der eigentlichen Vorder- und Hintergrundfarbe mit ausreichendem Kontrast darzustellen. Dadurch ist das Texterkennungssystem in der Lage, die einzelnen Textelemente und deren Inhalte besser zu identifizieren und zu verarbeiten. ImageMagick bietet eine Vielzahl an Thresholding-Algorithmen, deren Eignung in \autoref{vergleich} verglichen wird.
Das Erzeugen eines Binärbildes ist durch Anwendung von Segmentierungsverfahren möglich. Schwellenwertverfahren (\engl{Thresholding}) bilden eine Untergruppe der Segmentierungsverfahren und werden genutzt, um Graustufenbilder Pixel für Pixel in binarisierte Ergebnisbilder mit zwei Segmenten, also einem Vordergrund und einem Hintergrund umzuwandeln. Der dazu notwendige Schwellenwert kann entweder fest definiert oder anhand von verschiedensten Algorithmen automatisch \bzw halbautomatisch ermittelt werden. Ziel ist es, durch die Binarisierung textuelle Bildinhalte unabhängig von der eigentlichen Vorder- und Hintergrundfarbe mit ausreichendem Kontrast darzustellen. Dadurch ist das Texterkennungssystem in der Lage, die einzelnen Textelemente und deren Inhalte besser zu identifizieren und zu verarbeiten. ImageMagick bietet eine Vielzahl an Thresholding-Algorithmen, von denen in \autoref{vergleich} folgende verglichen werden:
\begin{itemize}
\item Feste Schwellenwertmethode
\item Adaptive Schwellenwertmethode
\item Dreiecks Schwellenwertmethode
\item Schwellenwertmethode nach Otsu
\item Schwellenwertmethode nach Kapur
\end{itemize}
\subsubsubsection{Feste Schwellenwertmethode}
\label{thresholding_fixed}
@@ -153,7 +161,7 @@ Enthält ein Bild jedoch starkes Hintergrundrauschen oder weist es lokale Hellig
\fbox{\includegraphics[width=0.49\textwidth]{include/screenshots/runtime_function_create_002.png}}
\hfill
\fbox{\includegraphics[width=0.49\textwidth]{\detokenize{include/results/AutoThresholdProcessor(OTSU).00.runtime_function_create_002.png}}}
\caption{Anwendung der Schwellenwertmethode nach Otsu auf einen Beispielscreenshot. Wird ein passender Schwellenwert ermittelt, lässt sich der Text gut vom Hintergrund trennen.}
\caption{Anwendung der Schwellenwertmethode nach Otsu \mcite{otsu1979threshold} auf einen Beispielscreenshot. Wird ein passender Schwellenwert ermittelt, lässt sich der Text gut vom Hintergrund trennen.}
\label{thresholding_otsu_vergleich_gut}
\end{figure}
@@ -162,14 +170,14 @@ Enthält ein Bild jedoch starkes Hintergrundrauschen oder weist es lokale Hellig
\fbox{\includegraphics[width=0.49\textwidth]{include/screenshots/editor_windows_position_006.png}}
\hfill
\fbox{\includegraphics[width=0.49\textwidth]{\detokenize{include/results/AutoThresholdProcessor(OTSU).00.editor_windows_position_006.png}}}
\caption{Anwendung der Schwellenwertmethode nach Otsu auf einen Beispielscreenshot. Bei komplexen Strukturen im User-Interface gehen aufgrund des globalen Schwellenwerts Details verloren.}
\caption{Anwendung der Schwellenwertmethode nach Otsu \mcite{otsu1979threshold} auf einen Beispielscreenshot. Bei komplexen Strukturen im User-Interface gehen aufgrund des globalen Schwellenwerts Details verloren.}
\label{thresholding_otsu_vergleich_schlecht}
\end{figure}
\subsubsubsection{Schwellenwertmethode nach Kapur}
\label{thresholding_kapur}
Die Schwellenwertmethode nach Kapur, Sahoo und Wong zielt darauf ab, einen Schwellenwert zu finden, der die Entropie zwischen den Vorder- und Hintergrundregionen maximiert \mcite{kapur1985new}. Wie in \autoref{thresholding_kapur_vergleich_gut} und \autoref{thresholding_kapur_vergleich_schlecht} zu sehen, liefert die Verwendung dieses Schwellenwertverfahrens gute Ergebnisse bei Bildern mit starker Varianz der Vorder- und Hintergrundkontraste \bzw einer breiten Helligkeitsverteilung.
Die Schwellenwertmethode nach Kapur, Sahoo und Wong \mcite{kapur1985new} zielt darauf ab, einen Schwellenwert zu finden, der die Entropie zwischen den Vorder- und Hintergrundregionen maximiert. Wie in \autoref{thresholding_kapur_vergleich_gut} und \autoref{thresholding_kapur_vergleich_schlecht} zu sehen, liefert die Verwendung dieses Schwellenwertverfahrens gute Ergebnisse bei Bildern mit starker Varianz der Vorder- und Hintergrundkontraste \bzw einer breiten Helligkeitsverteilung.
\begin{figure}[ht]
\centering

View File

@@ -21,12 +21,12 @@ In der Sektion "Processor Stats", siehe \autoref{tbl:report_detailed_processorst
Die Sektion "Scan Results" bildet den Abschluss des Detailvergleichs. Hier werden alle Verfahrenskombinationen einzeln und mit allen verfügbaren Daten aufgeführt.
\begin{table}[!ht]
\begin{sidewaystable}[!ht]
\centering
\input{include/figures_modified/fig_command-processing_screentypes_controlgroup_005_1.I.tex}
\caption{Auszug aus der "Scan Results" Tabelle im generierten Bericht. Für jede Ausgabedatei werden sämtliche Statistiken aufgelistet.}
\label{tbl:report_detailed_scanresults_stats}
\end{table}
\end{sidewaystable}
\begin{table}[!ht]
\centering

View File

@@ -37,6 +37,15 @@ Die textuellen Inhalte aller ausgewählten Bilder wurden anschließend manuell e
\subsection{Verwendete Bibliotheken}
\label{components}
Die für die prototypische Implementierung verwendeten Bibliotheken stellen Komponenten zur Verarbeitung von Screenshotdaten zur Verfügung. Um die Funktionalität flexibel auf unterschiedliche Anforderungen anpassen zu können, sind die Komponenten möglichst lose miteinander gekoppelt. Ein beispielhafter Ablauf eines Texterkennungsprogramms unter Nutzung der Bibliotheken ist in \autoref{fig:overview_diagram} abgebildet.
\begin{figure}[ht]
\centering
\includegraphics[width=.9\textwidth]{include/flowcharts/flow_overview.png}
\caption{Beispielhafter Ablauf eines Texterkennungsprogramms}
\label{fig:overview_diagram}
\end{figure}
\subsubsection{Fremdbibliotheken}
\label{components_external}
@@ -156,7 +165,21 @@ Abhängig von den verwendeten Prozessoren können also Eingangsdaten jeglichen T
\subsubsubsection{Bildverarbeitungskette}
\label{processor_chain_image}
Für den Ablauf der Bildverarbeitung und der anschließenden Ergebnisfilterung werden die Erkenntnisse aus \autoref{konzept} mithilfe des in \autoref{components_processorchain} beschriebenen Processing-Frameworks angewandt. Die Resultierende Konfiguration ist in Programm \ref{prg:preprocessor_definition} und Programm \ref{prg:postprocessor_definition} definiert.
Für den Ablauf der Bildverarbeitung und der anschließenden Ergebnisfilterung werden die Erkenntnisse aus \autoref{konzept} mithilfe des in \autoref{components_processorchain} beschriebenen Processing-Frameworks angewandt. Die resultierende Konfiguration folgt dem Ablauf aus \autoref{fig:preprocessor_diagram} und \autoref{fig:postprocessor_diagram} und ist in Programm \ref{prg:preprocessor_definition} \bzw \ref{prg:postprocessor_definition} definiert.
\begin{figure}[ht]
\centering
\includegraphics[width=.9\textwidth]{include/flowcharts/flow_preprocessing.png}
\caption{Beispielhafter Ablauf der Vorverarbeitungskette}
\label{fig:preprocessor_diagram}
\end{figure}
\begin{figure}[ht]
\centering
\includegraphics[width=.9\textwidth]{include/flowcharts/flow_postprocessing.png}
\caption{Beispielhafter Ablauf der Nachbearbeitungskette}
\label{fig:postprocessor_diagram}
\end{figure}
Angefangen mit einem Ausgangsbild, welches über die Softwarebibliothek Magick.NET geladen wurde, beginnt die Bildverarbeitung zunächst mit dem Resampling. Falls der geladene Screenshot die Mindestauflösung von 300 dpi unterschreitet, wird es mittels Lanczos2-Verfahren, eine von Magick.NET mitgelieferte Implementierung des Lanczos2-Algorithmus mit leichter Schärfung \mcite{imagemagick}, auf die Mindestauflösung vergrößert. Anschließend wird das Bild normalisiert, in Graustufen umgewandelt und jegliche Transparenz durch einen weißen Hintergrund ersetzt. Danach wird es mittels Schwellwertverfahren binarisiert. Rund um das Bild wird ein Rahmen mit einer Dicke von 10px eingefügt. Um Texterkennungsfehler durch falsche Vorder- \bzw Hintergrundfarben auszuschließen, wird das Bild gemeinsam mit einer farblich invertierten Version an das Texterkennungssystem weitergegeben.
@@ -176,7 +199,7 @@ var preprocessing = new ProcessorChainConfiguration<MagickImage, MagickImage>()
\label{prg:preprocessor_definition}
\end{program}
Wurde der übergebene Screenshot vom Texterkennungssystem verarbeitet, müssen nun die Ergebnisse gefiltert werden. Dazu werden zunächst die Metadaten der einzelnen Wörter betrachtet und alle Elemente mit einer Confidence unter einem Schwellenwert von 50\% verworfen. Danach werden die erkannten Texte mittels der \csharp-Funktion ToLower() normalisiert und anschließend auf Duplikate untersucht. Sind alle Duplikate verworfen, werden die Wörter mittels sprachabhängigen Regular Expressions -- in diesem Fall gibt es gemäß den Annahmen in \autoref{annahmen_mehrsprachigkeit} einen Sprachfilter für Englisch und Deutsch -- gefiltert.
Wurde der übergebene Screenshot vom Texterkennungssystem verarbeitet, müssen nun die Ergebnisse gefiltert werden. Dazu werden zunächst die Metadaten der einzelnen Wörter betrachtet und alle Elemente mit einer Confidence unter einem Schwellenwert von 50\% verworfen. Danach werden die erkannten Texte mittels der \csharp-Funktion \lstinline{ToLower()} normalisiert und anschließend auf Duplikate untersucht. Wurden alle Duplikate verworfen, werden die Wörter mittels sprachabhängigen Regular Expressions untersucht. Gemäß den Annahmen in \autoref{annahmen_mehrsprachigkeit} wurde ein simpler englischer (\lstinline|[\w'\-]{2,}|) sowie deutscher (\lstinline|[\w'\-äöüÄÖÜß]{2,}|) Sprachfilter festgelegt.
\begin{program}[!ht]
\begin{CsCode}[numbers=none]

View File

@@ -1,12 +1,12 @@
\begin{tabular}{|l|c|c|}
\hline
\textbf{Image} & \textbf{Preview} & \textbf{Distance} \\ \hline
zrs\_ZAMS\_scatter\_002.png & \includegraphics[width=3cm,height=2cm,keepaspectratio]{\detokenize{include/results/AutoThresholdProcessor(Kapur).00.zrs\_ZAMS\_scatter\_002.png}} & 0,09 \\ \hline
command-pro...oup\_005.png & \includegraphics[width=3cm,height=2cm,keepaspectratio]{\detokenize{include/results/AutoThresholdProcessor(Kapur).00.command-processing\_screentypes\_controlgroup\_005.png}} & 0,11 \\ \hline
historian\_a...ent\_001.png & \includegraphics[width=3cm,height=2cm,keepaspectratio]{\detokenize{include/results/AutoThresholdProcessor(Kapur).00.historian\_assistent\_001.png}} & 0,19 \\ \hline
runtime\_fun...ate\_002.png & \includegraphics[width=3cm,height=2cm,keepaspectratio]{\detokenize{include/results/AutoThresholdProcessor(Kapur).00.runtime\_function\_create\_002.png}} & 0,21 \\ \hline
editor\_mult...ple\_007.png & \includegraphics[width=3cm,height=2cm,keepaspectratio]{\detokenize{include/results/AutoThresholdProcessor(Kapur).00.editor\_multimonitor\_example\_007.png}} & 1,00 \\ \hline
report\_exam...ime\_001.png & \includegraphics[width=3cm,height=2cm,keepaspectratio]{\detokenize{include/results/AutoThresholdProcessor(Kapur).00.report\_example\_data-time\_001.png}} & 1,00 \\ \hline
worldview\_z...eps\_001.png & \includegraphics[width=3cm,height=2cm,keepaspectratio]{\detokenize{include/results/AutoThresholdProcessor(Kapur).00.worldview\_zoom\_steps\_001.png}} & 1,00 \\ \hline
zrs\_Metadat...les\_001.png & \includegraphics[width=3cm,height=2cm,keepaspectratio]{\detokenize{include/results/AutoThresholdProcessor(Kapur).00.zrs\_MetadataEditor\_variables\_001.png}} & 1,00 \\ \hline
zrs\_ZAMS\_scatter\_002.png & \includegraphics[width=6cm,height=2.4cm,keepaspectratio]{\detokenize{include/results/AutoThresholdProcessor(Kapur).00.zrs\_ZAMS\_scatter\_002.png}} & 0,09 \\ \hline
command-pro...oup\_005.png & \includegraphics[width=6cm,height=2.4cm,keepaspectratio]{\detokenize{include/results/AutoThresholdProcessor(Kapur).00.command-processing\_screentypes\_controlgroup\_005.png}} & 0,11 \\ \hline
historian\_a...ent\_001.png & \includegraphics[width=6cm,height=2.4cm,keepaspectratio]{\detokenize{include/results/AutoThresholdProcessor(Kapur).00.historian\_assistent\_001.png}} & 0,19 \\ \hline
runtime\_fun...ate\_002.png & \includegraphics[width=6cm,height=2.4cm,keepaspectratio]{\detokenize{include/results/AutoThresholdProcessor(Kapur).00.runtime\_function\_create\_002.png}} & 0,21 \\ \hline
editor\_mult...ple\_007.png & \includegraphics[width=6cm,height=2.4cm,keepaspectratio]{\detokenize{include/results/AutoThresholdProcessor(Kapur).00.editor\_multimonitor\_example\_007.png}} & 1,00 \\ \hline
report\_exam...ime\_001.png & \includegraphics[width=6cm,height=2.4cm,keepaspectratio]{\detokenize{include/results/AutoThresholdProcessor(Kapur).00.report\_example\_data-time\_001.png}} & 1,00 \\ \hline
worldview\_z...eps\_001.png & \includegraphics[width=6cm,height=2.4cm,keepaspectratio]{\detokenize{include/results/AutoThresholdProcessor(Kapur).00.worldview\_zoom\_steps\_001.png}} & 1,00 \\ \hline
zrs\_Metadat...les\_001.png & \includegraphics[width=6cm,height=2.4cm,keepaspectratio]{\detokenize{include/results/AutoThresholdProcessor(Kapur).00.zrs\_MetadataEditor\_variables\_001.png}} & 1,00 \\ \hline
\end{tabular}

View File

@@ -1,12 +1,12 @@
\begin{tabular}{|l|c|c|c|c|c|}
\hline
\textbf{Processor} & \textbf{Elapsed} & \textbf{WER} & \textbf{CER (avg)} & \textbf{Matches} & \textbf{Image} \\ \hline
ThresholdProcessor(30\%) & 0,6ms & 0,0\% & 0,00 & 9 / 9 & \includegraphics[width=2cm,height=2cm,keepaspectratio]{\detokenize{include/results/ThresholdProcessor(30\%).00.command-processing\_screentypes\_controlgroup\_005.png}} \\ \hline
ThresholdProcessor(40\%) & 0,6ms & 0,0\% & 0,00 & 9 / 9 & \includegraphics[width=2cm,height=2cm,keepaspectratio]{\detokenize{include/results/ThresholdProcessor(40\%).00.command-processing\_screentypes\_controlgroup\_005.png}} \\ \hline
ThresholdProcessor(70\%) & 0,7ms & 0,0\% & 0,00 & 9 / 9 & \includegraphics[width=2cm,height=2cm,keepaspectratio]{\detokenize{include/results/ThresholdProcessor(70\%).00.command-processing\_screentypes\_controlgroup\_005.png}} \\ \hline
ThresholdProcessor(60\%) & 1,1ms & 0,0\% & 0,00 & 9 / 9 & \includegraphics[width=2cm,height=2cm,keepaspectratio]{\detokenize{include/results/ThresholdProcessor(60\%).00.command-processing\_screentypes\_controlgroup\_005.png}} \\ \hline
ThresholdAd...ssor(12\_12) & 0,5ms & 77,8\% & 3,00 & 2 / 9 & \includegraphics[width=2cm,height=2cm,keepaspectratio]{\detokenize{include/results/ThresholdAdaptiveProcessor(12\_12).00.command-processing\_screentypes\_controlgroup\_005.png}} \\ \hline
ThresholdAd...ssor(04\_04) & 1,0ms & 88,9\% & 3,22 & 1 / 9 & \includegraphics[width=2cm,height=2cm,keepaspectratio]{\detokenize{include/results/ThresholdAdaptiveProcessor(04\_04).00.command-processing\_screentypes\_controlgroup\_005.png}} \\ \hline
ThresholdAd...ssor(08\_08) & 0,6ms & 100,0\% & 5,89 & 0 / 9 & \includegraphics[width=2cm,height=2cm,keepaspectratio]{\detokenize{include/results/ThresholdAdaptiveProcessor(08\_08).00.command-processing\_screentypes\_controlgroup\_005.png}} \\ \hline
AutoThresho...r(Triangle) & 12,8ms & 100,0\% & 5,89 & 0 / 9 & \includegraphics[width=2cm,height=2cm,keepaspectratio]{\detokenize{include/results/AutoThresholdProcessor(Triangle).00.command-processing\_screentypes\_controlgroup\_005.png}} \\ \hline
ThresholdProcessor(30\%) & 0,6ms & 0,0\% & 0,00 & 9 / 9 & \includegraphics[width=6cm,height=2cm,keepaspectratio]{\detokenize{include/results/ThresholdProcessor(30\%).00.command-processing\_screentypes\_controlgroup\_005.png}} \\ \hline
ThresholdProcessor(40\%) & 0,6ms & 0,0\% & 0,00 & 9 / 9 & \includegraphics[width=6cm,height=2cm,keepaspectratio]{\detokenize{include/results/ThresholdProcessor(40\%).00.command-processing\_screentypes\_controlgroup\_005.png}} \\ \hline
ThresholdProcessor(70\%) & 0,7ms & 0,0\% & 0,00 & 9 / 9 & \includegraphics[width=6cm,height=2cm,keepaspectratio]{\detokenize{include/results/ThresholdProcessor(70\%).00.command-processing\_screentypes\_controlgroup\_005.png}} \\ \hline
ThresholdProcessor(60\%) & 1,1ms & 0,0\% & 0,00 & 9 / 9 & \includegraphics[width=6cm,height=2cm,keepaspectratio]{\detokenize{include/results/ThresholdProcessor(60\%).00.command-processing\_screentypes\_controlgroup\_005.png}} \\ \hline
ThresholdAd...ssor(12\_12) & 0,5ms & 77,8\% & 3,00 & 2 / 9 & \includegraphics[width=6cm,height=2cm,keepaspectratio]{\detokenize{include/results/ThresholdAdaptiveProcessor(12\_12).00.command-processing\_screentypes\_controlgroup\_005.png}} \\ \hline
ThresholdAd...ssor(04\_04) & 1,0ms & 88,9\% & 3,22 & 1 / 9 & \includegraphics[width=6cm,height=2cm,keepaspectratio]{\detokenize{include/results/ThresholdAdaptiveProcessor(04\_04).00.command-processing\_screentypes\_controlgroup\_005.png}} \\ \hline
ThresholdAd...ssor(08\_08) & 0,6ms & 100,0\% & 5,89 & 0 / 9 & \includegraphics[width=6cm,height=2cm,keepaspectratio]{\detokenize{include/results/ThresholdAdaptiveProcessor(08\_08).00.command-processing\_screentypes\_controlgroup\_005.png}} \\ \hline
AutoThresho...r(Triangle) & 12,8ms & 100,0\% & 5,89 & 0 / 9 & \includegraphics[width=6cm,height=2cm,keepaspectratio]{\detokenize{include/results/AutoThresholdProcessor(Triangle).00.command-processing\_screentypes\_controlgroup\_005.png}} \\ \hline
\end{tabular}

View File

@@ -2,21 +2,19 @@ flowchart LR
OCR["Texterkennung\n(Tesseract)"]
Pre -->|Bilddaten| OCR
OCR -->|Schlagworte| Post
%% Einlesen --> Pre
%% Post --> Ausgabe
Post -->|Schlagworte| Lookup
Lookup -->|Schlagworte| Bericht
subgraph Pre[Vorverarbeitung]
direction TB
Pre1[Skalierung] --> Pre2
Pre2[Thresholding] --> Pre3
Pre2["&nbsp;...&nbsp;"] --> Pre3
Pre3[Binarisierung]
end
subgraph Post[Nachbearbeitung]
direction TB
Post1[Normalisierung] --> Post2
Post2[Längenfilterung] --> Post3
Post3[Duplikatfilterung] --> Post4
Post4[RegEx-Filterung]
Post2["&nbsp;...&nbsp;"] --> Post3
Post3[RegEx-Filterung]
end

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1,8 @@
flowchart LR
subgraph Post[Nachbearbeitung]
direction LR
Post1[Confidence-Filter] --> Post2
Post2[Normalisieren] --> Post3
Post3[Duplikatentfernung] --> Post4
Post4[RegEx-Filterung]
end

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@@ -0,0 +1,10 @@
flowchart LR
subgraph Pre[Vorverarbeitung]
direction LR
Pre1[Skalieren] --> Pre2
Pre2[Normalisieren] --> Pre3
Pre3[Thresholding] --> Pre4
Pre4[Rand hinzufügen] --> Pre5
Pre5[Binarisieren] --> Pre6
Pre6[Negieren]
end

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

BIN
main.pdf

Binary file not shown.

View File

@@ -16,6 +16,7 @@
\usepackage{nameref}
\usepackage{hyperref}
\usepackage{rotating}
% Enable to remove floats for testing
@@ -91,8 +92,8 @@
%%%-----------------------------------------------------------------------------
\includepdf[pages=1-2]{include/title.pdf}
\tableofcontents
\include{chapters/c00_frontmatter/abstract/index}
\tableofcontents
%%%-----------------------------------------------------------------------------
\mainmatter % Hauptteil (ab hier arab. Seitenzahlen)