Tutorial

pylon C++ API: Entwicklungszeit deutlich reduzieren

Mit der pylon C++ API sparen Entwickler 80 % Entwicklungszeit bei der Programmierung mit C++ im Vergleich zu anderen SDKs ein. Das Tutorial zeigt auf, wie Sie im pylon Viewer bereits mit wenig Code Kameras ansprechen und für ein schnelles Prototyping mit erster Bildakquise konfigurieren. Wir liefern unterstützende Tools für Konfiguration, Verarbeitung und Optimierung sowie Beispielcode. Ihr fertiggestellter Code ist – wegen derselben API – einfach auf andere Betriebssysteme übertragbar.

  • Lesedauer: ca. 9 Minuten

Hinweis

Voraussetzungen

Beachten Sie folgende Punkte, um mit der pylon C++ API schnell produktiv zu arbeiten und die bereitgestellten Beispiele sowie Tools effektiv zu nutzen.

  • Solide Kenntnisse in C++: Die API ist technisch anspruchsvoll und setzt ein gutes Verständnis von C++ sowie objektorientierter Programmierung voraus.

  • Installierte pylon Software (SDK): Enthält die C++ API, Dokumentation, Programmierleitfäden, Tools (z. B. pylon Viewer) sowie zahlreiche Beispielprogramme

  • Unterstütztes Betriebssystem: pylon ist plattformübergreifend verfügbar (Windows, Linux, Linux ARM, macOS), sodass eine entsprechende Entwicklungsumgebung eingerichtet sein sollte.

  • Zugriff auf kompatible Kamera-Hardware (optional, aber empfohlen): Für praktische Übungen und Tests ist eine unterstützte Kamera hilfreich, jedoch nicht zwingend für die ersten Schritte.

Hilfestellungen und Beispielcode

Der pylon Viewer für Entwicklung und Debugging:

  • Anzeige aller Kameraparameter inklusive ihrer Eigenschaften und aktuellen Werte

  • Kontext-Hilfe: Rechtsklick Parameter → Get HelpProduktdokumentation → kopierbarer kompletter Code

Zusätzlich finden Sie im Help-Menü:

  • C++ Programmer’s Guide – Ihr Entwicklungsassistent für verschiedene Programmiersprachen

  • pylon SDK Samples Manual mit detaillierten Beschreibungen verfügbarer Beispielcodes für Kameraparameter und typischer Use Cases; einfache Übernahme des Codes in die eigene Anwendung

C++ SDK-Beispiele zu den Kameraparametern für schnelle Ergebnisse und zum Weiterverwenden in der eigenen Anwendung.
C++ SDK-Beispiele zu den Kameraparametern für schnelle Ergebnisse und zum Weiterverwenden in der eigenen Anwendung.

pylon C++ API-Architektur

Die pylon C++ API besteht aus mehreren Modulen:

  • pylon Instant Camera Classes: Zentrales Element der API → Zugriff auf Kameraobjekt und -funktionalitäten sowohl für eine Kamera als auch Multi-Kamerasysteme (Instant Camera Array Classes)

  • Event Handler Classes: Kameras mit wenig Code konfigurieren, erfasste Bilder verarbeiten und Kamera-Events anzeigen

  • GenICam Implementierung: Anzeige aller aktuellen Features einer Kamera in pylon

  • Transport Layer: Verbindung zu pylon Treibern → Kameras erfassen, Kameraobjekte erstellen

    • Allgemeiner Transport Layer Factory

    • Spezifische, schnittstellenbezogene Transport Layer

  • Utility Classes für Handhabung der Bilder: anzeigen und anhand einer Zeile Code speichern, Pixelformate umwandeln, Encoder für Video-Aufnahmen nutzen und Bilder dekomprimieren

Die pylon C++ API besteht aus mehreren Modulen
Aufbau der pylon C++ API

GenICam Features in pylon nutzen

