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

<動画1 Multi-Target Trakingの一例>

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

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

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を使ってトラッキングを実装してみてください。

著者プロフィール

樋口未来(ひぐち・みらい)
日立製作所 日立研究所に入社後、自動車向けステレオカメラ、監視カメラの研究開発に従事。2011年から1年間、米国カーネギーメロン大学にて客員研究員としてカメラキャリブレーション技術の研究に携わる。

日立製作所を退職後、2016年6月にグローバルウォーカーズ株式会社を設立し、CTOとして画像/映像コンテンツ×テクノロジーをテーマにコンピュータビジョン、機械学習の研究開発に従事している。また、東京大学大学院博士課程に在学し、一人称視点映像(First-person vision, Egocentric vision)の解析に関する研究を行っている。具体的には、頭部に装着したカメラで撮影した一人称視点映像を用いて、人と人のインタラクション時の非言語コミュニケーション(うなずき等)を観測し、機械学習の枠組みでカメラ装着者がどのような人物かを推定する技術の研究に取り組んでいる。

専門:コンピュータビジョン、機械学習