4.8 リアルタイムビジョンパイプラインフレームワーク
なぜこれが重要か
精度の高いモデル単体ではリアルタイムビジョンシステムは実現できません。
動作するシステムにはさらに次の要素も必要です。
- カメラやファイルからの入力
- デコードとフレーム転送
- 推論と後処理
- 表示、保存、または下流通信
このチェーン全体をパイプラインと呼びます。
本セクションでは、DeepStream や Jetson 固有のサービスに進む前に、リアルタイムビジョンシステムを理解するために必要なフレームワーク的な考え方を紹介します。
学習目標
このセクションを終えるとき、次のことができるようになるはずです。
- リアルタイムビジョンパイプラインの主要なステージを説明できる
- シンプルなアプリケーションパイプラインと、フレームワークベースのパイプラインを比較できる
OpenCVとGStreamerの役割を理解する- ライブ映像の読み込みと処理を行う小さなサンプルを書ける
- 個別のモデル呼び出しではなく、エンドツーエンドのシステムフローで考えられる
コアコンセプト / 理論
リアルタイムパイプラインにはステージがある
典型的なリアルタイムビジョンパイプラインは以下を含みます。
- ソース入力
- デコードとフレーム取得
- 前処理
- モデル推論
- 後処理
- 描画、保存、または送信
なぜパイプラインが重要か
ある 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 ! autovideosinkRTSP 入力の例
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 は同じことをする。」
- 一部は重なりますが、同じツールではありません。
演習 / 振り返り
- ウェブカメラ検出器のための 5 ステージのリアルタイムパイプラインを描いてください。
- OpenCV の例を実行し、あなたのマシンでのおおよその FPS を計測してください。
- 動画ファイル入力とライブカメラ入力を比較してください。実際にどんな違いが観察されますか?
- モデル推論時間だけでなく、エンドツーエンドのレイテンシがしばしばより重要なのはなぜか説明してください。
まとめ
リアルタイムコンピュータビジョンは、モデルだけでなくパイプライン設計に依存します。入力、デコード、前処理、推論、後処理、出力を理解することで、DeepStream のようなより高度なエッジフレームワークに学習者を備えさせることができます。
推奨される次のステップ
4.9 DeepStream と Jetson に進んでください。