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

ベストプラクティス#

この章では、本番環境で堅牢、効率的、かつ保守性の高い pypylon アプリケーションを構築するための実証済みの推奨事項をまとめています。

リソース管理#

カメラリソースが適切に取得および解放されるように常に確認してください。

with pylon.InstantCamera(pylon.FirstFound) as camera:
    # use camera

メリット:

  • 自動クリーンアップ
  • 例外安全性
  • リソースリークの防止

デバイスの識別#

デバイスインデックスは固定されないため、決して依存しないでください:

devices[0]

代わりに一意の識別子を使用してください:

  • シリアル番号
  • ユーザー定義名

詳細については、Discovering and Selecting a Cameraを参照してください。

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

適切なグラブ戦略の使用#

  • LatestImageOnly → 低遅延
  • OneByOne → 完全な処理

ソースでのデータ削減#

  • ROIを指定します。
  • 解像度を下げる。
  • 可能であればフレームレートを下げます。

不要なコピーの回避#

  • 必要な場合にのみコピーします。
  • 可能な場合はバッファを再利用します。

スレッディング設計#

取り込みと処理の分離#

Camera → Queue → Processing

メリット:

  • 優れたCPU使用率
  • 取り込みのブロックを回避します

プロデューサー・コンシューマーパターンの使用#

  • 取り込みスレッドが画像をプッシュします。
  • 処理スレッドがそれらをコンシューマーとして処理します。

スレッドセーフなキューの使用#

import queue
q = queue.Queue()

マルチステージパイプライン#

複雑なアプリケーションをパイプラインとして構築します。

Grab → Preprocess → Analyze → Output

ガイドライン:

  • 各ステージには1つの責任があります。
  • キューを介して通信します。
  • ステージごとに独立した Scaling を許可します。

エラーハンドリング#

グラブの成功を必ず確認する#

if grab_result.GrabSucceeded():
    process(grab_result.Array)
else:
    log_error(grab_result.ErrorDescription)

例外のキャッチとログ記録#

try:
    # acquisition code
    pass
except Exception as e:
    log_error(e)

リカバリロジックの実装#

Error → StopGrabbing → Retry → Continue

シャットダウン戦略#

クリーンなシャットダウンメカニズムの実装:

  • 使用 threading.Event.
  • タイムアウトなしのブロック呼び出しを避ける。
  • 明示的にアクイジションを停止する。
stop_event.set()
camera.StopGrabbing()

OpenCV統合ルール#

  • [Run]をクリックします imshow() メインスレッドでのみ実行されます。
  • ワーカースレッドでのGUIの使用を避ける。

システム監視#

主要なメトリクスの追跡:

  • フレームレート
  • 処理レイテンシ
  • キューサイズ
  • CPU使用率

構成管理#

  • カメラパラメータを外部に保存する。
  • ハードコードされた値を避ける。
  • 起動時に設定を検証する。

テストに関する推奨事項#

  • 実機でテストする。
  • 負荷条件をシミュレートする。
  • リカバリ動作を検証する。

よくある落とし穴#

  • 解放後のイメージバッファの使用
  • 無制限のキューのブロック
  • 同期要件の無視
  • UIスレッドとワーカースレッドの混在

メンタルモデル#

Reliable system = correct architecture + error handling + performance tuning

主なポイント#

  • 最初から堅牢性を考慮した設計を行う。
  • 処理と買収の分離
  • すべての外部インタラクションの検証
  • 障害とリカバリの計画