diff --git a/.vscode/ltex.hiddenFalsePositives.de-DE.txt b/.vscode/ltex.hiddenFalsePositives.de-DE.txt
index 3be2a1d43320168fc599c7d440de2e80566b30fa..3e826b94b15cdf82d42118aa7c98f49c2b3c678f 100644
--- a/.vscode/ltex.hiddenFalsePositives.de-DE.txt
+++ b/.vscode/ltex.hiddenFalsePositives.de-DE.txt
@@ -42,3 +42,11 @@
 {"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QDieser definiert eine Liste mit Bilddateien und dem darauf befindlichen Codes und testet dann, ob die main() mit diesen Parametern das erwartete Ergebnis liefert.\\E$"}
 {"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QUm die Tests durchzuführen, kann direkt der Befehl pytest oder das Makefilerezept test verwendet werden.\\E$"}
 {"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QDadurch wird pyinstaller mit den entsprechenden Optionen angestoßen und erzeugt den Unterordner dist/klarschrifterkennung.\\E$"}
+{"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QFür die Aufgabe relevante Hardware laut Pflichtenheft \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q 01 SIMATIC MV440 UR optischer Leser; Auflösung: 1600 x 1200 Pixel; für 1D/2D-Codelesen, Texterkennung und Objekterkennung; Bildfeld und Abstand: variabel; PoE; IP67 (mit 6GF3440-8AC1X); Lieferung: Lesegerät, CD-ROM und Kunststoff-Schutz-Tubus; (ohne: Kabel, Leuchte, Objektiv, Lizenzen) 02 MV440 Montageplatte Lesegerät; Material: Edelstahl (4 mm), vielfältig anwendbar, Befestigung: metrische Gewinde, Fotogewinde (1/4-Zoll, 2x mittig) BxHxT (mm) 80 x 80 x 60 03 Mini-Objektiv 6 mm, 1: 1,4 PENTAX C60636KP mit fester Brennweite, Blende und Fokus einstellbar D = 32 mm, L = 37,5 mm 04 D65-Objektiv-Schutz Metall-Glas, Schutzart IP67 für MV440-Geräte; Frontscheibe: Glas, Gehäuse: Metall enthält: Tubus, O-Ring und Schutzkappen (M12, M12, M16), Innen-Durchmesser: 57 mm, max. Objektivlänge: 57 mm geeignete Objektive (MLFB): z.B. 6GF9001-1BL01, ...-1BF01, ...-1BG01, ...-1BH01, ...-1BJ01 geeignete Leuchten (MLFB): 6GF3440-8DA1, ...-8DA2, ...-8DA11 BxHxT (mm) 65 x 65 x 60 10 SIMATIC IPC277E (Nanopanel PC); 7” Touch TFT; 2x 10/100/1000 MBit/s Ethernet RJ45; 1x Display-Port Grafik; 1x USB 3.0; 2x USB 2.0; 1x seriell (COM 1); CFAST-Slot; DC 24V Stromversorgung Celeron N2807 (2C/2T) 4 GB RAM WIN Embedded Standard 7 P SP1, englisch; 64 Bit 80 GB SSD ohne SIMATIC Software\\E$"}
+{"rule":"FALSCHES_ANFUEHRUNGSZEICHEN","sentence":"^\\QFür die Aufgabe relevante Hardware laut Pflichtenheft \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q 01 SIMATIC MV440 UR optischer Leser; Auflösung: 1600 x 1200 Pixel; für 1D/2D-Codelesen, Texterkennung und Objekterkennung; Bildfeld und Abstand: variabel; PoE; IP67 (mit 6GF3440-8AC1X); Lieferung: Lesegerät, CD-ROM und Kunststoff-Schutz-Tubus; (ohne: Kabel, Leuchte, Objektiv, Lizenzen) 02 MV440 Montageplatte Lesegerät; Material: Edelstahl (4 mm), vielfältig anwendbar, Befestigung: metrische Gewinde, Fotogewinde (1/4-Zoll, 2x mittig) BxHxT (mm) 80 x 80 x 60 03 Mini-Objektiv 6 mm, 1: 1,4 PENTAX C60636KP mit fester Brennweite, Blende und Fokus einstellbar D = 32 mm, L = 37,5 mm 04 D65-Objektiv-Schutz Metall-Glas, Schutzart IP67 für MV440-Geräte; Frontscheibe: Glas, Gehäuse: Metall enthält: Tubus, O-Ring und Schutzkappen (M12, M12, M16), Innen-Durchmesser: 57 mm, max. Objektivlänge: 57 mm geeignete Objektive (MLFB): z.B. 6GF9001-1BL01, ...-1BF01, ...-1BG01, ...-1BH01, ...-1BJ01 geeignete Leuchten (MLFB): 6GF3440-8DA1, ...-8DA2, ...-8DA11 BxHxT (mm) 65 x 65 x 60 10 SIMATIC IPC277E (Nanopanel PC); 7” Touch TFT; 2x 10/100/1000 MBit/s Ethernet RJ45; 1x Display-Port Grafik; 1x USB 3.0; 2x USB 2.0; 1x seriell (COM 1); CFAST-Slot; DC 24V Stromversorgung Celeron N2807 (2C/2T) 4 GB RAM WIN Embedded Standard 7 P SP1, englisch; 64 Bit 80 GB SSD ohne SIMATIC Software\\E$"}
+{"rule":"UPPERCASE_SENTENCE_START","sentence":"^\\Qblack Python Formatierungsprogramm.\\E$"}
+{"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QDort befindet sich die Datei __main__.py als Haupteinstiegspunkt des Programms sowie alle weiten selbsterstellten Pakete.\\E$"}
+{"rule":"DE_CASE","sentence":"^\\QErklärungen zur Projektstruktur Ordner/Dateiname Erklärung .venv/ Dieser Ordner wird beim Erzeugend des Virtual Enviroments (siehe \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q) erstellt.\\E$"}
+{"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QErklärungen zur Projektstruktur Ordner/Dateiname Erklärung .venv/ Dieser Ordner wird beim Erzeugend des Virtual Enviroments (siehe \\E(?:Dummy|Ina|Jimmy-)[0-9]+\\Q) erstellt.\\E$"}
+{"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QDie Kommandozeilenparameter werden direkt an die Funktion main() übergeben, die alternativ zur Nutzung über die Kommandozeile von anderen Python-Programmen importiert und aufgerufen werden kann.\\E$"}
+{"rule":"DE_COMPOUND_COHERENCY","sentence":"^\\QDie Kommandozeilenparameter werden direkt an die Funktion main() übergeben, die alternativ zur Nutzung über die Kommandozeile von anderen Python-Programmen importiert und aufgerufen werden kann.\\E$"}
diff --git a/Praxisbericht.pdf b/Praxisbericht.pdf
index 4534470e8cb51b6357b6d50a0829853db77a10a0..61cdb36a4806dee3524297408bc1e65b9970cabb 100644
Binary files a/Praxisbericht.pdf and b/Praxisbericht.pdf differ
diff --git a/Praxisbericht.tex b/Praxisbericht.tex
index 79e8eaade090aced889f3ea5cd105c7b787e0669..37a9a4d28e6aea829fafe117c8dc9fa8f925b010 100644
--- a/Praxisbericht.tex
+++ b/Praxisbericht.tex
@@ -32,11 +32,11 @@
 
 	\chapter{Problemstellung} \label{chap: problem}
 
