【OpenCV python】 Tracking APIでのAttributeErrorの解決法

f:id:wakuron:20210720171348p:plain
OpenCV pythonで画像内の指定したオブジェクトを追従するTracking APIを実装していたらタイトルのエラーで少し混乱したので、メモ。

状況

環境

OS: Windows10
OpenCV: 4.5.2
python: 3.7.7

エラー文

AttributeError: module 'cv2' has no attribute 'TrackerMedianFlow_create'

該当箇所は

tracker = cv2.TrackerMedianFlow_create()

でした。

解決法

ソースコードにて、cv2.TrackerMedianFlow_create()としていた部分をcv2.legacy.TrackerMedianFlow_create()と変更することで解決。

OpenCV 4.5.1以降でlegacyクラスに一部移行されていたことによって、当該の関数が見つからなかったようです。ちなみに、MedianFlow以外にもいくつかのオブジェクトトラッカーがlegacyクラスに移動されています。


ざっくりとですが、バージョンごとによる使えるtrackerの種類は次項の通りです。

詳細および最新情報は、OpenCV: Tracking APIよりご確認ください!

バージョンごとのTrackerの種類

legacyでないものは、cv2.Tracker*_create()で利用可能です。
*の部分には使いたいTrackerの名前をいれてください。

ver. 4.5.3 (DaSiamRPNが追加)

9種類利用可能。

  • CSRT
  • DaSiamRPN
  • GOTURN
  • KCF
  • MIL

以下、cv2.legacy.Tracker*_create()で利用可能

  • Boosting
  • MOSSE
  • MedianFlow
  • TLD

ver. 4.5.1~4.5.2 (一部Trackerがlegacyへ移動)

8種類利用可能。

  • CSRT
  • GOTURN
  • KCF
  • MIL

以下、cv2.legacy.Tracker*_create()で利用可能

  • Boosting
  • MOSSE
  • MedianFlow
  • TLD

ver. 3.4.5~3.4.15 / ver. 4.5.0

8種類利用可能。

  • CSRT
  • GOTURN
  • KCF
  • MIL
  • Boosting
  • MOSSE
  • MedianFlow
  • TLD

ver. 3.2

6種類利用可能

  • GOTURN
  • MIL
  • Boosting
  • MOSSE
  • MedianFlow
  • TLD