HMI / GUI-Frameworks OpenCV und Qt Quick - ein Einstieg

Mit OpenCV und Qt Quick trifft Computer Vision auf moderne HMI-Entwicklung. Zur Interoperabilität müssen allerdings die verschiedenen API-Schnittstellen abgeglichen werden. Wir geben einen Überblick.

Egal, ob beim automatischen Briefsortieren, beim Erkennen von Materialfehlern in der Produktion oder bei autonomen Fahrzeugen: überall dort, wo Maschinen ihre Umwelt adaptieren müssen, findet Computer Vision Einsatz. OpenCV ist ein populäres Open-Source-Framework, das dem Entwickler eine Sammlung von Bildverarbeitungs-Algorithmen zur Hand gibt: das Repertoire reicht von klassischen Filtern zum Detektieren von Kanten bis hin zu modernen Verfahren des maschinellen Lernens mit künstlichen neuronalen Netzen - OpenCV integriert bereits die Elementarbausteine zur Entwicklung einfacher Anwendungen.

Beispielsweise unterstützt es beim Einlesen von Videostreams und Bildern in gängigen Formaten und bei der Ausgabe von Ergebnissen, etwa beim Markieren interessanter Merkmale oder beim Zeichnen von Konturen. Dies ist für Prototypen-Entwicklung meistens völlig ausreichend, häufig ist das Ziel aber OpenCV in komplexere Applikationen einzubinden. Sowohl im Umfeld von Desktop- als auch Embedded-Anwendungen ist Qt eine beliebte Wahl zur Umsetzung komplexer Anwendungen. Innerhalb von Qt bietet Qt Quick mit der Sprache QML einen eleganten Ansatz um attraktive, individuelle Benutzeroberflächen umzusetzen.

QML als deklarative Sprache reduziert den Programmieraufwand und erlaubt die schnelle Anwendungsentwicklung - selbst bei aufwendigen HMIs. Die QML-Programmlogik wird mit JavaScript implementiert und kann bei Bedarf mit C++ erweitert werden. Bei der QML-Programmierung steht dem Entwickler die gesamte Qt-Infrastruktur zur Verfügung. Qt Quick stellt grafische Primitiven, Animationen und weitere Komponenten bereit, aus denen sich die Benutzeroberflächen zusammensetzen.

Besonders interessant ist der interne Mechanismus mit dem Qt Quick die Oberflächen zeichnet: zunächst wird die hierarchische Beschreibung der in QML aufgebauten Szenen, in eine SceneGraph genannte Datenstruktur, überführt. Über die Grafik-API OpenGL, oder neuerdings auch über DirectX, wird der SceneGraph hardwarebeschleunigt gerendert. Die geballte Rechenleistung moderner GPUs ermöglicht damit flüssige, performante und gleichfalls aufwendige Benutzeroberflächen. Dies macht sich insbesondere auf eingebetteten Systemen mit eher resourcenbeschränkten Grafikeinheiten bemerkbar.

Unter API-Inspektion von Qt/QML und OpenCV wird schnell klar, dass beide Frameworks unterschiedliche proprietäre Datenstrukturen einsetzen – auch für die Kommunikation von Bildmaterial. Das stellt für das Zusammenspiel der beiden Softwarebibliotheken zunächst eine Hürde dar.
Auch stellt sich die Frage, wie OpenCV-Ergebnisse sinnvoll in den GPU-beschleunigten SceneGraph von Qt Quick integriert werden.

Im Folgenden werden elementaren Grundlagen erarbeitet, um beide Technologien zu kombinieren.