Embedded Computer Vision
Image Streaming und Bildverarbeitung mit Single Board Computer (SBC)
Embedded Computer Vision
Der Single Board Computer (SBC) ist auf einer kleinen Einzelplatine aufgebaut, die entweder nur für sehr spezialisierte Aufgabe ausgelegt oder mit einem kompletten Betriebssystem ausgestattet sein kann, das u.a. auch übliche Schnittstellen wie HDMI, LAN oder USB unterstützt. Besonderheit der SBC ist, dass sie in der Regel über sog. GPIO Pins verfügen, die zur Steuerung von externen Geräte verwendet werden können.
Die Rechenleistung der neuesten Gerätegeneration ist inzwischen so beachtlich, dass Bildverarbeitung auch während des Image Streamings bei laufender Kamera oder im getriggerten Betrieb möglich ist. Hieraus ergeben sich ganz neue Anwendungsfelder in einer räumlich beengten Umgebung und in Situationen, in denen keine längeren Kabelverbindungen zwischen Rechner und Kamera erwünscht oder möglich sind. Nicht zuletzt sind Single Board Computer deutlich preiswerter als herkömmliche Rechner.
Computer Vision beinhaltet Bildverarbeitung etwa zur Produktionskontrolle oder Prozess-Steuerung. Dazu ist neben Hardware entsprechende Software mit den jeweils benötigten Algorithmen erforderlich. Ein System aus Kamera und Single Board Computer zum Zwecke der Bildverarbeitung wird gerne als Embedded Computer Vision oder kurz Embedded Vision bezeichnet.
Wir, die PHASE GmbH, haben nun ein handliches, flexibel einsetzbares und dazu kostengünstiges Embedded Vision-System als vorkonfigurierten und sofort einsatzbereiten Starter Kit zusammengestellt.
Starter Kit | |
---|---|
Single Board Computer Odroid XU4: |
|
Bildverarbeitungssoftware: | ImageJ, OpenCV f. Java (beides lizenzfrei) |
Kamerasteuerungssoftware: | als Plugin f. ImageJ/Java |
Kamera: |
USB3-Kameras von Basler oder PointGrey/Flir (nahezu alle USB-Modelle dieser Hersteller), inkl. 3 m USB3-Kabel, zur Kameraauswahl |
Option: | Objektiv, C-Mount |
Weiter Infos
Screen Video zeigt ImageJ-Kamera-Plugin in Aktion (aufgenommen auf PC)
Download auch unter https://www.phase-hl.com/video/IJ_Plugin_de.mp4
- ImageJ
- Entwicklung von Bildverarbeitungsprozeduren/GPIO
- OpenCV und ImageJ
- Kamera-Einbindung in ImageJ und Java
- Link-Liste
ImageJ
ImageJ ist ursprünglich für die wissenschaftliche Bildverarbeitung in der Mikroskopie entwickelt worden, wird aber heutzutage für alle denkbaren Bildverarbeitungsaufgaben in Wissenschaft und Technik eingesetzt (z.B. Medizin, Astronomie, Luftbildauswertung, Materialprüfung). Es enthält von Hause aus eine Vielzahl von Bildverarbeitungsoperatoren, Filtern und Algorithmen darunter auch solche zur Vermessung und Zählung von Objekten. Weitere können selbst entwickelt oder aus einem riesigen Funds von fertigen Modulen als Plugins bequem nachgerüstet werden. Alle Bildverarbeitungsschritte lassen sich über ein graphisches User Interface ausführen und deren Wirkung direkt in einem oder mehreren Bildfenstern oder Image Stacks darstellen, ohne irgendeine Code-Zeile selbst eingeben zu müssen. Die Bildverarbeitung in ImageJ ist spielend automatisierbar, da mit Hilfe eines Befehls-Recorders alle per Maus oder Tastaturauswahl getätigten Anweisungen aufgezeichnet und gespeichert werden können (Macro-Datei). Der Aufruf eines solchen gespeicherten Macros bewirkt dann die automatische Ausführung aller einstmals aufgezeichneten Bildverarbeitungsschritte ohne weiteren Eingriff. ImageJ ist also hervorragend geeignet, auf komfortable Weise Lösungen für Bildverarbeitungsaufgaben zu erarbeiten und zu implementieren.
Entwicklung von Bildverarbeitungsprozeduren und GPIO-Programmierung für Single Board Computer
ImageJ ist Java-Software. Bildverarbeitungsaufgaben können direkt in der Umgebung von ImageJ als Macro (in eigener Macro-Sprache, Javascript oder Python) oder Plugin (Java) entwickelt werden. Natürlich ist dies auch unter einer IDE wie Netbeans oder Eclipse als ImageJ-Projekt sehr komfortabel auf dem Odroid selbst oder einem PC möglich. Im letzteren Fall kann der entstandene Code einfach per Copy/Paste auf den Ordoid übertragen werden, ohne dass irgendwelche Anpassungen notwendig wären. Für die Programmierung der GPIO-Pins gibt es eine Java-Bibliothek GPIO Java_Bibliothek f. Ordroid XU4 , so dass komplexe Aufgabenstellungen, die neben der Bildverarbeitung auch Hardwaresteuerungesaufgaben umfassen, in einem gemeinsamen Projekt idealerweise unter einer Java IDE entwickelt werden können.
Für Anwendungen im technischen Umfeld kann ein graphisches User Interface für die Bildverarbeitung störend oder unerwünscht sein. Tatsächlich kann man die Bildverarbeitungsbibliothek von ImageJ auch in spezialisierten Standalone-Java-Anwendungen einsetzen.
OpenCV und ImageJ
OpenCV ist eine freie Bibliothek mit einer großen Anzahl von Bildverarbeitungsalgorithmen implementiert in C/C++, allerdings ohne graphisches User Interface. Programmierkenntnisse sind für den Gebrauch unabdingbar. OpenCV ist immer dann von Vorteil, wenn Bildverarbeitungsprozeduren erforderlich sind, die sehr viel Rechenzeit erfordern. Für OpenCV gibt es Wrapper in den Sprachen Python und Java. Gerade der Java Wrapper kann sehr gut in Kombination mit ImageJ (Java Software!) genutzt werden, wenn z.B. rechenzeitintensive Algorithmen im Umfeld von ImageJ/Java implementiert werden sollen, wie z.B. die Abarbeitung von groß dimensionierten Matrices. Die entsprechenden Berechnungen werden dann in einer kompilierten DLL im Maschinencode durchgeführt (Bestandteil des OpenCV Java Wrappers). Tatsächlich lassen sich Datenobjekte von ImageJ nach OpenCV und umgekehrt recht einfach in Java konvertieren. Bildmaterial kann also über ImageJ an OpenCV übergeben und Ergebnisse wiederum können beispielsweise in der graphischen Umgebung von ImageJ angezeigt werden. Natürlich können aber auch hoch performante Standalone-Applikationen unter dem gemeinsamen Dach von Java mit Objekten aus ImageJ- und OpenCV-Bibliotheken entwickelt werden.
Kamera-Einbindung in ImageJ und Java
ImageJ ist, wie schon erwähnt, Java-Software. Es ist daher eine Art eine Verbindungsschicht zwischen Java und dem Hardwaretreiber der Kamera erforderlich. Die PHASE GmbH hat eine solche Verbindungsschicht für Kameras von Basler und Pointgrey/Flir in Form einer DLL entwickelt basierend auf den Hardwaretreibern Pylon5 bzw. FlyCapture2, die die Kamerasteuerung sowie Live-Bilddarstellung in der Umgebung von ImageJ und allgemein in Java ermöglicht. Auf diese Weise kann der Anwender viele der Bildverarbeitungswerkzeuge von ImageJ direkt auf das Live-Bild anwenden. Es ist auch möglich, einzelne Bilder dem unkomprimierten Image Stream zu entnehmen und in automatisierter Weise einer Bildverarbeitung zu unterziehen. Gleiches gilt natürlich auch für den Bildeinzug per Hardware Trigger. Viele Kamerafunktionen lassen sich auch per Macro ausführen, so dass sich komplexe Bildverarbeitungsaufgaben auch unter Einbeziehung der Kamerasteuerung automatisieren lassen.