LoginSignup
2
5

More than 1 year has passed since last update.

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

Last updated at Posted at 2018-04-24

以下の記事はだいぶ古くなっています。
OpenCV4.6 の時点でかなりの追跡アルゴリズムがlegacy に移動しています。

cv2.TrackerMIL_createから
cv2.legacy.TrackerMIL_create へと変更になっています。


OpenCV にあるTracking関係のスクリプト

まずは、OpenCVのPythonスクリプトでそれらしいのを探して見ましょう。

$ find opencv -name '*[Tt]rack*.py' -print
opencv/modules/python/test/test_lk_track.py
opencv/samples/python/plane_tracker.py
Multitarget planar tracking
==================

Example of using features2d framework for interactive video homography matching.
ORB features and FLANN matcher are used. This sample provides PlaneTracker class
and an example of its usage.

video: http://www.youtube.com/watch?v=pzVbhxx6aog

Usage
-----
plane_tracker.py [<video source>]

Keys:
   SPACE  -  pause video
   c      -  clear targets

Select a textured planar object to track by drawing a box with a mouse.

opencv/samples/python/lk_track.py
Lucas-Kanade sparse optical flow demo.
特徴点がどのように追跡されているのかを見ることができます。
 動画入力は起動時に指定することができます。
lk_track.py []

Optical Flowがどのようであるのかを見てとることができます。

しかし、物体の追跡をさせたいと意気込んでいた人には、「これだけでは、どうしたらいいの?」ととまどうことでしょう。

次にopencv_contribにあるPythonスクリプトでそれらしいのを探して見ましょう。

$ find opencv_contrib -name '*[Tt]rack*.py' -print

opencv_contrib/modules/tracking/samples/tracker.py
cv::TrackerMIL Class ReferenceのPythonバインディングを使った例題です。
追跡開始のROIの枠は、マウスで指定するようになっています。

opencv_contrib/modules/tracking/samples/multitracker.py
cv::MultiTracker Class Reference のpythonバインディングを使った例題です。
複数の追跡対象を最初のフレームで、追跡開始のROIの枠を、マウスで指定するようになっています。

追跡についての一般的なものになっているため、ここでは追跡の開始をマウスで指定するものになっています。人追跡を開始させたいのであれば、人検出器を利用して、その検出結果の枠位置を追跡の開始に指定すればいい。

検出器による検出結果をトリガーとしてオブジェクトの追跡をするPythonスクリプトはOpenCV自体の中には無いようです。
それには、cv2 を使っているPythonの例題を検索してみるのが良さそうです。

次は、C++自体で書かれている追跡関連が入っているらしいソースコードを探してみることにしましょう。


$ find opencv -name '[tT]rack.cpp' -print
opencv/build/modules/tracking/opencl_kernels_tracking.cpp
opencv/modules/objdetect/src/detection_based_tracker.cpp
opencv/modules/imgproc/test/test_goodfeaturetotrack.cpp
opencv/modules/imgproc/perf/perf_goodFeaturesToTrack.cpp
opencv/samples/cpp/tutorial_code/TrackingMotion/goodFeaturesToTrack_Demo.cpp
opencv/samples/cpp/tutorial_code/HighGUI/AddingImagesTrackbar.cpp
opencv/samples/cpp/tutorial_code/HighGUI/BasicLinearTransformsTrackbar.cpp
opencv/samples/cpp/tutorial_code/features2D/AKAZE_tracking/planar_tracking.cpp
opencv/samples/android/face-detection/jni/DetectionBasedTracker_jni.cpp

$ find opencv_contrib -name '[tT]rack.cpp' -print

opencv_contrib/modules/datasets/src/track_vot.cpp
opencv_contrib/modules/datasets/src/track_alov.cpp
opencv_contrib/modules/datasets/samples/track_vot.cpp
opencv_contrib/modules/tracking/test/test_trackers.cpp
opencv_contrib/modules/tracking/test/test_trackerParametersIO.cpp
opencv_contrib/modules/tracking/perf/perf_Tracker.cpp
opencv_contrib/modules/tracking/src/trackerCSRT.cpp
opencv_contrib/modules/tracking/src/trackerCSRTScaleEstimation.cpp
opencv_contrib/modules/tracking/src/trackerMILModel.cpp
opencv_contrib/modules/tracking/src/trackerCSRTSegmentation.cpp
opencv_contrib/modules/tracking/src/gtrTracker.cpp
opencv_contrib/modules/tracking/src/trackerKCF.cpp
opencv_contrib/modules/tracking/src/trackerFeature.cpp
opencv_contrib/modules/tracking/src/multiTracker_alt.cpp
opencv_contrib/modules/tracking/src/trackerBoosting.cpp
opencv_contrib/modules/tracking/src/mosseTracker.cpp
opencv_contrib/modules/tracking/src/trackerMIL.cpp
opencv_contrib/modules/tracking/src/trackerCSRTUtils.cpp
opencv_contrib/modules/tracking/src/trackerMedianFlow.cpp
opencv_contrib/modules/tracking/src/trackerModel.cpp
opencv_contrib/modules/tracking/src/trackerSampler.cpp
opencv_contrib/modules/tracking/src/tracking_utils.cpp
opencv_contrib/modules/tracking/src/trackerFeatureSet.cpp
opencv_contrib/modules/tracking/src/tracker.cpp
opencv_contrib/modules/tracking/src/multiTracker.cpp
opencv_contrib/modules/tracking/src/tldTracker.cpp
opencv_contrib/modules/tracking/src/trackerSamplerAlgorithm.cpp
opencv_contrib/modules/tracking/src/trackerStateEstimator.cpp
opencv_contrib/modules/tracking/src/trackerBoostingModel.cpp
opencv_contrib/modules/tracking/samples/tutorial_introduction_to_tracker.cpp
opencv_contrib/modules/tracking/samples/tracker_dataset.cpp
opencv_contrib/modules/tracking/samples/goturnTracker.cpp
opencv_contrib/modules/tracking/samples/tutorial_multitracker.cpp
opencv_contrib/modules/tracking/samples/multiTracker_dataset.cpp
opencv_contrib/modules/tracking/samples/tracker.cpp
opencv_contrib/modules/tracking/samples/tutorial_customizing_cn_tracker.cpp
opencv_contrib/modules/tracking/samples/multitracker.cpp

$ find opencv_contrib -name '*[tT]rack*.markdown' -print
opencv_contrib/modules/tracking/tutorials/tutorial_customizing_cn_tracker.markdown
opencv_contrib/modules/tracking/tutorials/tutorial_multitracker.markdown
opencv_contrib/modules/tracking/tutorials/tutorial_introduction_to_tracker.markdown

チュートリアルを読んでみよう

チュートリアルに紹介されたソースコード

opencv_contrib/modules/tracking/samples/tutorial_customizing_cn_tracker.cpp
opencv_contrib/modules/tracking/samples/tutorial_multitracker.cpp
opencv_contrib/modules/tracking/samples/tutorial_introduction_to_tracker.cpp

チュートリアルには紹介されていないサンプルのソースコード

opencv_contrib/modules/tracking/samples/tracker_dataset.cpp
opencv_contrib/modules/tracking/samples/goturnTracker.cpp
opencv_contrib/modules/tracking/samples/multiTracker_dataset.cpp
opencv_contrib/modules/tracking/samples/tracker.cpp
opencv_contrib/modules/tracking/samples/multitracker.cpp

2
5
0

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
2
5