Rapid Prototyping mit HALCON Embedded: Codes lesen mit dem Raspberry Pi und einer IDS Kamera

Rapid Prototyping

Codes lesen mit dem Raspberry Pi und einer IDS Kamera

Das Lesen von Codes, wie QR, Atztec, ECC200, lässt sich zum Bespiel mit HALCON sehr leicht realisieren. HDevelop beinhaltet dazu einige Beispielskripte. Doch wie bekommen Sie diese Aufgabe auf einem Embedded Board zum Laufen und reicht die Performance der Embedded CPU dafür aus? Dieser Anwendungshinweis zeigt Ihnen Schritt für Schritt, wie Sie vorgehen, um einen einfachen Embedded Codeleser mit bereits vorliegenden Komponenten „zusammenbauen“ und Performancevergleiche mit einem Desktop-PC ziehen können.

Die Verwendung der HALCON Skript-Engine (HDevEngine) hat den Vorteil, dass Bildverarbeitungs-Skripte auf allen Plattformen verwendbar sind und die Bildverarbeitung damit plattformunabhängig und zudem über HDevelop erweiterbar bleibt. HALCON Skripte werden auf einem Entwicklungs-PC in HDevelop erstellt und auf dem Embedded Board über das bereits vorhandene Tool hrun ausgeführt. Dadurch müssen Sie bei diesem Ansatz selbst keinen Anwendungscode cross-kompilieren.

HALCON Embedded installieren

Kopieren Sie das HALCON Embedded „Runtime“ Paket und entpacken Sie es 1:1 in einen Pfad auf der Zielplattform der als HALCONROOT dient. (z.B. unter /opt/halcon)

> sudo tar -xvf <paket> -C /opt/halcon

Um HALCON im System von Applikationen nutzbar zu machen, müssen ein paar Umgebungsvariablen definiert werden. Legen Sie dazu ein Profile-Script an, setzen Sie die entsprechenden (markierten) Variablen und kopieren Sie es zum Beispiel in Ihren HALCONROOT Ordner. (/opt/halcon/.profile_halcon)

Um das HALCON Environment direkt beim Anmelden zu aktivieren, setzen Sie folgendes Kommando ans Ende der Profildatei Ihres Benutzerordners: ~/.profile

source /opt/halcon/.profile_halcon

HALCON Embedded lizensieren

HALCON Embedded wird über eine Lizenzdatei mit einem zugehörigen USB-Dongle aktiviert. Dieses Lizenzpaar können Sie bei MVTec oder über den IDS Support anfordern. Die Lizensierung können Sie in der Datei /opt/halcon/readme_embedded.txt unter dem Punkt „Licensing“ nachlesen.

  • Kopieren Sie die Lizenzdatei license.dat passend zum Dongle in den Ordner /opt/halcon/license auf dem Zielsystem.
  • Stecken Sie den USB Dongle in einen freien USB Port des Raspberry Pi und prüfen Sie mit dem Kommando dmesg auf der Linux Konsole, ob der Dongle mit der VendorID 1547 erkannt wurde.
  • Danach müssen Sie noch eine UDEV Regel im Linux System anlegen, um allen Prozessen Zugriff auf den Dongle zu gewähren. Legen Sie dazu die Datei /etc/udev/rules.d/98-sglock.rules mit folgendem Inhalt an:
ATTRS{idVendor}=="1547", ATTRS{idProduct}=="1000", MODE="666"
  • Der UDEV Daemon muss jetzt neu gestartet werden, um die neuen Regeln zu aktivieren. Starten Sie dazu entweder den Pi einfach neu oder führen Sie folgendes Kommando für den RELOAD des Dienstes aus:
> sudo /etc/init.d/udev reload
  • Mit dem Tool „hbench“ testen Sie die HALCON Installation. Kommt es zu einem Fehler mit der Nr. 2036 weist dies auf ein Problem mit der Lizensierung hin. Kontrollieren Sie in diesem Fall nochmal die Schritte der Lizensierung.

HALCON Benchmark Tool

HALCON bringt mit dem Tool hbench ein eigenes Benchmark Tool mit, das Prozedur-Analysen auf dem Testsystem durchlaufen und bewerten kann. Es ist in jeder HALCON Installation (<HALCONROOT>/bin/<HALCONARCH>/hbench) für die entsprechende Plattform enthalten.

