diff --git a/.vscode/ltex.dictionary.de-DE.txt b/.vscode/ltex.dictionary.de-DE.txt index cd72a623bde1b68b2771b9e0e7ebdf1681252614..721102105a62782e58304259c27e29c6a98c4504 100644 --- a/.vscode/ltex.dictionary.de-DE.txt +++ b/.vscode/ltex.dictionary.de-DE.txt @@ -50,3 +50,4 @@ if überischtlcikeit For-Schleife Debuggmöglichkeiten +Hough diff --git a/.vscode/ltex.hiddenFalsePositives.de-DE.txt b/.vscode/ltex.hiddenFalsePositives.de-DE.txt index e8ee7517b39bdb49c8d3cf228e525c8bcdb2c570..fb586569d836bbefb5c2f1381fa6dbbd95abf54d 100644 --- a/.vscode/ltex.hiddenFalsePositives.de-DE.txt +++ b/.vscode/ltex.hiddenFalsePositives.de-DE.txt @@ -14,3 +14,6 @@ {"rule":"DE_CASE","sentence":"^\\QUm die Datenmenge gering und die Laufzeit schnell zu halten, werden lediglich die vier Klassen Vertikal, Horizontal, Diagonal 1 und Diagonal 2 verwendend.\\E$"} {"rule":"GERMAN_SPELLER_RULE","sentence":"^\\QHierzu wird wieder das ROS-Paket cv_bridge und dessen Funktion toCvCopy() verwendet.\\E$"} {"rule":"DE_AGREEMENT","sentence":"^\\QFür jeden Pixel wird wieder überprüft, ob er ein Startpixel ist.\\E$"} +{"rule":"SENT_START_SIN_PLU","sentence":"^\\QGrundlage bilden hierbei verschiedene\\E$"} +{"rule":"SENT_START_SIN_PLU","sentence":"^\\QGrundlage bilden hierbei verschiedene Operationen, mit welchen sich Bilder verändern lassen.\\E$"} +{"rule":"DE_AGREEMENT","sentence":"^\\QUm nun ein Pixel des Zielbildes zu bestimmen, wird ein entsprechende Bildausschnitt im Ursprungsbild ausgewählt und\\E$"} diff --git a/Bachelorarbeit.pdf b/Bachelorarbeit.pdf index 2b9fa9ce0fc6a69459d506b36708ea4db6af64e1..b31404ac8c1dd1a7fdb9b9bf957fdc36b3127b07 100644 Binary files a/Bachelorarbeit.pdf and b/Bachelorarbeit.pdf differ diff --git "a/bib/Glossareintr\303\244ge.tex" "b/bib/Glossareintr\303\244ge.tex" index 59067b1c988d3ec3e2e409bb8a682c4f7fe48a35..bdfcbd26f7a399bce54b6c14d845c531ab21f807 100644 --- "a/bib/Glossareintr\303\244ge.tex" +++ "b/bib/Glossareintr\303\244ge.tex" @@ -136,5 +136,18 @@ \newglossaryentry{Kernel}{ name={Kernel}, plural={Kerneln}, - description={\todo{Beschreibung}} + description={Eine Matrix die beim Filtern und verarbeiten von Bildern verwendet wird. Mit ihr werden Pixelnachbarschafen gewichtet.} +} + +\newglossaryentry{Pixel}{ + name={Pixel}, + description={Ein einzelner Bildpunkt. Er hat einen Wert zwischen Scharz ($0$) und Weiß ($255$)} +} + +\newglossaryentry{Pixelnachbarschaft}{ + name={Pixelnachbarschaft}, + plural={Pixelnachbarschaften}, + description={ + Ein Bereich festgelegter Größe um einen relevanten Hauptpixel. + } } diff --git a/bib/Quellenverzeichnis.bib b/bib/Quellenverzeichnis.bib index 9d9d98126d7e36cd13f9d70ad198f5ac10cee8e4..1742d03a0f9a0847502d1dd205090fc703469a3c 100644 --- a/bib/Quellenverzeichnis.bib +++ b/bib/Quellenverzeichnis.bib @@ -118,6 +118,16 @@ doi = {10.1117/12.2587615}, language = {eng} } + +@inproceedings{assistanceSystem:laneDetection-vehicleRecognition, + author = {Chun-Che Wang and Shih-Shinh Huang and Fu, Li-Chen}, + booktitle = {2005 IEEE/RSJ International Conference on Intelligent Robots and Systems}, + title = {Driver assistance system for lane detection and vehicle recognition with night vision}, + year = {2005}, + pages = {3530-3535}, + doi = {10.1109/IROS.2005.1545482} +} + @article{LaneDetection_basedOnRidge, author = {Lu, Jingyan and Xu, Longfei and Shan, and Liu, Yi and Wang, Cheng and Kuocheng, Shen}, year = {2019}, @@ -160,6 +170,45 @@ doi = {10.1109/34.888718}, number = {11} } + +@article{landeDetectionMethodes:deepLearning, + author = {Tang, Jigang and Li, Songbin and Liu, Peng}, + title = {A review of lane detection methods based on deep learning}, + journal = {Pattern Recognition}, + volume = {111}, + pages = {107623}, + month = {03}, + year = {2021}, + doi = {10.1016/j.patcog.2020.107623}, + language = {eng}, + keywords = {Lane detection, Deep learning, Semantic segmentation, Instance segmentation}, + abstract = {Lane detection is an application of environmental perception, which aims to detect lane areas or lane lines by camera or lidar. In recent years, gratifying progress has been made in detection accuracy. To the best of our knowledge, this paper is the first attempt to make a comprehensive review of vision-based lane detection methods. First, we introduce the background of lane detection, including traditional lane detection methods and related deep learning methods. Second, we group the existing lane detection methods into two categories: two-step and one-step methods. Around the above summary, we introduce lane detection methods from the following two perspectives: (1) network architectures, including classification and object detection-based methods, end-to-end image-segmentation based methods, and some optimization strategies; (2) related loss functions. For each method, its contributions and weaknesses are introduced. Then, a brief comparison of representative methods is presented. Finally, we conclude this survey with some current challenges, such as expensive computation and the lack of generalization. And we point out some directions to be further explored in the future, that is, semi-supervised learning, meta-learning and neural architecture search, etc.} +} + +@article{LaneDetector:driverAssistanceSystems, + author = {S.A. Sivasankari and R. {Agilesh Saravanan} and J. {Bennilo Fernandes} and K.T.P.S. Kumar}, + title = {Lane detector for driver assistance systems}, + journal = {Materials Today: Proceedings}, + year = {2021}, + doi = {10.1016/j.matpr.2021.03.649}, + language = {eng}, + keywords = {Lane detection, Computer vision, ITS, Driver support system, Machine learning techniques, Python programming, ADAS}, + abstract = {The challenging problem in the traffic system is lane detection. This Lane detection which attracts the computer vision community’s attention. For computer vision and machine learning techniques, the Lane detection which acts as the multi-feature detection problem. Many machine learning techniques are used for lane detection. Driver support system is one of the most important features in the modern vehicles to ensure the safety of the driver and decrease the vehicle accidents on road. Road Lane detection is the most challenging task and complex tasks now-a-days. Road localization and relative position between vehicle and roads which also includes with this. But in this journal, we propose a new method. Here, an on- board camera to be used which is looking outwards are presented here in this work. This proposed technique which can be used for all types of roads like painted, unpainted, curved, straight roads etc in different weather conditions. No need for camera calibration and coordination of the transform, may be any changing illumination situation, shadow effects, various road types. No representation for speed limits. This includes that the system acquires the front view using a camera mounted on the vehicles and detect the Lane by applying the code from the Python Programming process. This proposed system does not require any more information about roads. This system which demonstrates a robust performance for Lane detection.} +} + +@article{laneDetection:aReview, + author = {Gurveen Kaur and Dinesh Kumar}, + title = {Lane Detection Techniques: A Review}, + journal = {International Journal of Computer Applications}, + year = {2015}, + volume = {112}, + number = {10}, + pages = {4-8}, + language = {eng}, + url = {https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.695.9070&rep=rep1&type=pdf}, + urldate = {2022-09-01} +} + @article{Canny:computationAlapproachEdgeDetection, author = {Canny, John}, title = {A Computational Approach to Edge Detection}, diff --git a/chap/standdertechnik.tex b/chap/standdertechnik.tex index 931d477fb1c995f448b97ef97e2f7864caa8782b..958b1080b1a7eb11795796bc3ebf0459cd28d2ef 100644 --- a/chap/standdertechnik.tex +++ b/chap/standdertechnik.tex @@ -1,42 +1,65 @@ \chapter{Stand der Technik} \label{chap: stand der technik} - % \section{Vorgehensweisen zur Bildbearbeitung} + \section{Techniken zur Fahrspurerkennung} - % \subsection{Lokale Operationen auf Bildern} + Das Thema Fahrspurerkennung beschäftigt die Wissenschaft und auch die Automobilindustrie bereits seit einigen Jahren. Im Folgenden möchte ich + daher die existierenden üblichen Ansätze zu diesem Thema erläutern. Dabei ist besonders interessant, wie diese in diese Arbeit einfließen. - % \subsection{Kantendetektion} + \subsection{Geometrische und algorithmische Ansätze} - \section{Lochkamera Modell} \label{sec: pinhole model} + Bei den klassischen und ältesten Methoden wird an die Thematik mit mathe\-ma\-tisch-geo\-me\-trisch\-en Ansätzen herangegangen. Diese + werden zu Algorithmen verknüpft, um unterschiedliche Informationen herauszuarbeiten, zu verknüpfen und das Ergebnis zu verfeinern. - \begin{align} \label{eq: camera} - \begin{pmatrix} - u \\ v \\ 1 - \end{pmatrix} - &= - \begin{pmatrix} - f_x & 0 & c_x \\ - 0 & f_y & c_y \\ - 0 & 0 & 1 \\ - \end{pmatrix} - \begin{pmatrix} - r_{11} & r_{12} &r_{13} & t_1 \\ - r_{21} & r_{22} &r_{23} & t_2 \\ - r_{31} & r_{32} &r_{33} & t_3 \\ - \end{pmatrix} - \begin{pmatrix} - x \\ y \\ z \\ 1 - \end{pmatrix} - \\ - p &= K \cdot T[RT] \cdot - \end{align} + Grundlage bilden hierbei verschiedene Operationen, mit welchen sich Bilder verändern lassen. Solche Operationen verknüpfen eine bestimmen + menge an Pixeln eines Ursprungsbildes mittels einer mathematischen Operation, um ein neues \gls{Pixel} für das Zielbild zu ermitteln. Ein + relativ simples Beispiel hierfür ist das Bilden eines Mittelwertes von jeweils drei Farbpixeln, um ein Schwarzweißbild zu erzeugen. - \todo[inline]{Stand der Technik: Was ist Spruerkennung? wie wird das zurzeit immer gemacht?? - ein absatz klasisch kantenbasiert\\ - ein absatz Kategorien von Deep learning ansätzen} + % Häufig kommen bei diesen Operationen sogenannten \gls{Kernel} zum Einsatz. Dabei handelt es sich um Matrizen, welche je nach Anwendung + % Werte enthalten. Um nun ein \gls{Pixel} des Zielbildes zu bestimmen, wird ein entsprechender Bildausschnitt im Ursprungsbild ausgewählt und + % jeder \gls{Pixel} mit einem Element des \glspl{Kernel} verrechnet. Danach wird die Ergebnis Matrix zum neuen Wert für das Zielpixel zusammen + % gefasst, häufig durch simples Summieren. Auf diese weise werden zum Beispiel viele Filterfunktionen umgesetzt. + % Der für diese Arbeit relevante \gls{gauss-filter} verwendet einen \gls{Kernel}, dessen Werte um den Kernel-Mittelpunkt Normalverteilt + % sind. Dieser wird für jeden \gls{Pixel} mit der entsprechend großen \gls{Pixelnachbarschaft} multipliziert und aufsummiert. Dadurch wird + % der gewichtete Mittelwert aller Nachbarpixel gebildet und das Bild geglättet. - \section{Deep learning} + Der sehr grobe Ablauf, welcher solche Operationen zu einem Algorithmus verknüpft, ist in \autoref{fig: genersich} skizziert. Dabei sind + die Einzelschritte in der Realität jedoch häufig sehr kompliziert. Begonnen wird eigentlich immer mit einem Vorbereitung-Schritt, da die + Bilder einer Kamera nur selten direkt verwendet werden können. Teilweise ist eine solche Vorverarbeitung aber auch Hardwareseitig oder in + vorgelagerten Programmteilen umgesetzt. Meisten wird das Bild außerdem in ein Schwarzweißbild umgewandelt, da so nur ein Drittel der + Pixel untersucht werden müssen, was die Performance verbessert. + + \begin{figure} + \includegraphics[scale=.85]{svg/PAP_generisch_markerdetektion.pdf} + \caption{Generischer Ablauf von Fahrspurerkennung (nach \cite{laneDetection:aReview})} + \label{fig: genersich} + \end{figure} + + Bei den sogenannten Features handelt es sich um spezifische, möglichst eindeutige Muster im Bild. Im Fall von Fahrspurmarkierungen sind + dies eigentlich immer Kannten und Ecken ebendieser. Häufig wird hier der \gls{canny} eingesetzt, der von John Canny in + \cite{Canny:computationAlapproachEdgeDetection} entwickelt wurde. Dieser Algorithmus ist sehr gut zum Identifizieren von Kantenpixeln + geeignet und erzeigt ein Binärbild, in dem nur noch ein \gls{Pixel} dicke Umrisse verbleiben. + + Das genaue Vorgehen um Features zu finden und zu verknüpfen, hängt von der Methode ab. In \cite{laneDetection:aReview} werden verscheiden + Möglichkeiten die Hough Transformation zu verwenden miteinander verglichen und \cite{assistanceSystem:laneDetection-vehicleRecognition} + verwendet zusätzlich eine Methode zum Kombinieren von einzelnen Liniensegmenten. \cite{robustLaneMarkingDetection} demonstriert einen + Ansatz, um direkt Mittellinien von Fahrspurmarkierungen anhand von bekannten Größenparametern abzuleiten. + + Das Ergebnis kann durch das Einbeziehen weiterer Informationen noch weiter verbessert werden. Oft wird hier das originale + Farbbild mit einbezogen (siehe \cite{laneDetection:aReview}), aber auch das Zurückgreifen auf das vorherige Bild, wie in + \cite{LaneDetection_basedOnRidge} eingesetzt, ist möglich. + + + \todo[inline]{Stand der Technik: Was ist Spruerkennung? wie wird das zurzeit immer gemacht??\\ + - ein absatz klasisch kantenbasiert\\ + - ein absatz Kategorien von Deep learning ansätzen} + + \subsection{Deep Learning Ansätze} + + Alternativ zu den traditionellen Ansätzen gibt es die neuen Deep Learning Methoden. Hier werden sogenannte \emph{Convolutional Neural + Networks} (kurz \emph{CNN}) verwendet. Diese Netzwerke bestehen aus mehreren Schichten, welche von einem Eingangsbild nacheinander + durchlaufen werden. \todo[inline]{ Was ist das? \\ @@ -44,6 +67,29 @@ Was ist ungeeignet? } + % \section{Lochkamera Modell} \label{sec: pinhole model} + + % \begin{align} \label{eq: camera} + % \begin{pmatrix} + % u \\ v \\ 1 + % \end{pmatrix} + % &= + % \begin{pmatrix} + % f_x & 0 & c_x \\ + % 0 & f_y & c_y \\ + % 0 & 0 & 1 \\ + % \end{pmatrix} + % \begin{pmatrix} + % r_{11} & r_{12} &r_{13} & t_1 \\ + % r_{21} & r_{22} &r_{23} & t_2 \\ + % r_{31} & r_{32} &r_{33} & t_3 \\ + % \end{pmatrix} + % \begin{pmatrix} + % x \\ y \\ z \\ 1 + % \end{pmatrix} + % \\ + % p &= K \cdot T[RT] \cdot + % \end{align} \section{OpenCV} \label{sec: opencv} @@ -77,17 +123,15 @@ Informationsweitergabe zwischen diesen und die eben genannte Paketverwaltung und damit verbundene Abstraktion von generischen, allgemein benötigten Funktionen. \cite{ROS:whatsROS} - Für diese Arbeit wird die zweite Version von \gls{ROS} und die aktuelle Distribution \gls{ROS Noetic} verwendet. + Für diese Arbeit wird die aktuelle Distribution \gls{ROS Noetic} verwendet. - \todo[inline]{beschreiben:\\wie Arberitet ROS\\Was sind Nodes, Topics, Messages\\was nutzen wir hier?} + \ - \section{Der JetBot Roboter} + \todo[inline]{beschreiben:\\wie Arberitet ROS\\Was sind Nodes, Topics, Messages\\was nutzen wir hier?} - \begin{figure} - \includegraphics[width=.6\textwidth]{img/jetbot_render_800x630.png} - \caption{Render eines möglichen Aufbaus \cite{jetbot:github-doc}} - \end{figure} + + \section{Der JetBot Roboter} \label{sec: JetBot} \begin{figure} \includegraphics[width=.6\textwidth]{img/jetbot_sparkfun.jpg} @@ -113,4 +157,4 @@ Mit ROS-Core und laufendem Kameratreiber $\approx38\,\percent$ - \section{Aufgebaute Anlage} \label{sec: anlgae} + % \section{Aufgebaute Anlage} \label{sec: anlgae} diff --git a/svg/PAP_generisch_markerdetektion.svg b/svg/PAP_generisch_markerdetektion.svg new file mode 100644 index 0000000000000000000000000000000000000000..3056fbf9615ef8fdff5485855fd979c26c3b9fc9 --- /dev/null +++ b/svg/PAP_generisch_markerdetektion.svg @@ -0,0 +1,286 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + width="65.477997mm" + height="85.584579mm" + viewBox="0 0 65.477997 85.584579" + version="1.1" + id="svg5" + inkscape:version="1.2.1 (9c6d41e410, 2022-07-14)" + sodipodi:docname="PAP_generisch_markerdetektion.svg" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <sodipodi:namedview + id="namedview7" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:showpageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="0" + inkscape:deskcolor="#d1d1d1" + inkscape:document-units="mm" + showgrid="false" + inkscape:zoom="2.3786088" + inkscape:cx="56.755865" + inkscape:cy="211.46815" + inkscape:window-width="1920" + inkscape:window-height="1017" + inkscape:window-x="1912" + inkscape:window-y="-8" + inkscape:window-maximized="1" + inkscape:current-layer="layer1" /> + <defs + id="defs2" /> + <g + inkscape:label="Ebene 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-113.24405,-28.687072)"> + <g + id="g10493-8" + transform="translate(21.670614,-2.750652)" + style="display:inline"> + <path + style="fill:#000000;stroke:none;stroke-width:0.205976px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 125.03972,42.516502 -0.72728,2.00542 -0.72727,-2.00542 h 0.72727 z" + id="path4703-3" + sodipodi:nodetypes="ccccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.256;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" + d="m 124.31244,40.511082 v 2.00542" + id="path20429" + sodipodi:nodetypes="cc" /> + </g> + <g + id="g20461" + transform="translate(21.670614,13.106106)" + style="display:inline"> + <path + style="fill:#000000;stroke:none;stroke-width:0.205976px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 125.03972,42.516502 -0.72728,2.00542 -0.72727,-2.00542 h 0.72727 z" + id="path20457" + sodipodi:nodetypes="ccccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.256;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" + d="m 124.31244,40.511082 v 2.00542" + id="path20459" + sodipodi:nodetypes="cc" /> + </g> + <g + id="g10487" + transform="translate(21.670614,24.914687)"> + <rect + style="fill:none;fill-opacity:0.74902;fill-rule:evenodd;stroke:#1b5e20;stroke-width:0.5;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1" + id="rect8556" + width="17.146717" + height="8.5733585" + x="115.73907" + y="4.0223846" + ry="4.2866793" + rx="4.2866793" /> + <text + xml:space="preserve" + style="font-size:3.88056px;line-height:1.25;font-family:Arial;-inkscape-font-specification:Arial;letter-spacing:0px;word-spacing:0px;fill:#000000;stroke-width:0.264583" + x="124.23948" + y="9.6970081" + id="text8560"><tspan + sodipodi:role="line" + id="tspan8558" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583" + x="124.23948" + y="9.6970081">Bild</tspan></text> + </g> + <g + id="g20450" + transform="translate(21.670614,15.906322)"> + <rect + style="fill:none;fill-opacity:0.74902;fill-rule:evenodd;stroke:#0d47a1;stroke-width:0.5;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1" + id="rect8562" + width="64.977997" + height="11.345918" + x="91.823441" + y="26.114948" + rx="0" + ry="0" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.88056px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial Bold';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.264583" + x="124.35886" + y="30.75145" + id="text9354"><tspan + sodipodi:role="line" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;text-anchor:middle;stroke-width:0.264583" + x="124.35886" + y="30.75145" + id="tspan20431">Aufbereitung:</tspan><tspan + sodipodi:role="line" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;text-anchor:middle;stroke-width:0.264583" + x="124.35886" + y="35.60215" + id="tspan5074">Schwarzweiß umwandeln / Filtern</tspan></text> + </g> + <g + id="g5080" + transform="translate(21.670614,28.96286)" + style="display:inline"> + <path + style="fill:#000000;stroke:none;stroke-width:0.205976px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 125.03972,42.516502 -0.72728,2.00542 -0.72727,-2.00542 h 0.72727 z" + id="path5076" + sodipodi:nodetypes="ccccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.256;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" + d="m 124.31244,40.511082 v 2.00542" + id="path5078" + sodipodi:nodetypes="cc" /> + </g> + <g + id="g5090" + transform="translate(21.670614,47.619834)"> + <rect + style="fill:none;fill-opacity:0.74902;fill-rule:evenodd;stroke:#0d47a1;stroke-width:0.5;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1" + id="rect5082" + width="36.262444" + height="11.345918" + x="106.18121" + y="26.114948" + rx="0" + ry="0" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.88056px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial Bold';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.264583" + x="124.42139" + y="30.365856" + id="text5088"><tspan + sodipodi:role="line" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;text-anchor:middle;stroke-width:0.264583" + x="124.42139" + y="30.365856" + id="tspan5086">Features</tspan><tspan + sodipodi:role="line" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;text-anchor:middle;stroke-width:0.264583" + x="124.42139" + y="35.216557" + id="tspan5143">verknüpfen</tspan></text> + </g> + <g + id="g5139"> + <g + id="g20455" + transform="translate(21.670614,20.802758)"> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.88056px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial Bold';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.264583" + x="124.40149" + y="41.689034" + id="text20445"><tspan + sodipodi:role="line" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;text-anchor:middle;stroke-width:0.264583" + x="124.40149" + y="41.689034" + id="tspan21193">Features </tspan><tspan + sodipodi:role="line" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;text-anchor:middle;stroke-width:0.264583" + x="124.40149" + y="46.539734" + id="tspan5094">Identifizieren</tspan></text> + </g> + <rect + style="fill:none;fill-opacity:0.74902;fill-rule:evenodd;stroke:#0d47a1;stroke-width:0.5;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1" + id="rect5082-1" + width="36.262444" + height="11.345918" + x="127.98825" + y="57.878029" + rx="0" + ry="0" /> + </g> + <g + id="g5149" + transform="translate(21.670614,44.819618)" + style="display:inline"> + <path + style="fill:#000000;stroke:none;stroke-width:0.205976px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 125.03972,42.516502 -0.72728,2.00542 -0.72727,-2.00542 h 0.72727 z" + id="path5145" + sodipodi:nodetypes="ccccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.256;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" + d="m 124.31244,40.511082 v 2.00542" + id="path5147" + sodipodi:nodetypes="cc" /> + </g> + <g + id="g5159" + transform="translate(21.670614,63.476592)"> + <rect + style="fill:none;fill-opacity:0.74902;fill-rule:evenodd;stroke:#0d47a1;stroke-width:0.5;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1" + id="rect5151" + width="45.571644" + height="11.345918" + x="101.52661" + y="26.114948" + rx="0" + ry="0" /> + <text + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:3.88056px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial Bold';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.264583" + x="124.44033" + y="30.728712" + id="text5157"><tspan + sodipodi:role="line" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;text-anchor:middle;stroke-width:0.264583" + x="124.44033" + y="30.728712" + id="tspan5155">Verbesserung mit</tspan><tspan + sodipodi:role="line" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;text-anchor:middle;stroke-width:0.264583" + x="124.44033" + y="35.579411" + id="tspan5163">weiteren Informationen</tspan></text> + </g> + <g + id="g5221" + transform="translate(21.670614,60.676376)" + style="display:inline"> + <path + style="fill:#000000;stroke:none;stroke-width:0.205976px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 125.03972,42.516502 -0.72728,2.00542 -0.72727,-2.00542 h 0.72727 z" + id="path5217" + sodipodi:nodetypes="ccccc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.256;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1" + d="m 124.31244,40.511082 v 2.00542" + id="path5219" + sodipodi:nodetypes="cc" /> + </g> + <g + id="g5229" + transform="translate(21.670614,101.42591)"> + <rect + style="fill:none;fill-opacity:0.74902;fill-rule:evenodd;stroke:#b71c1c;stroke-width:0.5;stroke-linecap:round;stroke-dasharray:none;stroke-opacity:1" + id="rect5223" + width="23.739723" + height="8.5733585" + x="112.44257" + y="4.0223846" + ry="4.2866793" + rx="4.2866793" /> + <text + xml:space="preserve" + style="font-size:3.88056px;line-height:1.25;font-family:Arial;-inkscape-font-specification:Arial;letter-spacing:0px;word-spacing:0px;fill:#000000;stroke-width:0.264583" + x="124.23948" + y="9.6970081" + id="text5227"><tspan + sodipodi:role="line" + id="tspan5225" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Arial;-inkscape-font-specification:Arial;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583" + x="124.23948" + y="9.6970081">Ergebnis</tspan></text> + </g> + </g> +</svg>