dlib中单目标追踪算法具体实现为dlib.
correlation_tracker类。
算法来源
Danelljan, Martin, et al. ‘Accurate scale estimation for robust visual tracking.’ Proceedings of the British Machine Vision Conference BMVC. 2014. 为深度学习大兴之前,传统方法中效果最好的。下面主要讲讲dlib.
correlation_tracker类的使用
官方文档
该类主要实现视频流中的单目标跟踪。即输入一个目标和一个视频流,输出该目标在视频各桢中的位置。
class dlib.correlation_tracker():
__init__(self: dlib.correlation_tracker) → None
get_position(self: dlib.correlation_tracker) → dlib.drectangle
start_track(*args, **kwargs)
update(*args, **kwargs)
该函数无需输入参数,返回值为跟踪目标在当前桢的位置(类型为dlib.drectangle)参考如下示例:
pos = tracker.get_position()
#(startX,startY)为矩形框的左上角坐标 (endX,endY)为矩形框的右下角坐标
startX = int(pos.left())
startY = int(pos.top())
endX = int(pos.right())
endY = int(pos.bottom())
该函数用来启动追踪器。输入参数为image(视频的当前帧),bounding_box(表示目标的矩形框),无返回值
image-------->需要是numpy对象或者8bit的灰度或RGB图象
bounding_box--------->需要为dlib.drectangle或者dlib.rectangle类型,两者的详细区别请看这里。这里简单提一下 dlib.rectangle的坐标用整数表示,dlib.drectangle用浮点数表示
该函数用来更新跟踪目标的位置,是跟踪算法的主体。输入参数为image(视频的当前帧,需要为numpy对象或者8bit 的灰度图或RGB图像),guess表示使用者猜测对象当前的可能位置(dlib.drectangle或者dlib.rectangle类型),可缺省。
该函数返回值为float型的confidence,表示预测出的位置含有跟踪对象的置信度
当guess缺省时,在整张图片中搜索跟踪对象。
当指定guess时,仅在guess指定的小范围内搜索对象。个人觉得是为了降低运算量。
dlib.
correlation_tracker跟踪步骤
[1]:dlib.correlation_tracker()创建一个跟踪类;
[2]:start_track()中设置图片中的要跟踪物体的框;
[3]:update()实时跟踪下一帧;
[4]:get_position()得到跟踪到的目标的位置。
代码如下:
#coding=utf-8
import dlib
import cv2
cap = cv2.VideoCapture('test.avi')
ret, frame = cap.read()
rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) #opencv读入的为BGR格式,dlib需要的是RGB格式
tracker = dlib.correlation_tracker() #建立跟踪器
rect = dlib.rectangle(startX, startY, endX, endY) #生成对象的矩形框
tracker.start_track(rgb, rect) #开始跟踪
ret, frame = cap.read()
while ret:
rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
tracker.update(rgb)
pos = tracker.get_position()
ret, frame = cap.read()