网页采集器的自动识别算法(1.人脸追踪技术之基于边界框跟踪的方法介绍-上海怡健医学)
优采云 发布时间: 2022-03-04 23:17网页采集器的自动识别算法(1.人脸追踪技术之基于边界框跟踪的方法介绍-上海怡健医学)
1. 人脸追踪技术介绍
基于判别相关滤波器(DCF)的视觉跟踪器具有优异的性能和较高的计算效率,可用于实时应用。DCF 跟踪器是一种非常流行的基于边界框跟踪的方法。在 dlib 库中实现了一个基于 DCF 的跟踪器,可以很容易地用于对象跟踪。在本文中,我们将描述如何使用这个跟踪器进行人脸和用户选择的对象跟踪,也称为判别尺度空间跟踪器(DSST),跟踪器只需要输入原创视频和初始位置的边界框目标,然后跟踪器自动预测目标的轨迹。
2. 使用基于 dlib DCF 的跟踪器进行人脸跟踪
在做人脸跟踪的时候,我们首先使用dlib人脸检测器进行初始化,然后使用基于dlib DCF的跟踪器DSST进行人脸跟踪。调用以下函数来初始化关联的跟踪器:
tracker = dlib.correlation_tracker()
复制代码
这将使用默认值(filter_size = 6, num_scale_levels = 5, scale_window_size = 23, regularizer_space = 0.001, nu_space = 0.025, regularizer_scale = 0.001, nu_scale = 0.025, scale_pyramid_alpha = 1.020) 初始化跟踪器,filter_size和num_scale_levels的值越大,跟踪精度越高,但也需要更多的计算能力;推荐值filter_size的为5、6和7;num_scale_levels的推荐值为4、5和6。可以使用tracker.start_track()启动跟踪,在开始跟踪之前,我们需要进行人脸检测并将检测到的人脸位置传递给这个方法:
if tracking_face is False:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 尝试检测人脸以初始化跟踪器
rects = detector(gray, 0)
# 检查是否检测到人脸
if len(rects) > 0:
# 开始追踪
tracker.start_track(frame, rects[0])
tracking_face = True
复制代码
当检测到人脸时,人脸跟踪器将开始跟踪边界框内的内容。为了更新被跟踪对象的位置,需要调用 tracker.update() 方法:
tracker.update(frame)
复制代码
tracker.update() 方法更新跟踪器并返回衡量跟踪器置信度的指标,可用于通过人脸检测重新初始化跟踪器。要获取被跟踪对象的位置,请调用 tracker.get_position() 方法:
pos = tracker.get_position()
复制代码
tracker.get_position() 方法返回被跟踪对象的位置。最后,绘制人脸的预测位置:
cv2.rectangle(frame, (int(pos.left()), int(pos.top())), (int(pos.right()), int(pos.bottom())), (0, 255, 0), 3)
复制代码
下图是人脸跟踪算法的跟踪效果过程:
在上图中,您可以看到算法当前正在跟踪检测到的人脸,您也可以按数字 1 重新初始化跟踪。
3. 使用基于 dlib DCF 的跟踪器进行对象跟踪
基于 dlib DCF 的跟踪器可用于跟踪面部以外的任意对象。接下来,我们使用鼠标选择要跟踪的对象,并*敏*感*词*键盘事件,如果我们按下 1,我们将开始跟踪预定义的边界框内的对象;如果我们按下 2,预定义的边界框将被清除,跟踪算法将停止,并等待用户选择另一个边界框。比如我们对检测Miss和Sister不感兴趣,但更喜欢猫,那么我们可以先用鼠标画一个矩形选择猫,然后按1开始跟踪优采云,如果我们要跟踪其他物体,我们可以按 2 重绘矩形和轨迹。
# 设置并绘制一个矩形,跟踪矩形框内的对象
if len(points) == 2:
cv2.rectangle(frame, points[0], points[1], (0, 0, 255), 3)
dlib_rectangle = dlib.rectangle(points[0][0], points[0][1], points[1][0], points[1][1])
if tracking_face is True:
# 更新跟踪器并打印测量跟踪器的置信度
print(tracker.update(frame))
# 获取被跟踪对象的位置
pos = tracker.get_position()
# 绘制被跟踪对象的位置
cv2.rectangle(frame, (int(pos.left()), int(pos.top())), (int(pos.right()), int(pos.bottom())), (0, 255, 0), 3)
复制代码
如下图,我们可以看到算法跟踪物体并实时输出:
概括
dlib库实现了一个基于DCF的跟踪器,非常适合人脸跟踪。使用 dlib.correlation_tracker() 函数初始化跟踪器,使用 tracker.start_track() 函数开始跟踪对象,使用 tracker.update() 函数更新跟踪器跟踪器并返回跟踪器置信度。要获取被跟踪对象的位置,需要使用 tracker.get_position() 函数。