opencv目标跟踪概述和人脸跟踪

概述

opencv内部实现了一些单目标跟踪算法,可以很方便的使用。

这里说的目标跟踪不是多目标跟踪,往往是需要人工或程序给定初始目标位置。

资源及跟踪算法介绍

目前看到的比较好的opencv目标跟踪算法资源在这里:https://www.learnopencv.com/object-tracking-using-opencv-cpp-python/

这个页面介绍了几个常用的跟踪算法:

  • BOOSTING Tracker:基于在线Adaboosting的跟踪算法,这个算法也经常被使用 HAAR级联的人脸检测算法使用。算法比较老,效果一般,一般不推荐使用
  • MIL Tracker:原理与上面的很类似,区别在于除了当前位置,还把周围部分区域作为positive example。导致跟踪的目标经常不在正中间。这个算法在部分遮挡下也有不错的表现,在没有KCF之前可以作为首选。缺点也有,不能从完全遮挡中恢复
  • KCF Tracker:全称是Kernelized Correlation Filters,利用了上面两个跟踪算法的一些原理。这个跟踪器利用了这个事实:在MIL跟踪器中使用的多个正样本有很大的重叠区域。这些重叠的数据可以被这个跟踪器有效利用,使跟踪更快、更准确。综合来说,速度和精度都比上面两个好,但是完全遮挡后不可恢复。
  • TLD Tracker:TLD表示Tracking, learning and detection.就像名字里说的,这个算法把长期跟踪问题分解为(短期的)三个子任务:tracking, learning, detection。这个跟踪器的输出会跳来跳去,好处就是可以在物体大小变化、移动和遮挡的情况下有不错的表现,所以比较适合有遮挡的物体跟踪。
  • MEDIANFLOW Tracker:这个跟踪器在时间的前向和后向上做跟踪。当物体于运动方向有规则和没有遮挡时,它的效果是最好的。
  • GOTURN tracker:这是一个机遇卷积的深度模型,利用预训练好的caffe模型。可以下载opencv预训练的模型,地址在:https://github.com/opencv/opencv_extra/tree/c4219d5eb3105ed8e634278fad312a1a8d2c182d/testdata/tracking。但是有个bug,这里的解决方法是:
In goturn.prototxt,
replace all "data1" to ".data1" & "data2" to ".data2"

亲测有效,不过速度很慢,cpu上也就10fps.GOTURN对于外形、视角、光线的变化适应性较强,对于遮挡处理的不好。

对于人脸的跟踪效果

测试对象为画面中比较近的单个人脸,运动慢,有转动,无遮挡和明显光线变化。

重点考察KCF、MEDIANFLOW和GOTURN。

速度:MEDIANFLOW > KCF > GOTURN

精度:MEDIANFLOW > KCF > GOTURN

其实,在近场人脸场景下,MIL和KCF效果差不多,只是慢一点,跟踪稳定性上还有点优势。
最后选择了MEDIANFLOW作为人脸跟踪算法。

源码

源码在这里,我就不贴了,确实可以跑的:
https://www.learnopencv.com/object-tracking-using-opencv-cpp-python/

猜你喜欢

转载自blog.csdn.net/yuanlulu/article/details/80900100