第34回目の今回からは、「トラッキング処理」について紹介します。
第20回から第23回の記事では、機械学習による顔・人・物体の検出、識別について紹介しました。
1枚の画像から顔・人・物体を検出するだけでなく、動画像の連続するフレームから検出する場合には、トラッキング処理が必要となります。
トラッキング処理を用いた場合、一度物体を見つけた後はその周辺のみを探索すれば良いため、誤検出や未検出を抑制することができます。さらに、フレーム間の物体の対応関係から動きの軌跡を求めることができます(動画1)。


動画1 Multi-Target Trackingの一例

オープンソースライブラリ OpenCVによるトラッキング

OpenCV 3.0以降では、エクストラモジュール(opnecv_contrib)を追加することで、様々な機能を使うことができます。そのエクストラモジュールにはトラッキングが含まれているので、OpenCVを使って人や物体の追跡を簡単に実装できます。ただ、エクストラモジュールを使用するためには、cmakeでopencv_contribを有効にしてコンパイルする必要があります。コンパイルの方法はインターネット上で検索すれば色々見つかりますので、そちらを参考にしてください。

OpenCVのトラッキングのコードはごくシンプルです。
◇1.Trackerインスタンスの生成: cv::Tracker::create(“アルゴリズム名”)
◇2.初期化: cv::Tracker::init(トラッキングを開始する画像, 対象物の外接矩形)
◇3.更新: cv::Tracker::update(最新の画像, 対象物の外接矩形)
の3ステップのみです。ループ処理で動画の画像を読み込み、3.のTrackerの更新を繰り返すだけです。

また複数物体用のAPIも用意されています。複数物体用のMultiTrackerも上記と同様に、
◇1.Trackerインスタンスの生成: cv::MultiTracker::create(“アルゴリズム名”)
◇2.初期化:cv::MultiTracker::add(トラッキングを開始する画像, 対象物の外接矩形)
◇3.更新:cv::MultiTracker::update(最新の画像, 対象物の外接矩形)
の3ステップのみです。

トラッキングアルゴリズムは、
■Boosting
■MIL
■TLD
■MedianFlow
■KCF
があります。

どの方向から見ても見え方に変化のない単一色の球体か、剛体であっても角度により見え方が異なる物体か、人のように姿勢が変化する非剛体か、などトラッキング対象によってトラッキング精度が異なるので、全てのアルゴリズムを比較してみることをおすすめします。すでにトラッキング精度を比較した結果も多数公開されているので、動画検索もしてみてください(動画2)。


動画2 OpenCVのTraking APIによる物体追跡結果

トラッキングは、自動車やロボットの衝突防止、店舗内の顧客の動線解析、スポーツ映像の選手・ボールの動き解析、スマートフォンカメラアプリの高機能化など、応用範囲が多岐にわたる重要な技術です。興味のある方は、まずはOpenCVを使ってトラッキングを実装してみてください。

次回は、OpenCVに組み込まれている5つのトラッキング手法のうち、Boosting、MIL、Median Flowの3つを紹介します!