HALCON Benchmark für Operator find_data_code_2d auf dem Raspberry Pi 3:

pi@raspberrypi:~ $ $HALCONROOT/bin/$HALCONARCH/hbench -operator
find_data_code_2d -reentrant
HALCON 12.0 Benchmark (v3.1)
============================
(computing on images of size 640x480)
OPERATOR reentrant
time[ms]
Data code reading, ecc 200 (byte) ...... 25.481

HALCON Benchmark für Operator find_data_code_2d auf einem Core i7 Windows PC:

C:\Program Files\MVTec\HALCON-12.0\bin\x64-win64\hbench.exe -operator
find_data_code_2d –reentrant
HALCON 12.0.2 Benchmark (v3.1)
==============================
(computing on images of size 640x480)
OPERATOR reentrant
time[ms]
Data code reading, ecc 200 (byte) ...... 4.811

Der Benchmark des HALCON Operators zum Lesen von 2D Codes (ECC200) zeigt deutliche Unterschiede in der Laufzeit auf verschiedenen Plattformen.

Einfaches bildbasiertes Code-Lese Skript

Schon mit einem einfachen QR-Code HALCON-Skript, das Beispielbilder einliest und auf beiden Systemen mittels der HDevEngine ausgeführt wird, können Sie die Unterschiede in der Lese-Performance nachweisen.

Beginnen Sie z.B. mit dem HALCON Beispielskript qrcode_simple.hdev. Sie finden es im Ordner /examples/hdevelop/Applications/Data_Codes/. Erweitern Sie es um eine einfache Zeitmessung des Lesevorgangs und einer Ausgabenachricht.

Nachdem Sie das Skript mit HDevelop getestet haben kopieren Sie es auf den Embedded PC und führen es direkt mit dem Tool hrun aus. Dieses wird mit HALCON Embedded vorkompiliert ausgeliefert. Sie finden es im Ordner <HALCONROOT>/bin/<HALCONARCH>/hRun

pi@raspberrypi:~ $ hrun qrcode_simple.hdev

Die Zeitmessung bestätigt den Performanceunterschied der beiden PC Systeme (links:Windows Desktop Core i7, rechts: Raspberry Pi 3):

Codes lesen mit einer IDS Kamera

DIe HALCON Embedded Installation beinhaltet das Skript datacode.hdev zum Lesen von 2D Codes
Die HALCON Embedded Installation beinhaltet das Skript datacode.hdev zum Lesen von 2D Codes
uEye Kameras inkl. Treiber sind für beide Plattformen verfügbar und identisch anzusprechen
uEye Kameras inkl. Treiber sind für beide Plattformen verfügbar und identisch anzusprechen

Um eine uEye Kamera damit einzusetzen, modifizieren Sie lediglich ein paar Zeilen Code. Sie benötigen nur einen einzigen „framegrabber“-Aufruf für alle Plattformen, anstatt hier zu unterscheiden, da sich die Kameras auf allen Plattformen identisch ansprechen lassen.

Sie können die Skriptzeilen für den Bildeinzug mit einer uEye Kamera auch über den HDevelop Assistenten „Image Acquisition“ einfügen. Wählen Sie dabei als Schnittstelle „uEye“ aus.

Danach ist das Skript sowohl auf Ihrem Desktop-PC als auch auf dem Raspberry Pi lauffähig. Kopieren Sie es auf den Embedded PC und führen es wieder mit dem Tool hrun aus.

pi@raspberrypi:~ $ hrun datacode.hdev

Als Ergebnis erhalten Sie ein Livebild der uEye Kamera. Wenn Sie Datamatrix Codes des Typs ECC 200 vor die Kamera halten, wird HALCON die Codes für Sie dekodieren und das Ergebnis anzeigen.

Ihr einfacher Embedded Codeleser ist damit funktionsbereit.

Anhang

Sourcecode „datacode.hdev“

Modifizierter Code des Skripts datacode.hdev, um die Codes mit einer uEye Kamera zu lesen. Die wichtigste Änderung ist eingefärbt. Um das Skript zu verwenden, kopieren Sie es in HDevelop und speichern es als „datacode.hdev“.