1、BOOSTING Tracker
和Haar cascades(AdaBoost)背后所用的机器学习算法相同,但是距其诞生已有十多年了。这一追踪器速度较慢,并且表现不好,但是作为元老还是有必要提及的。(最低支持OpenCV 3.0.0)
2、MIL Tracker
比上一个追踪器更精确,但是失败率比较高。(最低支持OpenCV 3.0.0)
3、KCF Tracker
比BOOSTING和MIL都快,但是在有遮挡的情况下表现不佳。(最低支持OpenCV 3.1.0)
4、CSRT Tracker
比KCF稍精确,但速度不如后者。(最低支持OpenCV 3.4.2)
5、MedianFlow Tracker
在报错方面表现得很好,但是对于快速跳动或快速移动的物体,模型会失效。(最低支持OpenCV 3.0.0)
6、TLD Tracker
我不确定是不是OpenCV和TLD有什么不兼容的问题,但是TLD的误报非常多,所以不推荐。(最低支持OpenCV 3.0.0)
7、MOSSE Tracker
速度真心快,但是不如CSRT和KCF的准确率那么高,如果追求速度选它准没错。(最低支持OpenCV 3.4.1)
8、GOTURN Tracker
这是OpenCV中唯一一深度学习为基础的目标检测器。它需要额外的模型才能运行,本文不详细讲解。(最低支持OpenCV 3.2.0)
我个人的建议:
如果追求高准确度,又能忍受慢一些的速度,那么就用CSRT
如果对准确度的要求不苛刻,想追求速度,那么就选KCF
纯粹想节省时间就用MOSSE
从OpenCV 3开始,目标检测器得到了快速发展,下表总结了不同版本的OpenCV中可适用的追踪器:
开始动手
想要用OpenCV进行目标追踪,首先打开一个新文件,将它命名为opencv_object_tracker.py,然后插入以下代码:
#import the necessary packages
from imutils.video import VideoStream
from imutils.video import FPS
import argparse
import imutils
import time
import cv2
然后开始分析命令行参数:
ap = argparse.ArgumentParser()
ap.add_argument("-V", "--Video",type=str,
help="path to input video file")
ap.add_argument("-t", "--tracker",type=str,default="kcf",
help="OpenCV object tracker type")
args = vars(ap.parse_args())
我们的命令行参数包括:
--video:到达输入视频文件的替代路线。如果该参数失效,那么脚本将会使用你的网络摄像头。
--tracker:假设默认追踪器设置的是kcf,一整列可能的追踪器代码表示下一个代码块或下方的部分。