主要内容

基于CAMShift的人脸检测与跟踪

这个例子展示了如何自动检测和跟踪人脸。

介绍

目标检测和跟踪在许多计算机视觉应用中都很重要,包括活动识别、汽车安全和监视。在本例中,您将开发一个简单的面部跟踪系统,将跟踪问题分为三个独立的问题:

  1. 检测要跟踪的人脸

  2. 识别面部特征以跟踪

  3. 跟踪的脸

第一步:检测要跟踪的面孔

在你开始追踪一张脸之前,你需要先检测它。使用愿景。CascadeObjectDetector在视频帧中检测人脸的位置。级联对象检测器使用Viola-Jones检测算法和训练过的分类模型进行检测。默认情况下,检测器被配置为检测人脸,但也可以配置为其他对象类型。

%创建级联检测器。faceDetector = vision.CascadeObjectDetector ();%读取视频帧并运行检测器。videoFileReader = VideoReader (“visionface.avi”);videoFrame = readFrame (videoFileReader);bbox = step(faceDetector, videoFrame);%在检测到的面周围绘制返回的边界框。videoOut = insertObjectAnnotation (videoFrame,“矩形”bbox,“脸”);图,imshow (videoOut)、标题(“发现脸”);

可以使用级联对象检测器在连续的视频帧中跟踪人脸。然而,当脸倾斜或人转头时,你可能会失去追踪。这种限制是由于用于检测的训练分类模型的类型。为了避免这个问题,并且由于对每个视频帧执行人脸检测是计算密集型的,本示例使用一个简单的面部特征进行跟踪。

第二步:识别面部特征

一旦在视频中找到了人脸,下一步就是识别一个可以帮助你跟踪人脸的特征。例如,您可以使用形状、纹理或颜色。选择一个对象独有的特性,即使在对象移动时也保持不变。

在本例中,您使用肤色作为跟踪的特性。肤色在脸部和背景之间提供了很大的对比,并且不会随着脸部旋转或移动而改变。

通过从转换到HSV颜色空间的视频帧中提取Hue来获取肤色信息。

[hueChannel, ~, ~] = rgb2hsv (videoFrame);%显示Hue通道数据,并在脸部周围绘制边界框。图,imshow (hueChannel)、标题(“色彩通道数据”);矩形(“位置”bbox (1:)“线宽”,2,“EdgeColor”(1 1 0))

第三步:追踪脸部

选择肤色作为要跟踪的特性后,现在可以使用愿景。HistogramBasedTracker为跟踪。基于直方图的跟踪器使用CAMShift算法,该算法能够使用像素值的直方图跟踪对象。在本例中,Hue通道像素是从被检测人脸的鼻子区域提取出来的。这些像素用于初始化跟踪器的直方图。该示例使用此直方图在连续的视频帧中跟踪对象。

在脸部区域内检测鼻子。鼻子不包含任何背景像素,因此可以更准确地测量肤色。

noseDetector =愿景。CascadeObjectDetector (“鼻子”“UseROI”,真正的);noseBBox = step(noseDetector, videoFrame, bbox(1,:)); / /删除noseBBox创建一个跟踪器对象。追踪= vision.HistogramBasedTracker;的Hue通道像素初始化跟踪器直方图%的鼻子。initializeObject(跟踪、hueChannel noseBBox (1:));%创建用于显示视频帧的视频播放器对象。放像机= vision.VideoPlayer;跟踪人脸在连续的视频帧,直到视频结束。hasFrame (videoFileReader)%提取下一帧视频videoFrame = readFrame (videoFileReader);HSV[hueChannel, ~, ~] = rgb2hsv (videoFrame);%使用Hue通道数据进行跟踪bbox = step(tracker, hueChannel);在被跟踪的对象周围插入一个边界框videoOut = insertObjectAnnotation (videoFrame,“矩形”bbox,“脸”);使用视频播放器对象显示带注释的视频帧步骤(放像机、videoOut);结束%释放资源释放(放像机);

总结

在本例中,您创建了一个简单的人脸跟踪系统,它可以自动检测和跟踪单个人脸。试着改变输入视频,看看你是否能追踪到人脸。如果你注意到跟踪效果不佳,检查Hue通道数据,看看面部区域和背景之间是否有足够的对比度。

参考

G.R. Bradski,“作为感知用户界面组件的实时人脸和目标跟踪”,第四届IEEE计算机视觉应用研讨会论文集,1998。

保罗·a·维奥拉和迈克尔·J·琼斯“基于简单特征的增强级联快速目标检测”,IEEE CVPR, 2001。