LoginSignup
41
44

More than 1 year has passed since last update.

追跡アルゴリズム (C++/python)情報へのリンク

Last updated at Posted at 2017-11-17

追跡アルゴリズム (C++/python)情報へのリンク情報です。

OpenCVのドキュメント

なんと言っても本家のドキュメント
追跡の部分も近年のアルゴリズムの進展で、OpenCVの中で使える追跡アルゴリズムが増えています。OpeCV 4.0.0.preでは8種の追跡アルゴリズムが用意されています。

複数の対象物を追跡するときには
cv::MultiTracker クラスが用意されています。

help(cv2.MultiTracker_create)
Help on built-in function MultiTracker_create:

MultiTracker_create(...)
MultiTracker_create() -> retval
. * \brief Returns a pointer to a new instance of MultiTracker

本家のドキュメントにはPythonバインディングについてのドキュメントは、この記事を書いている時点では見つかりませんでした。

以下の場所にMultiTrackerのPythonバインディングを利用するサンプルスクリプトがありました。

OpenCVでは評価用のデータベースが入手しやすい状況が作られています。

OpenCVにある追跡関係のコードを読もうとしたときのメモです。

OpenCV にある追跡関係を調査中

論文を参照しよう

利用するアルゴリズムを選択する際には、ベンチマークが必要です。著者が新規のアルゴリズムを発表する場合には、従来のアルゴリズムに比べて、どのように優れているのかを比較しています。有名な学会で採択されているような論文では、新規のアルゴリズムを学べるだけではなく、そのような人が既存のアルゴリズムをどのように評価しているのかがわかります。トップ カンファレンスでは、採択されるまえに十分なレビューが入るので、そのような点でもぜひ読むべきでしょう。

table1.png

その論文中の
Table 1: Summary of experiments on OTB-50
では、いくつかの手法の比較のされています。non-realtimeとrealtimeとしてアルゴリズムが分類されています。

では、自分の用途にどのアルゴリズムを選択すべきなのか。
次の論文は組み込みのための追跡についての視点で述べている。

上記の中に次のグラフがある。 Fig. 1. Box plot illustrating averages and distributions of frame rates. Four (4) outliers
above 50 FPS between Median Flow and KCF are missing to make the y axis scale
better.
fig4.png

Youtube OpenCV Visual Tracking - BOOSTING, KCF, MEDIANFLOW, MIL, TLD

Youtube OpenCV 3.0 Tracking API Results


    cv::Rect2d roi = cv::selectROI("tracker", frame); // マウスで中心を選択してドラッグ
        //template matching
        cv::matchTemplate(frame, frame_template, matching_res, CV_TM_CCOEFF_NORMED);       テンプレートマッチングの計算

        cv::Point max_pt;
        double maxVal;
        cv::minMaxLoc( matching_res, NULL, &maxVal, NULL, &max_pt);    テンプレートがもっとも元画像に良く重なる位置を求める.

追跡アルゴリズムの利用の初期からあるのがテンプレートマッチングです。

windowsでのOpenCV contrib を含めたインストールから、入力動画の最初でマウスで追跡開始枠を入力して追跡を実施するサンプルです。

追跡アルゴリズムの選択時のポイント

  • 被写体の見え方の大きさが変化することに対応しているか?
    • 大きさが変わらないことを前提としたテンプレートマッチングもある。
  • 被写体の明るさが変化することに対応しているか?
    • 輝度ベースのアルゴリズムによっては、屋内と屋外のように輝度値が変動してしまうところで追跡できないのがある。
  • 検出それ自体と比べて、追跡アルゴリズムが十分に軽いアルゴリズム・実装になっているか?
    • 追跡アルゴリズムが遅ければ、全フレーム検出した方がよくなる。
  • 対象物の変形がどの程度あるのか、変形で追跡が破綻するのを考慮する。
  • 追跡を行うフレーム間隔は短いほど、追跡が簡単になる。
  • 対象物特化型の追跡ライブラリ
    • FaceTracker > FaceTracker is a C++ library for real-time non-rigid face tracking using OpenCV 2, and is free for non-commercial use. For commercial use, please request a quote.
  • 追記: 検出の欠損がフレームによって生じた時に、追跡IDの継続ができるアルゴリズムかどうか。
  • 追記: 複数の対象物に対して追跡を可能にするものであるかどうか。

検出処理と追跡処理とすり合わせ

  • 追跡を開始させる条件(既存の追跡と同一のオブジェクトでないと判定する条件)
  • 既存の追跡と判定されたときに、検出の結果をどのように追跡のパラメータに反映させるか

github python opencv track などのキーワード検索してみましょう。

dlib 自体にも追跡が実装されています。

【Ubuntu】【Python】dlibを用いた物体追跡

github multi-object-tracker

SlideShareに、アルゴリズムの解説記事を探してみます。

SlideShare 単一物体追跡論文のサーベイ

SlideShare Lucas kanade法について

SlideShare Cv20160205

github https://github.com/abhineet123/Deep-Learning-for-Tracking-and-Detection

  • 各種アルゴリズムのリンク集

以下の例は、物理的にカメラを移動させる話。画像内で追跡する話ではない。


4dface: Real-time 3D face tracking and reconstruction from 2D video

[OpenFace – a state-of-the art tool intended for facial landmark detection, head pose estimation, facial action unit recognition, and eye-gaze estimation. ]
https://github.com/TadasBaltrusaitis/OpenFace

algorithm paper
Boosting Real-time tracking via on-line boosting.
MIL Visual Tracking with Online Multiple Instance Learning
TLD Tracking-Learning-Detection
MedianFlow Forward-backward error: Automatic detection of tracking failures
KCF High-Speed Tracking with Kernelized Correlation Filters

2022年時点の追記

DeepSort という追跡アルゴリズムが着目されている。そのようなアルゴリズムも候補に上げ検討してほしい。

DeepSort とYolov4の組み合わせの実装を調査中

41
44
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
44