動体検出には目的に応じて色々な方法があります。またOpenCVを始めとした便利なライブラリを利用すれば比較的簡単に実現可能です。 今回はそういったライブラリを使わずに一から複数の動体検出を行なってみました。コンセプトは手軽に簡単にです。
問題設定として、以下のような状況を考えます。
- 人物を検出する(だたし輪郭ではなくその重心を求める)
- 人数は不明で増えたり減ったりする
- 人は単色(白い壁)の背景上を動き、人のカメラから見た奥行きは一定とする
- 実時間処理を目標とする
- 追跡は行わない
人物検出については多くの研究成果が報告されています。 輪郭などの特徴量を用いた学習による検出は、とても精度が高く実社会での応用も期待されます。 ただし学習ベースの検出は、学習に用いるサンプルを一定数以上集める必要があり、それなりにコストがかかってしまいます。 そこで今回は別のアプローチを取ることにします。
ざっくり手順を述べると、次の2ステップを各フレームごとに実行することにより検出を行います。
- 色情報を元に候補点をサンプリング
- サンプリングされた候補点をクラスタリング
それぞれ、実時間処理のためのフレームレートを維持する目的、何人検出しているかを決定する目的があります。
各ステップの具体的なアルゴリズムは次回より記載していきます。