本文へスキップ
OpenCVを用いた古典的なリアルタイム動体検知アプリケーション

OpenCVを用いた古典的なリアルタイム動体検知アプリケーション

ビデオソース内の特定の領域(ROI)を監視し、動きを記録する動体検知アプリケーション。移動平均を用いた背景モデルの構築、モルフォロジー変換によるノイズ除去、デバウンス処理を取り入れたステートマシンによるイベント管理を実装。

2024年5月 – 2024年6月 期間: 1ヶ月 最終更新日: 2026年3月12日

概要

担当
設計 / 実装
成果
背景モデルと状態管理で安定した検知を実現
状態
完了

使用技術

プロジェクト概要

ビデオソース(Webカメラや動画ファイル)をリアルタイムに監視し、指定された関心領域(ROI)内での動きを検知して自動的に画像を保存するシステムです。 単なるフレーム間差分ではなく、動的な背景更新、ノイズ除去、ステートマシンによるイベント管理を組み合わせ、環境変化に強い検知を目指しました。

技術的な理論背景については、こちらの解説ブログで詳しく公開しています。

検出結果

  • 使用言語: Python
  • 使用ライブラリ: OpenCV(opencv-python),NumPy
  • 主な機能: 動体検知、ROI指定、動的背景更新、検知画像の自動保存機能

技術的な工夫とアーキテクチャ

実運用を想定し、誤検知を減らすための工夫を入れています。

1. 環境変化に適応する「動的な背景モデル」

単純なフレーム差分では、日差しの変化やカメラの微細な揺れで誤検知が発生します。これを防ぐため、cv2.accumulateWeighted を用いた移動加重平均の背景モデルを導入しました。天候や時間帯による緩やかな明るさの変化を学習し、実際に動いた物体だけを抽出しやすくしています。

2. ノイズ除去とステートマシンによるイベント管理

二値化後のマスク画像には、数種類のモルフォロジー演算(オープニング/クロージング)を適用し、微細なノイズの除去と輪郭の結合を行っています。また、瞬発的なノイズによる誤保存を防ぐため、以下の状態遷移ロジックを実装しました。

  • 開始判定: 指定フレーム数連続で動きを検知した場合のみ「検知イベント」を開始。
  • 終了判定: 動きが一定期間途絶えたことを確認してイベントをクローズ。

今後の改善点と展望

  • 物体認識AIとの統合: 現在はピクセルの変化をトリガーにしているため、風で揺れる木なども検知します。YOLOやSSDなどの軽量な推論モデルを組み込み、「人」や「車」など特定の物体が動いたときだけイベントを開始する形に拡張したいです。
  • マルチカメラ・マルチスレッド化: 現在は単一のビデオソースを処理しています。今後は複数台のカメラを同時監視できるようにし、Raspberry Pi などで動作するIoTハブとして使える構成を検討しています。

RELATED PROJECTS