MVTec Software GmbH
 

Programmierung mit HALCON

HALCON bietet verschiedene Sprachschnittstellen an, um alle der über 2000 leistungsstarken Operatoren aus Programmiersprachen wie C, C++ und .NET-Sprachen wie C# oder VB.NET aufrufen zu können. Seine offene Software-Architektur bietet den Zugriff auf dedizierte Datenstrukturen an und erlaubt so die einfache Integration mit anderen Softwarekomponenten wie einer Benutzeroberfläche oder der Prozesssteuerung. So enthält HALCON auch ein leistungsstarkes Plugin für Visual Studio.

Darüber hinaus unterstützt die Software parallele Programmierung, z.B. mehrerer Threads. Dadurch können mehrere Threads gleichzeitig HALCON-Operatoren aufrufen. All dies, zusammen mit HALCONs eingebautem High-Performance-Speichermanagement ermöglicht es dem Programmierer, sich auf die Applikationsentwicklung zu konzentrieren und schnell eine Lösung zu erreichen.

Screenshot: Visual Studio: Debuggen von HALCON-Variablen
HALCON-Variablen können direkt in Visual Studio inspiziert werden

HALCON/.NET

In HALCON/.NET sind alle HALCON-Operatoren und Datenstrukturen als High-Level-Klassen verfügbar, welche die Entwicklung einer Applikation deutlich vereinfachen. HALCON/.NET kann in .NET-Sprachen wie C#, Visual Basic .NET und C++ unter Windows sowie mithilfe von Mono auch unter Linux verwendet werden.

Mit nur wenigen Zeilen C#-Code können Sie eine komplette Anwendung erstellen, um z.B. Barcodes zu lesen.

private void timerCycle_Tick(object sender, System.EventArgs e) 
{ 
   HTuple results; 

 

   // Create instance of reader without special parameters 
   HBarCode reader = new HBarCode(new HTuple(), new HTuple()); 

 

   // Acquire next image 
   HImage image = acquisition.GrabImage(); 

 

   // Find and decode bar codes of type EAN 13 
   HRegion regions = reader.FindBarCode(image, "EAN-13", out results); 

 

   if (results.Length > 0) 
   { 

 

      // Display image and bar code regions in graphics window 
      window.DispImage(image); 
      window.DispRegion(regions); 

 

      // Display decoded result of first found bar code in a text box 
      textBoxCode.Text = results[0]; 
   } 
   else 
   { 
      textBoxCode.Text = "Not found!"; 
   } 

 

   // Cleanup (could also be done using the garbage collector) 
   regions.Dispose(); 
   image.Dispose(); 
   reader.Dispose(); 
}

HALCON/C++

Mit HALCON/C++ kann die gesamte Funktionalität von HALCON über eine C++-Klassenhierarchie angesprochen werden. Diese ermöglicht es, Programme zu entwickeln, die sehr kompakt und leicht zu warten sind. HALCON/C++ steht unter Windows, Linux und macOS zur Verfügung.

HDevelop

Wenn Sie Ihre Lösung mit Hilfe der Rapid-Prototyping-Umgebung HDevelop entwickeln, ist die Integration sehr einfach, denn HDevelop lässt Sie Ihre Anwendung als C++, C, C# oder Visual Basic Quelltext exportieren. Darüber hinaus können Sie mit der HDevEngine Ihren Bildverarbeitungsprogrammcode unkompliziert in Ihre Anwendung integrieren.

HDevEngine

Die „HDevelop Engine“ ist eine Bibliothek, die als Interpreter fungiert und es möglich macht, HDevelop-Programme und -Prozeduren direkt aus einer Applikation in C++, C# oder Visual Basic heraus zu laden und auszuführen. Damit lässt sich der Bildverarbeitungsteil einer Applikation ändern, ohne ihn erneut kompilieren zu müssen.

Dictionaries

Um die Arbeit mit komplexen Daten zu erleichtern, bietet HALCON die Datenstruktur "Dictionary". Dieses assoziative Array ermöglicht es u. a. verschiedene komplexe Datentypen (wie z. B. Bilder, enstprechende ROIs und Parameter) in einer einzigen Variable zu bündeln. Dadurch kann man Programme ganz einfach strukturieren, wenn z. B. viele Parameter an eine Prozedur übergeben werden müssen.

Dictionaries können auch aus einer Datei gelesen und in eine Datei geschrieben werden. Damit kann ein Entwickler alle Informationen, die für die Reproduktion des Zustands einer bestimmten Anwendung notwendig sind (z.B. Einstellungen der Kamera-Kalibrierung, fehlerhafte Bilder und Maschi­nen­para­meter), in einer einzigen Datei zusammenfassen. Diese Datei kann dann problemlos an einen Bild­verarbeitungs­experten für Offline-Debugging weitergegeben werden.

Parallelprogrammierung

HALCON unterstützt nicht nur Multithreading und Parallelprogrammierung, sondern bietet darüber hinaus auch automatische Parallelisierung zur optimalen Ausnutzung von Mehrkern- und Mehrprozessor-Hardware. Lesen Sie hier mehr über die Multicore-Performance von HALCON.

Automatische Freigabe von Handles

HALCON gibt Handles automatisch frei, sobald diese nicht mehr benötigt werden. Dadurch wird das Risiko Speicherlecks zu erzeugen deutlich reduziert, da ungenutzter Speicher nicht mehr manuell freigeben werden muss. Auch das Schreiben von "sicherem Code" wird dadurch wesentlich vereinfacht.

Debugging – leicht gemacht

HALCON reduziert den Aufwand zur Fehlersuche bei der Softwareentwicklung enorm. Dank HALCONs Visual Studio Extension können C++ und C#/.NET Entwickler HALCON-Tupel und ikonische Variablen direkt in Visual Studio überprüfen.

Werden HDevelop-Prozeduren über die HDevEngine innerhalb einer C# oder C++ Anwendung ausgeführt, ist das Debugging des Bildverarbeitungsteils durch Verknüpfung mit der HDevEngine direkt in HDevelop möglich. Dies funktioniert auch über Remote-Verbindungen.

Know-how – gut geschützt

HALCON sichert das Know-how des Programmierers: Code, der in externen oder lokalen HDevelop-Prozeduren gespeichert wird, sowie der Code kompletter Prozedurbibliotheken oder ganzer Programme kann auf Wunsch durch ein Passwort geschützt werden. Somit lässt sich Funktionalität leicht weitergeben, ohne den Programmcode preiszugeben.