跳轉到內容

SwisTrack/開發者/實施新元件

華夏公益教科書

SwisTrack 是基於元件的,也就是說,處理影像就是按照特定順序呼叫一系列(配置良好的)元件。如果您有一個需要特殊影像處理的應用程式,歡迎編寫您自己的元件。為 SwisTrack 編寫元件比編寫您自己的程式有許多優點

  • 您可以使用現有元件來完成所有不特定於您的應用程式的任務。即使您需要實施非常特殊的演算法,您也可以最有可能使用相機元件來獲取影像。
  • SwisTrack 為您提供了一個 GUI,使您可以輕鬆地視覺化處理結果(甚至中間步驟)。
  • SwisTrack 允許您透過測量元件消耗了多少時間以及允許您設定圈速來測量演算法的效能。
  • 最後但並非最不重要的一點是,您可以輕鬆地與其他 SwisTrack 使用者共享您的元件。


實施元件之前

[編輯 | 編輯原始碼]

在實施元件之前,請考慮演算法的各個步驟。如果您能將影像處理演算法分成不同的部分,那麼現有元件可能已經實現了某些任務。有時將演算法分成兩個或多個元件是有意義的。這可以簡化配置並提供對演算法結構的更好洞察。但是,對於第一個實現,最簡單的方法是從一個元件開始。因此,本頁將重點介紹一個元件的實施。

核心資料結構

[編輯 | 編輯原始碼]

資料使用 SwisTrackCore 類在元件之間傳遞。它具有用於儲存軌跡、粒子、影像的資料結構。管道中的每個元件都會直接更新這些資料結構,通常是透過重置指標以使用其自身類例項中的指標。

軌跡儲存在兩個資料結構中:SwisTrackCore::mDataStructureTracks 和 SwisTrackCore::mDataStructureParticles。mDataStructureTracks 儲存軌跡最後 50 個點的視窗,用於繪圖和計算。mDataStructureParticles 是 blob 查詢器的輸出,並存儲當前幀的粒子及其軌跡關聯,以及它們在現實世界中的位置。

建立新元件

[編輯 | 編輯原始碼]

我們在此描述如何建立一個名為“MyFavoriteAlgorithm”的新元件。當然,您可以自由地為您的元件選擇另一個名稱(我們甚至建議這樣做)。我們將分三個步驟來建立新元件:建立和註冊新元件類、實施演算法,以及建立配置檔案。

1. 建立和註冊新元件類

[編輯 | 編輯原始碼]
  1. 複製檔案 code/core/ComponentTemplate.cppcode/core/ComponentTemplate.h。將新檔案命名為 ComponentMyFavoriteAlgorithm.cppComponentMyFavoriteAlgorithm.h。(注意,如果現有元件執行的操作與您要實施的操作類似,您也可以複製該現有元件,而不是複製更通用的模板元件。)
  2. 開啟這兩個檔案,將“Template”(區分大小寫)替換為“MyFavoriteAlgorithm”。
  3. 確保您還更改了在建構函式中初始化的元件名稱。
  4. 開啟檔案 SwisTrackCore.cpp,將您的元件新增到包含檔案,即
#include "ComponentMyFavoriteAlgorithm.h"

以及在建構函式中新增到可用元件列表

mAvailableComponents.push_back(new ComponentMyFavoriteAlgorithm(this));

最後,在 SwisTrack GUI 所在的“components”目錄中生成一個 XML 檔案,該檔案描述您的元件及其引數。使用現有的元件作為模板。

如果您現在編譯並執行 SwisTrack,您應該能夠將新元件新增到處理管道中。

2. 實施演算法

[編輯 | 編輯原始碼]
  1. 建構函式:資料結構關係。
  1. 實施 OnStart() 方法。
  2. 實施 OnReloadConfiguration() 方法。
  3. 實施 OnStep() 方法。
  4. 實施 OnStepCleanup() 方法。
  5. 實施 OnStop() 方法。


3. 建立配置檔案

[編輯 | 編輯原始碼]
  1. 複製檔案 SwisTrackEnvironment/Components/Template.xml,並將新檔案命名為 MyNewComponent.xml
  2. 在文字編輯器(最好是支援 XML 的編輯器)中開啟此檔案,並替換元件的標題、描述和 URL。

更多內容即將釋出…

華夏公益教科書