效能最佳化#
工業相機通常以恆定且可能非常高的幀率(例如 60–200 fps 或更高)輸出影像。在許多應用中,諸如 Python、OpenCV、AI 推論等處理流程,往往無法跟上這般幀率。
這造成了一種根本性的不匹配:
若沒有抓取策略,將會出現以下其中一種情況:
- 緩衝區會無限增長:這是不可能的
- 緩衝區隨機溢出:非預期行為
抓取策略定義了系統在負載下的運作方式。
心智模型#
如果應用程式的處理速度慢於攝影機,佇列就會填滿,此時必須決定如何處理這種情況。這正是「抓取策略」的用途所在。
Grab 策略#
共有兩種抓取策略可供選擇。
僅顯示最新圖片#
系統僅保留最新的一幀。當應用程式處於繁忙狀態時,較舊的幀將會被捨棄。此視覺化圖示說明了這一點:
優點:
- 您所看到的總是最新狀態。
- 最低延遲
缺點:
- 幀丟失
典型應用案例:
僅在需要最新資訊、可接受畫面掉幀,且必須將延遲降至最低時,才使用LatestImageOnly。範例:
- 即時顯示(GUI)
- 操作員監控
- 即時視覺化
OneByOne#
每個畫面都會被排入佇列並依序處理。不會刻意捨棄任何畫面。以下視覺化圖示說明了這一點:
優點:
- 無畫面遺失(非常適合分析/錄製)
- 確定性處理順序
缺點:
- 若處理速度較慢,延遲會較高
- 持續過載可能導致緩衝區溢出風險
典型應用案例:
當每個幀都至關重要、結果必須可重現,且處理速度大致等同於擷取速度時,請使用OneByOne。範例:
- 檢測系統
- 影像錄製
- 測量任務
緩衝區設定#
緩衝區在攝影機與應用程式之間扮演臨時儲存區的角色。您可以根據需要調整使用的緩衝區數量。
增加緩衝區的數量具有以下優點:
- 暫時性的速度減緩是可以接受的。
其缺點如下:
- 記憶體使用量增加。
- 延遲增加,也就是說,佇列變長了。
重點摘要#
並沒有所謂的「最佳」策略。選擇取決於您是需要隨時取得最新映像,還是需要所有映像。下表可作為選擇合適策略的參考依據。
| 策略 | 延遲 | 幀遺失 | 決定論 |
|---|---|---|---|
| 僅顯示最新圖片 | Low | 是 | Low |
| OneByOne | 高(即使速度較慢) | 否 | 高 |