Suchen Sie nach einer Lösung, die eine Vision-Kamera beinhaltet? Sie wollen eine leistungsstarke Anwendung, bei der Sie das Sagen haben? Dann sollten Sie einen Blick auf WaveMe werfen. WaveMe ist eine Plattform, die die üblichen Probleme löst, die bei der Entwicklung von Bildverarbeitungsanwendungen auftreten, die Zugang zu High-End-Grafiken benötigen. WaveMe ist für alle, denen Labview zu schwer ist und die eine Anwendung von Grund auf neu schreiben wollen.
Mit diesem Tech-Talk möchte ich ein wenig tiefer in das eintauchen, was WaveMe als generische Programmierumgebung bietet und warum Sie, oder Senslogic, mit sehr wenig Aufwand ein leistungsstarkes Tool bauen können.
Wie macht WaveMe das? WaveMe wurde von Anfang an so konzipiert, dass es grundsätzlich verschiedene Anwendungen mit der Bildverarbeitungskamera als gemeinsame Komponente handhaben kann. Das Herzstück der Plattform ist eine Pipeline, die von einem Pipeline-Manager verwaltet wird, der Module (das ist Ihr Code) mit definierten Eingangs- und Ausgangstypen hinzufügt und entfernt.
Die Pipeline wie auch der Rest der Anwendung basieren auf einem Producer-Consumer-Paradigma. Dies gilt für alles, von Bildern bis zur Speicherzuweisung. Der Produzent ist in der Regel eine Kamera, kann aber alles sein, was Daten erzeugt. Jeder kann ein Produzent in der Pipeline sein. Der (ultimative) Konsument ist ein Compositor, der alle Aufgaben im Zusammenhang mit der Anzeige von Bildern, der Beantwortung von Grafikbefehlen, der Weitergabe von Ereignissen und schließlich der Rückgabe der vom Produzenten zugewiesenen Daten übernimmt, wenn diese nicht mehr benötigt werden. Die einzige Besonderheit des Compositors ist, dass er in einem OpenGL-Kontext läuft, was bedeutet, dass wir Zugriff auf den gesamten Satz von OpenGL-Befehlen haben.
Die Plattform verfügt über eine ganze Reihe vordefinierter Grafikprimitive, wie das Zeichnen von Linien, Polygonen, Kreisen, Fadenkreuzen, das Rendern von Text und sogar die Anzeige von Zernike-Polynomen. Wenn Sie nicht finden, was Ihnen gefällt, können Sie ganz einfach Ihre eigenen hinzufügen. Das ist zwar mit einem gewissen Mehraufwand verbunden, aber wir sind nie durch die Plattform eingeschränkt. Wenn wir es brauchen, steht uns die ganze Pracht von OpenGL zur Verfügung.
Ein WaveMe Modul ist eine Bibliothek, die ihre eigene Benutzeroberfläche mitbringt, ihre Eingabe- und Ausgabetypen definiert und zu einer Live-Pipeline hinzugefügt wird, wenn entsprechende Daten verfügbar sind. Module arbeiten als Filter und sind kooperativ. Sie sehen alle Daten in der Pipeline. Ein Modul erfüllt in der Regel die folgenden Aufgaben,
Beim Schreiben einer vollwertigen GUI-Anwendung gibt es viele Standard-Ereignisse zu behandeln. WaveMe wird mit einer Vorlage geliefert, in der Maus- und Tastaturereignisse vordefiniert sind, so dass sie mit dem Rest der Plattform zusammenarbeiten. Standardmäßig befindet sich Ihre Anwendung in einer Registerkarte neben anderen Modulen. Eines davon ist das Modul, das die Kamera steuert. Wenn Sie die Kamera-Registerkarte auswählen, erwartet WaveMe, dass Module, die derzeit Tastatur- und Mausereignisse verarbeiten, diese loslassen und umgekehrt, wenn die Registerkarte des Moduls ausgewählt wird. All dies wird von der Standardvorlage erledigt. Alles, was wir tun müssen, ist die Änderung des Namens der Vorlage Callback-Funktionen und fügen Sie Ihren eigenen Code, zumindest wenn wir diese Ereignisse zu interagieren wollen.
WaveMe basiert auf GTK4 und glib-2.0 für seine Benutzeroberfläche, und ein Großteil der Art und Weise, wie Module mit der Pipeline interagieren, folgt den von diesen Bibliotheken verwendeten Mustern.
Es wird davon ausgegangen, dass die Kamera einen konstanten Fluss von Bildern liefert und die Module darauf reagieren, indem sie Nachrichten auf der Grundlage dessen erzeugen, was sie sehen. Diese Semantik passt gut zu grafischen Elementen, die eine Eigenschaft jedes Bildes verfolgen.
Dieses Verhalten passt vielleicht nicht zu allem, so dass wir es eventuell ändern müssen. Der Compositor geht davon aus, dass alle Objekte, die er empfängt, persistent sind und dass eine weitere Nachricht mit der gleichen ID nur wenige Millisekunden entfernt ist, es sei denn, man sagt etwas anderes. Es gibt Dinge, die wir vielleicht tun wollen, die nicht auf diese Beschreibung passen. Wenn wir zum Beispiel eine Farbkarte ändern wollen, ist das definitiv eine Nachricht, die keine Nachverfolgung braucht. Für diese Art von Nachrichten müssen wir die Nachricht als einmalig kennzeichnen. Erschießen und vergessen. Der Aktionsteil der Nachricht wird einmal aufgerufen und dann nie wieder.
Eine letzte Sache, die zumindest einmal erwähnt werden sollte: Alle Nachrichten können eine Aufräumfunktion haben, und die Aufräumfunktion läuft im OpenGL-Kontext. Wenn wir einen Blick in den OpenGL-Status werfen und ihn an die Anwendung zurückschicken müssen, ist dies der richtige Ort dafür.
Ich hoffe, dass ich einen kleinen Einblick in die Möglichkeiten von WaveMe gegeben habe. Einige Dinge wurden nicht behandelt, wie z.B. wie wir die Benutzeroberfläche aufbauen, oder zumindest die Teile der Benutzeroberfläche, die spezifisch für WaveMe sind. Vieles davon ist in der Vorlage enthalten, von der alle derzeit für WaveMe verfügbaren Module abgeleitet sind. Die allgemeine Philosophie besteht darin, eine Vorlage zu verwenden, die alle Grundlagen abdeckt, und diese mit den Besonderheiten der einzelnen Anwendungen zu erweitern. Nachdem ich bereits einige davon geschrieben habe, denke ich, dass WaveMe sich zu einer wiederverwendbaren Plattform entwickelt hat, auf der viele Anwendungen schnell aufgebaut werden können. Überlegen Sie es sich. Vielleicht probieren Sie es sogar aus. Sie können mich gerne kontaktieren unter contact@senslogic.de wenn Sie herausfinden möchten, ob WaveMe auch für Sie geeignet ist.
Optische High-End-Lithografie, worum geht es EUV-Lithografie wirkt wie real gewordene Science-Fiction: Spiegel mit atomarer Glätte, Licht...
Intro Die meiste Zeit meiner beruflichen Laufbahn in der Optik habe ich mich mit der Simulation der Abbildung von räumlichen Lichtmodulatoren, vor allem SLMs, beschäftigt...
In diesem Tech-Talk geht es um Technologieentwicklung im Allgemeinen, aber vielleicht noch spezieller um die schrittweise Entwicklung von Technologien. Er ist natürlich beeinflusst von...
Ich schätze, ich bin auf einer Mission, einer Mission, um die Ehrfurcht zu mäßigen, die die Menschen in Bezug auf... zu haben scheinen.
Einleitung Mit diesem technischen Vortrag möchte ich einen Einblick in die Entwicklung eines physikalischen Modellierungsframeworks mit Open...
Offene Tools für das WaveMe Ökosystem Ab heute verlagern wir die WaveMe Templates und den gesamten Open-Source-Code in ein selbstgehostetes...