Programmablauf I

This commit is contained in:
Simon
2024-01-07 20:55:21 +01:00
parent f18d2a4c53
commit 5233e81a80
3 changed files with 43 additions and 7 deletions
+1
View File
@@ -44,3 +44,4 @@ Magick.NET
Processor
Delegates
Processors
EvaluationProcessor
+42 -7
View File
@@ -14,8 +14,10 @@ Die textuellen Inhalte aller ausgewählten Bilder wurden anschließend manuell e
% TODO Screenshot und resultierende textdaten.
\subsection{Programmkomponenten}
\label{components}
\subsubsection{Bibliotheken}
\label{components_libraries}
In der prototypischen Implementierung, geschrieben in der Programmiersprache \csharp, wurden in Referenz an die in \autoref{technologien} vorgestellten Technologien und Werkzeuge folgende NuGet-Bibliotheken verwendet:
@@ -24,7 +26,8 @@ In der prototypischen Implementierung, geschrieben in der Programmiersprache \cs
\item \textbf{Tesseract}\\Version: 5.2.0\\Lizenz: Apache-2.0\\\url{https://www.nuget.org/packages/Tesseract}
\end{itemize}
\subsubsection{Verarbeitungssystem}
\subsubsection{Verarbeitungsketten}
\label{components_processorchain}
Beim Entwurf des Verarbeitungssystems für die unterschiedlichen Bild- und Textverarbeitungsschritte wurde bewusst auf Flexibilität geachtet. Mithilfe von Interfaces und Builder-Methoden ist es möglich, Verarbeitungsschritte als Prozessoren (\engl{Processors}) zu definieren. So stellt beispielsweise das Normalisieren eines durch Tesseract erkannten Wortes einen Verarbeitungsschritt dar.
@@ -120,22 +123,54 @@ Ist die Aufbauphase abgeschlossen, kann die Verarbeitungskette schlussendlich ge
Abhängig von den verwendeten Prozessoren können also Eingangsdaten jeglichen Typs, in diesem Fall Bildobjekte der Magick.NET Bibliothek oder Ergebnisdaten des Texterkennungsvorgangs dynamisch verarbeitet werden.
\subsubsection{Verarbeitungskette}
\subsubsubsection{Bildverarbeitungskette}
\label{processor_chain_image}
% TODO
Detaillierte Erklärung der für diese BA verwendeten Verarbeitungskette bzw. deren Ablauf inklusive Code-Auszügen.
Für den grundlegenden Ablauf der Bildverarbeitung und der anschließenden Ergebnisfilterung werden die Erkenntnisse aus \autoref{konzept} mithilfe des in \autoref{components_processorchain} beschriebenen Processing-Frameworks angewandt.
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 300dpi unterschreitet, wird es mittels Lanczos2-Verfahren, eine von Magick.NET mitgelieferte Implementierung des Lanczos2-Algorithmus mit leichter Schärfung, 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 und 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 schlussendlich gemeinsam mit einer farblich invertierten Version an das Texterkennungssystem weitergegeben.
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 schlussendlich 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.
\subsection{Programmablauf}
% TODO
Die prototypische Implementierung besteht neben den oben genannten Komponenten aus einem ausführbaren Kommandozeilenprogramm zur Texterkennung und einem Programm zum Vergleich der Ergebnisse mit den manuell verschlagworteten Soll-Daten.
Alle relevanten Daten werden in entsprechenden Ausgabeverzeichnissen festgehalten und dadurch für den jeweiligen nächsten Schritt verfügbar gemacht.
% TODO mermaid flow chart?
\subsubsection{Texterkennung}
% TODO
TODO: Beschreibung der Schlüsselkomponenten für die Texterkennung
Zu Beginn der Ausführung des Kommandozeilenprogramms wird für jedes zu verarbeitende Bild abhängig von den definierten Schwellenwertverfahren eine Reihe von Prozessoren angelegt. Dazu wurde der statische Teil der Bildverarbeitungskette gemäß \autoref{processor_chain_image} innerhalb der "EvaluationProcessor" Klasse definiert. Lediglich die zu evaluierenden Prozessoren für die jeweiligen Schwellwertverfahren können außerhalb der klasse dynamisch definiert werden. Der EvaluationProcessor legt die erzeugten Ergebnisdaten, bestehend aus den gefundenen Wörtern und zugehörigen Metadaten wie die Confidence, auf Dateiebene ab. Um überprüfen zu können, welches Bild schlussendlich an das Texterkennungssystem übergeben wurde, werden auch die verarbeiteten Bilder nach der Binarisierung gespeichert.
\begin{CsCode}[numbers=none]
private static IEnumerable<EvaluationProcessor> MakeThresholdVariations()
{
for (int i = 4; i <= 24; i += 4)
{
yield return new(new ThresholdAdaptiveProcessor(i));
}
for (int i = 20; i <= 80; i += 10)
{
yield return new(new ThresholdProcessor(i));
}
yield return new(new AutoThresholdProcessor(AutoThresholdMethod.Kapur));
yield return new(new AutoThresholdProcessor(AutoThresholdMethod.OTSU));
yield return new(new AutoThresholdProcessor(AutoThresholdMethod.Triangle));
}
\end{CsCode}
\label{program:program_processor_definition}
\captionof{program}{Auszug aus Datei "Program.cs": Definition der Thresholding Prozessoren}
Ist die Erstellung der Bildbearbeitungsprozessoren abgeschlossen, wird jeder einzelne Prozessor über die Systembibliothek "System.Threading.Tasks" als eigener Auftrag (\engl{Task}) gestartet. In der Kommandozeile wird anschließend der aktuelle Status jedes Tasks angezeigt. Wurden alle Tasks abgeschlossen, wird das Programm beendet.
\subsubsection{Vergleich mit Soll-Daten}
Wurde die
% TODO
TODO: Beschreibung der Schlüsselkomponenten für den programmatischen Vergleich mit den Soll-Daten
BIN
View File
Binary file not shown.