Die Funktionalität jeder unserer Kameras ist in einer (oder mehreren) GenICam XML-Datei mit 400 bis 500 Features beschrieben.

Beim Öffnen der Kamera lädt pylon diese XML-Dateien automatisch auf den PC und erzeugt daraus dynamisch eine Feature Map (INodeMap). Diese stellt alle von der Kamera unterstützten Features strukturiert zur Verfügung – für einen standardisierten Zugriff.

Zentraler Kamerazugriff mit Instant Camera Classes

Anhand der zwei Kameraklassen greifen Sie über das Kameraobjekt auf die Kamerafunktionalitäten zu, wie z.B. Bildaufnahme, Kameraparameter, Kameraverbindung und Puffer-Handling. Dazu müssen Sie keine Parameter setzen. Mit lediglich einer Zeile Code erhalten Sie ein erstes Bild. Multi-Kamerasysteme werden über ein einzelnes Kamera Array-Objekt (CInstantCameraArray) unterstützt.

CInstantCamera

  • Vollständig generische Klasse basierend auf GenICam, Grundlage des pylon Viewers

  • Kennt weder konkrete Kameraschnittstellen noch -parameter

  • Kameraparameter werden über eine dynamische INodeMap angesprochen

  • Funktioniert mit allen Kameras, Schnittstellen und Parametern

Vorteile: Benötigt weniger pylon Updates, zukunftssicher bei neuen Schnittstellen oder Kameratypen

Nachteile: Aufwändigere Programmierung, höhere kurzfristige Entwicklungskosten

CBaslerUniversalInstantCamera

  • Wird mit jedem pylon Release generiert und aktualisiert → basiert auf aktuellen GenICam XML-Dateien aller Basler Kameras

  • Kennt und unterstützt die aktuellen Basler Kameras, Schnittstellen und Parameter

  • Parameterzugriff nativ über die Klasse

  • Einfachere Kamerakonfiguration durch statische API (statische Member für Kameraparameter) und IDE Auto-Completion

Vorteile: Prototyping und Kamerakonfiguration durch direkten Parameter-Zugriff einfacher und schneller, geringerer Entwicklungsaufwand

Nachteil: Regelmäßige pylon Updates für neue Features

Beispielcode für erste Bildakquise

Verfolgen Sie im Video, wie Sie mit wenigen Zeilen Code alle Einstellungen erledigen, um erste Bilder mit einer Kamera und Multi-Kamerasystemen zu erfassen:

  • Kameras erfassen, öffnen und konfigurieren

  • Puffer automatisch verwalten

  • Mehrere Kameras über ein einzelnes Kameraobjekt ansprechen

Weitere Informationen und Codebeispiele enthält der C++ Programmer's Guide.

Transport Layer für Kameraerfassung

Anhand des generischen und der spezifischen Transport Layer lassen sich Kameras erfassen und Kameraobjekte erstellen. Um auf Kameraparameter zuzugreifen, gibt es die zwei oben beschriebenen Wege über die beiden Instant Camera Classes.

Transport Layer Factory (CTlFactory)

  • Generischer Einstiegspunkt

  • Kameras schnittstellenunabhängig erfassen

  • Spezifische Transport Layer erstellen

  • Kameraobjekte als pylon Devices erstellen

Transport Layers (ITransportLayer)

  • Schnittstellenspezifische Transport Layer (z. B. GigE Vision)

  • Kameras für eine bestimmte Schnittstelle erfassen

  • Kameraobjekte als pylon Devices für den bestehenden Transport Layer erstellen

  • Schnittstellenspezifische Parameter abrufen (z. B. GigE Action Commands)

Beispielcode für Kameraerfassung

Im Video lernen Sie, wie Sie mit wenig Code Kameras mit unterschiedlichen Techniken erfassen und ein Kameraobjekt erstellen, sowohl mit dem generischen als auch spezifischen Transport Layer.

