Classic Real-Time Motion Detection App with OpenCV
A motion detection app that monitors regions of interest (ROI) in a video source and records movement. Implements a moving-average background model, morphological transforms for noise removal, and a debounced state machine for event management.
Overview
- Role
- Design / implementation
- Outcome
- Stable detection through background modeling and state management
- Status
- Completed
Tech Stack
プロジェクト概要
ビデオソース(Webカメラや動画ファイル)をリアルタイムに監視し、指定された関心領域(ROI)内での動きを検知して自動的に画像を保存するシステムです。 単なるフレーム間差分ではなく、動的な背景更新、ノイズ除去、ステートマシンによるイベント管理を組み合わせ、環境変化に強い検知を目指しました。
技術的な理論背景については、こちらの解説ブログで詳しく公開しています。

- 使用言語: Python
- 使用ライブラリ: OpenCV(
opencv-python),NumPy - 主な機能: 動体検知、ROI指定、動的背景更新、検知画像の自動保存機能
技術的な工夫とアーキテクチャ
実運用を想定し、誤検知を減らすための工夫を入れています。
1. 環境変化に適応する「動的な背景モデル」
単純なフレーム差分では、日差しの変化やカメラの微細な揺れで誤検知が発生します。これを防ぐため、cv2.accumulateWeighted を用いた移動加重平均の背景モデルを導入しました。天候や時間帯による緩やかな明るさの変化を学習し、実際に動いた物体だけを抽出しやすくしています。
2. ノイズ除去とステートマシンによるイベント管理
二値化後のマスク画像には、数種類のモルフォロジー演算(オープニング/クロージング)を適用し、微細なノイズの除去と輪郭の結合を行っています。また、瞬発的なノイズによる誤保存を防ぐため、以下の状態遷移ロジックを実装しました。
- 開始判定: 指定フレーム数連続で動きを検知した場合のみ「検知イベント」を開始。
- 終了判定: 動きが一定期間途絶えたことを確認してイベントをクローズ。
今後の改善点と展望
- 物体認識AIとの統合: 現在はピクセルの変化をトリガーにしているため、風で揺れる木なども検知します。YOLOやSSDなどの軽量な推論モデルを組み込み、「人」や「車」など特定の物体が動いたときだけイベントを開始する形に拡張したいです。
- マルチカメラ・マルチスレッド化: 現在は単一のビデオソースを処理しています。今後は複数台のカメラを同時監視できるようにし、Raspberry Pi などで動作するIoTハブとして使える構成を検討しています。
RELATED PROJECTS
Fast Fuzzy String Search System for Large-Scale Data
A system for fast fuzzy string search (edit distance ≤ 3) over one million records. Implemented hierarchical filtering and Myers' bit-parallel algorithm in C, achieving 100% precision with optimized execution speed.
Fusion Wing Importer
An Autodesk Fusion add-in that automatically generates 3D wing models from Flow5/XFLR5 analysis data.