4.8 リアルタイムビジョンパイプラインフレームワーク

なぜこれが重要か

精度の高いモデル単体ではリアルタイムビジョンシステムは実現できません。

動作するシステムにはさらに次の要素も必要です。

  • カメラやファイルからの入力
  • デコードとフレーム転送
  • 推論と後処理
  • 表示、保存、または下流通信

このチェーン全体をパイプラインと呼びます。

本セクションでは、DeepStream や Jetson 固有のサービスに進む前に、リアルタイムビジョンシステムを理解するために必要なフレームワーク的な考え方を紹介します。

学習目標

このセクションを終えるとき、次のことができるようになるはずです。

  • リアルタイムビジョンパイプラインの主要なステージを説明できる
  • シンプルなアプリケーションパイプラインと、フレームワークベースのパイプラインを比較できる
  • OpenCVGStreamer の役割を理解する
  • ライブ映像の読み込みと処理を行う小さなサンプルを書ける
  • 個別のモデル呼び出しではなく、エンドツーエンドのシステムフローで考えられる

コアコンセプト / 理論

リアルタイムパイプラインにはステージがある

典型的なリアルタイムビジョンパイプラインは以下を含みます。

  1. ソース入力
  2. デコードとフレーム取得
  3. 前処理
  4. モデル推論
  5. 後処理
  6. 描画、保存、または送信

なぜパイプラインが重要か

ある 1 つのステージが不安定であったり遅すぎたりすると、システム全体が影響を受けます。

例:

  • 不調な RTSP ストリームはフレーム落ちを引き起こす
  • 遅い前処理はレイテンシを増やす
  • 不要な表示オーバーヘッドはスループットを制限する

OpenCV vs GStreamer

OpenCV は学習やアプリケーションロジックに便利です。

GStreamer は、堅牢なメディアパイプライン、ストリーミング、リアルタイムデータフローが必要なときに、より強力です。

どちらも有用ですが、役割が異なります。

主要用語

  • Source:フレームの入力元
  • Decode:圧縮された映像をフレームに変換すること
  • Preprocessing:推論用にフレームを準備すること
  • Post-processing:生の予測を有用な出力に変換すること
  • Latency:パイプラインのエンドツーエンドの遅延
  • Throughput:処理されたフレームやストリームの総量

ワーク例 / コード例

シンプルな OpenCV ライブパイプライン

python
import cv2
import time

cap = cv2.VideoCapture(0)
prev_time = time.time()

while True:
    ok, frame = cap.read()
    if not ok:
        break

    current_time = time.time()
    fps = 1.0 / (current_time - prev_time)
    prev_time = current_time

    cv2.putText(frame, f"FPS: {fps:.2f}", (20, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
    cv2.imshow("OpenCV Live Pipeline", frame)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

cap.release()
cv2.destroyAllWindows()

GStreamer の例

bash
gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink

RTSP 入力の例

bash
gst-launch-1.0 rtspsrc location=rtsp://<camera-ip>/<path> latency=200 ! \
  rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! autovideosink

よくある誤解

  • 「モデルがパイプラインだ。」
    • モデルはパイプラインの中の 1 ステージにすぎません。
  • 「モデルベンチマークで 30 FPS 出れば、システム全体も 30 FPS で動く。」
    • エンドツーエンドの性能はパイプライン全体に依存します。
  • 「OpenCV と GStreamer は同じことをする。」
    • 一部は重なりますが、同じツールではありません。

演習 / 振り返り

  1. ウェブカメラ検出器のための 5 ステージのリアルタイムパイプラインを描いてください。
  2. OpenCV の例を実行し、あなたのマシンでのおおよその FPS を計測してください。
  3. 動画ファイル入力とライブカメラ入力を比較してください。実際にどんな違いが観察されますか?
  4. モデル推論時間だけでなく、エンドツーエンドのレイテンシがしばしばより重要なのはなぜか説明してください。

まとめ

リアルタイムコンピュータビジョンは、モデルだけでなくパイプライン設計に依存します。入力、デコード、前処理、推論、後処理、出力を理解することで、DeepStream のようなより高度なエッジフレームワークに学習者を備えさせることができます。

推奨される次のステップ

4.9 DeepStream と Jetson に進んでください。

参考資料