教學課程

pylon C++ API:大幅縮短開發時間

與其他 SDK 相比,開發者使用 pylon C++ API 以 C++ 開發時,可節省 80% 的開發時間。本教學將示範在 pylon Viewer 中僅以數行程式碼存取相機並進行設定的方法,以快速原型開發並完成初始影像擷取。我們提供設定、處理與最佳化所需的輔助工具,並附範例程式碼。透過使用同一套 API,您完成的程式碼可輕鬆移植到其他作業系統上。

  • 閱讀時間:約 18 分鐘

提示

事前準備

請留意以下幾點,以快速上手 pylon C++ API,並充分發揮所附範例與工具的功效。

  • 扎實的 C++ 基礎:本 API 在技術上具挑戰性,需要對 C++ 與物件導向程式設計有良好的掌握。

  • 已安裝 pylon software (SDK):包含 C++ API、說明文件、開發指南、工具 (例如 pylon Viewer) 與多套範例程式

  • 支援作業系統:pylon 可在多個平台 (Windows、Linux、Linux ARM、macOS) 上使用,建議準備合適的開發環境。

  • 可使用相容的相機硬體 (選用,但建議):有支援的相機可協助實作練習與測試,但入門不一定需要。

說明文件與範例程式碼

用於開發與除錯的 pylon Viewer

  • 顯示所有相機參數,包括其屬性與目前值

  • 快速選單:在 Parameter 上按右鍵 → Get HelpProduct Documentation→ 可複製的 完整程式碼

此外,您可在 Help 選單 中找到下列項目:

  • C++ Programmer's Guide:協助您以多種程式語言進行開發

  • pylon SDK Samples Manual:詳細說明可用的相機參數範例程式碼與典型使用案例;可輕鬆將程式碼整合至您自己的應用程式

用於相機參數的 C++ SDK 範例,可快速得到結果,並可在您自己的應用程式中重複使用。
用於相機參數的 C++ SDK 範例,可快速得到結果,並可在您自己的應用程式中重複使用。

pylon C++ API 架構

pylon C++ API 由多個模組組成:

  • pylon Instant Camera Classes:API 的核心元件 → 提供對相機物件與功能的存取,可用於單相機與多相機系統 (Instant Camera Array Classes)

  • Event Handler Classes:以極少程式碼設定相機、處理擷取到的影像,並顯示相機事件

  • GenICam 實作:在 pylon 中顯示目前所有相機功能

  • Transport Layer:與 pylon 驅動程式的連接 → 列舉相機、建立相機物件

    • 通用 Transport Layer Factory

    • 特定、與介面相關的 Transport Layers

  • Utility Classes (用於處理影像):以單行程式碼顯示與儲存影像、轉換畫素格式、使用編碼器來錄影,以及影像解壓縮

pylon C++ API 由多個模組組成
pylon C++ API 的結構

在 pylon 中使用 GenICam 功能

我們每一款相機的功能都記載於一個(或多個)GenICam XML 檔案中,內含 400 至 500 項功能。

相機開啟時,pylon 會自動將這些 XML 檔案下載到 PC,並動態產生功能對映 (INodeMap) 。這份對映提供結構化、標準化的存取介面,可使用相機支援的所有功能。

透過 Instant Camera Classes 集中存取相機

透過這兩個 camera class,您可以經由相機物件存取相機的各項功能:影像擷取、相機參數、相機連接與緩衝區處理。 您毋需設定任何參數 即可完成。僅以一行程式碼,就能取得您的第一張影像。 多相機系統可透過單一相機陣列物件 (CInstantCameraArray) 支援。

CInstantCamera

  • 完全通用類別,以 GenICam 為基礎,是 pylon Viewer 的基礎

  • 不認識特定的相機介面或參數

  • 相機參數透過動態 INodeMap 存取

  • 可搭配所有相機、介面與參數運作

優點:需要更新 pylon 的次數較少;面對新介面或新相機類型仍能保持相容

缺點:程式撰寫較複雜,短期開發成本較高

CBaslerUniversalInstantCamera

  • 隨每一次 pylon 發行而產生並更新 → 以所有 Basler 相機的最新 GenICam XML 檔案為基礎

  • 可辨識並支援最新的 Basler 相機、介面與參數

  • 原生參數可透過類別存取

  • 透過靜態 API (相機參數的靜態成員 ) 與 IDE 自動完成,可更輕鬆地設定相機