Es ist auch möglich, Kameras über ihre IP-Adresse (GigE), User-ID oder Seriennummer zu erfassen.

Weitere Informationen und Codebeispiele enthält der C++ Programmer's Guide.

Generischer Parameter-Zugriff
(CInstantCamera)

  • INodeMap laden und daraus die Nodes (= Kameraparameter) erstellen

  • Flexibel und zukunftssicher bei Integration neuer Schnittstellen und Funktionen

  • Eigenaufwand bei der Suche nach Parameterinformationen und -eigenschaften

  • Integrierte Hilfefunktionen verringern den zu erstellenden Quellcode

Nativer Parameter-Zugriff
(CBaslerUniversalInstantCamera)

  • Direkter Zugriff auf bekannte Kameraparameter (davor Kamera öffnen)

  • Kein Erzeugen von INodeMaps erforderlich

  • Schneller und einfacher Einstieg

Beispielcode für Kameraparameter

Das Video erläutert den Zugriff auf die Kameraparameter über den generischen und nativen Ansatz mit Beispielcode.

Weitere Informationen und Codebeispiele enthält der C++ Programmer's Guide.

Event Handler und Utility Classes

Die Event Handler dienen dazu, Kameras mit wenig Code zu konfigurieren, die erfassten Bilder zu verarbeiten und Kamera-Events anzuzeigen.

Die Utility Classes nehmen vielfältige Aufgaben wahr. Drei Klassen stellen wir Ihnen im Video vor.

Event Handler Classes

Die Instant Camera Classes enthalten drei vordefinierte Event-Handler-Klassen.

  • Configuration Handler: Kamerakonfiguration, z.B. Bilderfassungs- oder Trigger-Modi (4 sind vorkonfiguriert: Einzelbild- und kontinuierliche Bilderfassung, Software-Trigger, GigE Action Commands)

  • Image Event Handler: Verarbeiten der erfassten Bilder

  • Camera Event Handler: Anzeige von Kamera-Events, z.B. Ende der Belichtung

Das Video zeigt Ihnen, wie mit wenig Code die Konfiguration einer Kamera gelingt.

Die Configuration Handler lassen sich für vergleichbare Anwendungsfälle wiederverwenden. Da sie als Header-Dateien bereitgestellt werden, können Sie den Code einfach kopieren und ändern, um Ihre eigenen Configuration Handler zu erstellen, z. B. für Hardware-Trigger.

Utility Classes

CPylonImage

  • Puffer automatisch verwalten (Größe, Lebensdauer)

  • Eigene oder externe Puffer verwenden

  • Gängige Bildformate speichern oder laden (BMP, TIFF, JPG, PNG, RAW)

  • 2D-Bilder und Region of Interests (z.B. Thumbnail von Defekten) einfach bearbeiten

CFeaturePersistence

  • Komplette Kamerakonfiguration speichern und einfach in andere Kameras laden

CVideoWriter

  • MPEG-4-Videos mit wenig zu erstellendem Quellcode aufnehmen

  • Erfasste Bilder (Bildsequenzen) in eine Videodatei schreiben

Im Video stellen wir Ihnen drei Utility Classes vor. Informationen zu den übrigen Klassen finden Sie in den SDK-Beispielen (Aufruf im Help-Menü).

Demo: pylon Visual Studio-Projekt aufsetzen

In der Demo erfahren Sie, wie Sie ein pylon Visual Studio-Projekt von Grund auf aufsetzen:

  • Eine Kamera (oder Kamera-Emulation) finden, öffnen und konfigurieren

  • Bilder erfassen, anzeigen und speichern in nur fünf Minuten

Der C++ Programmer’s Guide (Aufruf im Help-Menü) begleitet Sie dabei Schritt für Schritt.

Weiterführende Informationen

Wie können wir Sie unterstützen?

Wir beraten Sie gerne bei der Produktauswahl und finden die richtige Lösung für Ihre Anwendung.