python+OpenCV+dlib实现目标追踪

背景介绍

Dlib是一个深度学习开源工具,基于C++开发,也支持Python开发接口,功能类似于TensorFlow与PyTorch,由于dlib对于人脸特征具有很好的支持,有很多训练好的人脸特征提取模型供开发者使用,所以dlib很适合做人脸项目开发。具体的dlib环境配置方法在这里就不再多做赘述了,网上有很多的相关教程可供参考。

目标追踪

在应用方面,dlib大多数情况下用于人脸检测与人脸识别,然而,dlib还可以用于物体追踪,通过调用Python API中的dlib.correlation_tracker类可以实现一个初步的跟踪结果,具体分为以下四步:
(1) 使用dlib.correlation_tracker()创建一个跟踪类;
(2) start_track()设置图片中要跟踪目标对象的框;
(3) update()实时跟踪下一帧;
(4) get_position()得到跟踪到的目标的位置。

import cv2
import dlib
import glob
#导入人脸检测器,追踪器和所需图片
detector = dlib.get_frontal_face_detector()
tracker = dlib.correlation_tracker()
paths = sorted(glob.glob('video_frames/*.jpg')) #video_frames为当前图片所在文件夹
#追踪图片中的目标对象
for i, path in enumerate(paths):
    img = cv2.imread(path)
    if i == 0:
	    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #转为灰度图像处理
	    dets = detector(gray, 1) #1表示将图片放大一倍,便于检测到更多人脸
	    d=dets[0] #假设图片中只有一个人脸
	    tracker.start_track(img, dlib.rectangle(d.left(),d.top(),d.right(),d.bottom()))
	# 后续帧,自动追踪
	else:
		tracker.update(img)
	box_predict = tracker.get_position() #得到目标的位置
	cv2.rectangle(img,(int(box_predict.left()),int(box_predict.top())),(int(box_predict.right()),int(box_predict.bottom())),(0,255,255),1)
    cv2.imshow('image',img)
	if cv2.waitKey(10) == 27:
	    break
cv2.destroyAllWindows()

通过设置好运行代码之后,就可以实现我们想要的跟踪效果。

你可能感兴趣的:(python+OpenCV+dlib实现目标追踪)