優點:可直接存取參數,原型開發與相機設定更輕鬆、更快速;可降低開發工作量

缺點:新功能需要定期更新 pylon

初始影像擷取的範例程式碼

觀看影片即可了解如何僅以數行程式碼完成所有設定,並使用單一相機或多相機系統擷取第一批影像:

  • 列舉、開啟並設定相機

  • 自動管理緩衝區

  • 透過單一相機物件存取多台相機

更多資訊與程式碼範例,請參閱 C++ Programmer's Guide

用於相機列舉的 Transport Layer

您可以使用通用 Transport Layer 與特定 Transport Layers 來列舉相機並建立相機物件。若要存取相機參數,可透過這兩個 Instant Camera Class 採用上述兩種方法。

Transport Layer Factory(CTlFactory)

  • 通用進入點

  • 列舉相機,不受介面限制

  • 建立特定的 Transport Layers

  • 以 pylon Devices 形式建立相機物件

Transport Layers (ITransportLayer)

  • 特定於介面的 Transport Layers (例如 GigE Vision)

  • 列舉特定介面的相機

  • 為現有的 Transport Layer 建立 pylon Devices 形式的相機物件

  • 取得特定於介面的參數 (例如 GigE Action Commands)

相機列舉的範例程式碼

在本影片中,您將學到如何僅以少量程式碼採用不同技巧列舉相機並建立相機物件,並同時使用通用與特定的 Transport Layer。

您也可以透過 IP 位址 (GigE)、使用者 ID 或序號來列舉相機。

更多資訊與程式碼範例,請參閱 C++ Programmer's Guide

通用參數存取
(CInstantCamera)

  • 載入 INodeMap,並由其建立節點 (即相機參數)

  • 整合新介面與新功能時靈活且具未來相容性

  • 需自行投入心力查詢參數資訊與屬性

  • 內建說明功能可減少需撰寫的原始碼量

原生參數存取
(CBaslerUniversalInstantCamera)

  • 直接存取常用的相機參數 (請先開啟相機)

  • 毋需建立 INodeMap

  • 可快速、輕鬆地開始上手

相機參數的範例程式碼

本影片以範例程式碼說明如何透過通用方式與原生方式存取相機參數。

更多資訊與程式碼範例,請參閱 C++ Programmer's Guide

Event Handlers 與 Utility Classes

Event handlers 用於以極少程式碼設定相機、處理擷取到的影像,並顯示相機事件。

Utility classes 可執行多種任務。本影片將介紹其中三種。

Event Handler Classes

Instant Camera Classes 內建三種預設的 Event Handler Classes。

  • Configuration Handler:相機設定,例如影像擷取或觸發模式(內建 4 種:單張影像擷取、連續影像擷取、軟體觸發、GigE Action Commands)

  • Image Event Handler:處理擷取到的影像

  • Camera Event Handler:顯示相機事件,例如曝光結束

本影片示範如何以少量程式碼順利設定相機。

相似的使用案例可重複使用 Configuration Handlers。由於以標頭檔形式提供,您可直接複製並修改程式碼 以建立自己的 Configuration Handlers,例如硬體觸發用途。

Utility Classes

CPylonImage

  • 自動管理緩衝區(大小、生命週期)

  • 使用自有或外部緩衝區

  • 儲存或載入常見的影像格式 (BMP、TIFF、JPG、PNG、RAW)

  • 可輕鬆編輯 2D 影像與感興趣區域 (例如缺陷縮圖)

CFeaturePersistence

  • 可儲存整套相機設定,並輕鬆載入到其他相機

CVideoWriter

  • 以極少原始碼錄製 MPEG-4 影片

  • 將擷取到的影像 (影像序列) 寫入影片檔案

本影片介紹三種 Utility Classes。其他類別的相關資訊請參閱 SDK 範例 (可從 Help 選單存取)。

示範:建立 pylon Visual Studio 專案

本示範將帶您從零開始建立 pylon Visual Studio 專案:

  • 尋找、開啟並設定相機 (或相機模擬)

  • 擷取、顯示並儲存影像,僅需五分鐘

本示範將透過 C++ Programmer's Guide (可從 Help 選單存取),一步步引導您完成整個流程。

更多資訊

‍您需要什麼支援?

我們樂意提供產品選擇方面的建議,協助您為應用找到合適的方案。