コンテンツにスキップ
ステージングサーバー
開発サーバー

パフォーマンスの最適化#

このトピックでは、グラブ戦略とは何か、そしてそれがなぜ重要であるかについて説明します。

産業用カメラは、多くの場合、一定かつ非常に高いレート(例:60~200 fps以上)で画像を生成します。多くのアプリケーションにおいて、Python、OpenCV、AI推論などの処理パイプラインはこのレートに追従できません。

これにより、根本的な不整合が生じます。

Camera (Producer) → fast
Application (Consumer) → slower

グラブ戦略がない場合、次のいずれかの状況が発生します。

  • バッファが無制限に増加する:不可能
  • バッファがランダムにオーバーフローする:望ましくない

グラブ戦略は、負荷がかかったときにシステムがどのように動作するかを定義します。

メンタルモデル#

Camera → Frame Stream → Buffer Queue → RetrieveResult() → Application

アプリケーションがカメラよりも遅い場合、キューがいっぱいになり、その状況にどう対処するかを決定する必要があります。それがグラブ戦略の目的です。

グラブ戦略#

2つのグラブ戦略を利用できます。

LatestImageOnly#

最も新しいフレームのみが保持されます。アプリケーションが処理中の間、古いフレームは破棄されます。この視覚化はそれを表しています。

Camera:    F1 → F2 → F3 → F4
App reads:        →    F4
Dropped:   F1, F2, F3

利点:

  • 常に最新の状態を確認できます。
  • リアルタイムビジュアライゼーション

欠点:

  • フレームのドロップ

一般的なユースケース:

最新の情報が必要であり、フレームドロップが許容され、レイテンシを最小限に抑える必要がある場合は、LatestImageOnlyを使用します。例:

  • ライブディスプレイ(GUI)
  • オペレーターのモニタリング
  • リアルタイム可視化
OneByOne#

すべてのフレームがキューに入れられ、順番に処理されます。意図的にフレームがドロップされることはありません。この視覚化はそれを表しています。

Camera:    F1 → F2 → F3 → F4
App reads: F1 → F2 → F3 → F4

利点:

  • フレームロスなし(解析や記録に最適)
  • 確定的処理順序

欠点:

  • 処理が遅い場合のレイテンシの増加
  • 継続的な過負荷によるバッファオーバーフローのリスク

一般的なユースケース:

すべてのフレームが重要であり、結果の再現性が必要で、処理速度が取り込み速度とほぼ同じ場合は、OneByOneを使用します。例:

  • 検査システム
  • 画像記録
  • 測定タスク

バッファ設定#

バッファは、カメラとアプリケーションの間の一時的な貯蔵庫として機能します。使用するバッファ数は必要に応じて調整できます。

camera.MaxNumBuffer.Value = 20

バッファ数を増やすことには、次のような利点があります。

  • 一時的な処理の遅延が許容されます。

欠点は次のとおりです。

  • Memoryの使用量が増加します。
  • レイテンシが増加し、つまりキューが長くなります。

主なポイント#

「最適な」戦略というものはありません。選択は、常に最新の画像が必要か、すべての画像が必要かによって異なります。適切な戦略を選択する際の目安として、次の表をご利用ください。

ストラテジー レイテンシー フレーム損失 決定論
LatestImageOnly 低 はい 低
OneByOne 高(処理が遅い場合) いいえ 高