效能最佳化#
工業相機通常會以持續且可能非常高的速率(例如每秒 60–200 張或更多畫面)產生影像。在許多應用中,如 Python、OpenCV、AI 推論等處理管線無法跟上這個速率。
這會造成根本上的供需不匹配:
如果沒有擷取策略,將會產生以下其中一種情況:
- Buffer 無限制增長:不可行
- Buffer 隨機溢位:非預期情況
擷取策略定義了 系統在負載下的運作行為。
Mental Model#
如果應用程式的速度比相機慢,佇列就會塞滿,因此需要決定如何處理這種情況。這就是擷取策略的用途。
Grab Strategies#
提供兩種擷取策略。
LatestImageOnly#
只保留最新的畫面。當應用程式忙碌時,較舊的畫面會被捨棄。以下視覺化圖表說明了此情況:
優點:
- 您永遠能看到最新的狀態。
- 極低的延遲
缺點:
- 畫面遺失
典型應用場景:
當您需要最新資訊、可以接受畫面遺失且必須將延遲保持在最低時,請使用 LatestImageOnly。例如:
- 即時顯示 (GUI)
- 操作員監控
- 即時視覺化
OneByOne#
每一個畫面都會排入佇列並按順序處理。不會刻意捨棄任何畫面。以下視覺化圖表說明了此情況:
優點:
- 無畫面遺失(非常適合分析/錄製)
- 具決定性的處理順序
缺點:
- 如果處理速度慢,延遲會較高
- 持續超載時存在緩衝區溢位的風險
典型應用場景:
當每一幀影像都至關重要、結果必須可重現,且處理速度與擷取速度大約相符時,請使用 OneByOne。例如:
- 檢測系統
- 圖像記錄
- 測量任務
Buffer Configuration#
緩衝區充當相機與應用程式之間的暫時儲存庫。您可以根據需要調整所使用的緩衝區數量。
增加緩衝區數量具有以下優點:
- 可以容忍暫時的速度變慢。
缺點是:
- Memory 使用量增加。
- 延遲增加,也就是佇列增長。
重點整理#
沒有所謂的「最佳」策略。選擇取決於您是需要最新的影像,還是需要所有影像。下表可作為選擇合適策略的參考。
| 策略 | 延遲 | 影格遺失 | 確定性 |
|---|---|---|---|
| LatestImageOnly | Low | 是 | Low |
| OneByOne | 高(如果速度較慢) | 否 | High |