dlib库学习-----单目标追踪

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类的使用

官方文档


   1.实现功能      

             该类主要实现视频流中的单目标跟踪。即输入一个目标和一个视频流,输出该目标在视频各桢中的位置。

    2. 主要函数

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)

    [1]get_position()

              该函数无需输入参数,返回值为跟踪目标在当前桢的位置(类型为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())

    [2]start_track(image, bounding_box) 

                该函数用来启动追踪器。输入参数为image(视频的当前帧),bounding_box(表示目标的矩形框),无返回值

                 image-------->需要是numpy对象或者8bit的灰度或RGB图象

                 bounding_box--------->需要为dlib.drectangle或者dlib.rectangle类型,两者的详细区别请看这里。这里简单提一下               dlib.rectangle的坐标用整数表示,dlib.drectangle用浮点数表示

    [3]update(image,guess=None)   ------> confidence

               该函数用来更新跟踪目标的位置,是跟踪算法的主体。输入参数为image(视频的当前帧,需要为numpy对象或者8bit         的灰度图或RGB图像),guess表示使用者猜测对象当前的可能位置(dlib.drectangle或者dlib.rectangle类型),可缺省。

              该函数返回值为float型的confidence,表示预测出的位置含有跟踪对象的置信度

               当guess缺省时,在整张图片中搜索跟踪对象。

               当指定guess时,仅在guess指定的小范围内搜索对象。个人觉得是为了降低运算量。

3.使用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()

 

 

 

你可能感兴趣的:(目标追踪,dlib,目标追踪)