-		Eine Reihe von Container (im folgenden auch als \emph{Gebinde} bezeichnet) soll von einer Umladehalle an ihren Lagerort gebracht werden. Dabei
+		Eine Reihe von Container (im Folgenden auch als \emph{Gebinde} bezeichnet) soll von einer Umladehalle an ihren Lagerort gebracht werden. Dabei
 		soll vor dem Aufnehmen auf ein Stapelfahrzeug sichergestellt werden, dass es sich tatsächlich um das richtige Gebinde handelt.
 
 		Dazu sind alle Gebinde mit einem oder mehreren Codes in Klarschrift beschriftet, welche erkannt und verifiziert werden müssen. Wie genau diese
-		Erkennung stattfinden, ist im folgenden Dokumentiert.
+		Erkennung stattfinden, ist im Folgenden Dokumentiert.
 
 		\section{Container Typen} \label{sec: container}
 
@@ -52,13 +52,13 @@
 
 			\begin{figure}
 				\graphicspath{{svg/}}
-				\subfigure[Rechteck-Gebinde]{
+				\subfigure[Rechteckgebinde]{
 					\def\svgwidth{0.45\textwidth}
 					\input{svg/container.pdf_tex}
 					\label{subfig: rechteck-gebinde}
 				}
 				\hfill
-				\subfigure[Rund-Gebinde]{
+				\subfigure[Rundgebinde]{
 					\def\svgwidth{0.45\textwidth}
 					\input{svg/rundgebinde.pdf_tex}
 					\label{subfig: rund-gebinde}
@@ -69,13 +69,13 @@
 
 		\section{Hardware Voraussetzungen} \label{sec: hardware}
 
-			Im Pflichtenheft (\cite{pflichtenheft}) ist die bestellte Hardware aufgelistet. Für die hier behandelte Aufgabe sind aber nur einige
+			Im Pflichtenheft \cite{pflichtenheft} ist die bestellte Hardware aufgelistet. Für die hier behandelte Aufgabe sind aber nur einige
 			wenige Komponenten relevant. Die genauen Bezeichnungen sind in \autoref{tab: hardware} aufgelistet, im Folgenden wird aber nur noch von
 			\emph{Kamera} und \emph{Panel-PC} gesprochen.
 
 			\begin{table}
 				\renewcommand{\arraystretch}{1.2}
-				\caption{Für die Aufgabe relevante Hardware laut Pflichtenheft (\cite{pflichtenheft})} \label{tab: hardware}
+				\caption{Für die Aufgabe relevante Hardware laut Pflichtenheft \cite{pflichtenheft}} \label{tab: hardware}
 				\begin{tabular}{|l|p{.8\textwidth}|}
 					\hline
 					01 & SIMATIC MV440 UR optischer Leser; Auflösung: 1600\,x\,1200 Pixel; für 1D/2D-Codelesen, Texterkennung und Objekterkennung;
@@ -85,8 +85,8 @@
 						Fotogewinde (1/4-Zoll, 2x mittig) BxHxT (mm) 80\,x\,80\,x\,60 \\\hline
 					03 & Mini-Objektiv 6\,mm, 1: 1,4 PENTAX C60636KP mit fester Brennweite, Blende und Fokus einstellbar D = 32\,mm, L = 37,5\,mm \\\hline
 					04 & D65-Objektiv-Schutz Metall-Glas, Schutzart IP67 für MV440-Geräte; Frontscheibe: Glas, Gehäuse: Metall enthält: Tubus, O-Ring
-						und Schutzkappen (M12, M12, M16), Innen-Durchmesser: 57\,mm max. Objektivlänge: 57\,mm geeignete Objektive (MLFB): z.B.
-						6GF9001-1BL01,...-1BF01, ...-1BG01,...-1BH01,...-1BJ01 geeignete Leuchten (MLFB): 6GF3440-8DA1,...-8DA2,...-8DA11 BxHxT (mm)
+						und Schutzkappen (M12, M12, M16), Innen-Durchmesser: 57\,mm, max. Objektivlänge: 57\,mm geeignete Objektive (MLFB): z.B.
+						6GF9001-1BL01, ...-1BF01, ...-1BG01, ...-1BH01, ...-1BJ01 geeignete Leuchten (MLFB): 6GF3440-8DA1, ...-8DA2, ...-8DA11 BxHxT (mm)
 						65\,x\,65\,x\,60 \\\hline
 					10 & SIMATIC IPC277E (Nanopanel PC); 7'' Touch TFT; 2x 10/100/1000 MBit/s Ethernet RJ45; 1x Display-Port Grafik; 1x USB 3.0; 2x
 						USB 2.0; 1x seriell (COM 1); CFAST-Slot; DC 24V Stromversorgung Celeron N2807 (2C/2T) 4 GB RAM WIN Embedded Standard 7 P SP1,
@@ -102,11 +102,11 @@
 			Codes mit einer Liste von für diese Schicht gültigen Codes vergleichen. Dabei soll es keinen Unterschied machen, welcher Containertyp
 			gerade vor dem Fahrzeug steht. Insbesondere die beliebige Rotation der Rundgebinde muss berücksichtigt werden.
 
-			Zusätzlich zu der hier behandelten Komponenten kann eine weitere Software vorausgesetzt werden. Diese Läuft auf dem Panel-PC und
-			präsentiert dem Fahrer eine grafische Oberfläche (\emph{GUI}). Am Anfang der Schicht erhält diese eine Liste mit Arbeitsaufträgen für die
-			Schicht inklusive der Codes der zu transportierenden Container. Diese Software stößt den Scanprozess an und erhält das Ergebnis, um es dem
+			Zusätzlich zu der hier behandelten Komponenten kann eine weitere Software vorausgesetzt werden. Diese läuft auf dem Panel-PC und
+			präsentiert dem Fahrer eine grafische Oberfläche (GUI). Am Anfang der Schicht erhält diese eine Liste mit Arbeitsaufträgen für die
+			Schicht, inklusive der Codes der zu transportierenden Container. Diese Software stößt den Scanprozess an und erhält das Ergebnis, um es dem
 			Fahrer grafisch darzustellen. Sollte der Lesevorgang nur teilweise oder gar nicht funktionieren, soll der Fahrer so viele
-			Teilinformationen wie möglichen erhalten und wird von der Zusatzsoftware zum manuellen Eingreifen aufgefordert.
+			Teilinformationen wie möglich erhalten und wird von der Zusatzsoftware zum manuellen Eingreifen aufgefordert.
 
 			Außerdem soll die Möglichkeit bestehen ein Foto des Abstellortes aufzunehmen und zur Archivierung an den erfolgreichen Auftrag anzuhängen.
 
@@ -144,9 +144,9 @@
 				\caption{Erklärungen zur Projektstruktur} \label{tab: struktur}
 				\renewcommand*{\arraystretch}{1.25}
 				\begin{tabular}{l p{.6\textwidth}}
-					\textit{Ordner/Dateiname} & \textit{Erklärung} \\
+					\textit{Ordner/Dateiname} & \textit{Erklärung}\\
 					\hline
-					\texttt{.venv/}           & Dieser Ordner wird beim erzeugend des \emph{Virtual Enviroments} (siehe \ref{sec: bibliotheken})
+					\texttt{.venv/}           & Dieser Ordner wird beim Erzeugend des \emph{Virtual Enviroments} (siehe \ref{sec: bibliotheken})
 					                            erstellt. In ihn werden alle Bibliotheken für das venv installiert                                                 \\
 					\texttt{src/}             & Hier befinden sich die eigentlichen Quellcodedateien                                                               \\
 					\texttt{tesseract/}       & Die binären Dateien für das Programm Tesseract befinden sich hier                                                  \\
@@ -180,7 +180,7 @@
 					\multicolumn{2}{@{}l}{\textit{Pakete für die Entwicklung:}} \\
 					\texttt{pyinstaller} \cite{pypi:pyinstaller} & Eine Bibliothek zum Verpacken eines Pythonprogrammes in ein alleinstehendes
 						Programm. \\
-					\texttt{black} & Python formatierungs Programm. \\
+					\texttt{black} & Python Formatierungsprogramm. \\
 					\texttt{flake8} & Python Syntaxchecker. \\
 					\texttt{pytest} & Python Unittest Framework. Ermöglicht automatisiertes Testen. \\
 				\end{tabular}
@@ -200,16 +200,16 @@
 				pip install -r requirements.txt
 			\end{lstlisting}
 
-			Der Quellcode des Projektes befindet sich im Unterordner \lstinline{./src}. Dort befindet sich die Datei \lstinline{__main__.py} als
-			Haupteinstiegspunktes des Programms sowie alle weiten selbsterstellten Pakete. Das Programm wird also mittels
+			Der Quellcode des Projektes befindet sich im Unterordner \lstinline{./src}. Dort befindet sich die Datei \lstinline{__main__.py}, als
+			Haupteinstiegspunkt des Programms, sowie alle weiteren selbsterstellten Pakete. Das Programm wird also mittels
 			\lstinline{python src/__main__.py} gestartet (ein Beispiel ist im Makefilerezept \emph{run} gezeigt).
 
 		\pagebreak
 		\section{Schnittstelle} \label{sec: interface}
 
-			Da das Softwaremodule von einem übergeordneten Programm aufgerufen wird, erhält es beim Start von diesem die Nötigen Informationen. Diese
-			werden einfach als Kommandozeilen Parameter übergeben. Das erste Argument muss ein Dateipfad zum zu analysierenden Bild sein, danach
-			folgen eine beliebig lange reihe an gültigen Codes. Über die Flag \lstinline{-h} kann außerdem eine Hilfe aufgerufen werden, die die
+			Da das Softwaremodule von einem übergeordneten Programm aufgerufen wird, erhält es beim Start von diesem die nötigen Informationen. Diese
+			werden einfach als Kommandozeilenparameter übergeben. Das erste Argument muss ein Dateipfad zum zu analysierenden Bild sein, danach
+			folgen eine beliebig lange Reihe an gültigen Codes. Über die Flag \lstinline{-h} kann außerdem eine Hilfe aufgerufen werden, die die
 			Benutzung erklärt und nachfolgend abgedruckt ist.
 
 			\begin{lstlisting}[language=,gobble=16]
@@ -217,13 +217,13 @@
 
 				positional arguments:
 				imagepath   Path to the image that should be processed
-				code        valid codes to be compared againsted
+				code        valid codes to be compared against
 
 				options:
 				-h, --help  show this help message and exit
 			\end{lstlisting}
 
-			Die Kommandozeilen Parameter werden direkt an die Funktion \lstinline{main()} übergeben, die alternativ zu Nutzung über die Kommandozeile
+			Die Kommandozeilenparameter werden direkt an die Funktion \lstinline{main()} übergeben, die alternativ zur Nutzung über die Kommandozeile
 			von anderen Python-Programmen importiert und aufgerufen werden kann.
 
 			\medskip
@@ -241,8 +241,8 @@
 				zurückgibt.
 
 				Der erste Filterschritt entfernt die sogenannten \emph{Salt\&Pepper} Störungen. Damit sind einzelne weiße oder schwarze Pixel gemeint,
-				die durch Fehler in einzelnen Transistoren des Kamerasensors entstehen. Diese werden durch einfache Mittelwertbildung mit allen
-				angrenzenden Pixeln eliminiert. \cite{opencv:smoothing}
+				die durch Fehler in einzelnen Transistoren des Kamerasensors oder im Kamerachip entstehen. Diese werden durch einfache
+				Mittelwertbildung mit allen angrenzenden Pixeln eliminiert. \cite{opencv:smoothing}
 
 				Danach wird ein bilateraler Filter mit einem $7\!\times\! 7$ Kernel auf das gesamte Bild angewandt. Dadurch werden Bildsektionen mit
 				annähernd identischen Farbwerten vereinheitlicht, gleichzeitig bleiben Kanten (also stark unterschiedliche Farbwerte bei
@@ -427,7 +427,7 @@
 
 		\section{Verbesserungsmöglichkeiten}
 			Grundsätzlich ist es nötig, die genauen Bedingungen vor Ort zu kennen. Damit lassen sich die Parameter des Programms anpassen und das
-			Ergebnis weiter Verbessern.
+			Ergebnis weiter verbessern.
 
 			Will man noch weiter gehen, wäre auch ein Ansatz mit einem Neuralen Netz denkbar. Dieser erfordert aber viel Rechenleistung, und da der
 			Panel-PC über keine Grafikkarte verfügt, ist dies nur bedingt umsetzbar.