主要内容

使用CAMShift人脸检测和跟踪

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

介绍

对象检测和跟踪是重要的活动在许多计算机视觉应用程序包括识别、汽车安全、监视。在本例中,您将开发一个简单的脸跟踪系统跟踪问题划分成三个独立的问题:

  1. 检测人脸追踪

  2. 识别面部特征跟踪

  3. 跟踪的脸

步骤1:检测跟踪

在开始跟踪之前,首先需要检测它。使用vision.CascadeObjectDetector检测在视频帧的位置。级联对象探测器使用Viola-Jones检测算法和训练分类模型检测。默认情况下,探测器被配置为检测的脸,但它可以配置为其他对象类型。

%创建一个级联探测器对象。faceDetector = vision.CascadeObjectDetector ();%读一个视频帧并运行探测器。videoFileReader = VideoReader (“visionface.avi”);videoFrame = readFrame (videoFileReader);bbox =步骤(faceDetector videoFrame);%画出周围的边界框返回检测到的脸。videoOut = insertObjectAnnotation (videoFrame,“矩形”bbox,“脸”);图,imshow (videoOut)、标题(“发现脸”);

您可以使用级联对象探测器在连续的视频帧跟踪别人的脸。然而,当面对倾斜或人把他们的头,你可能会失去跟踪。这个限制是由于训练分类模型用于检测的类型。为了避免这个问题,因为执行人脸检测每个视频帧的运算量,这个示例使用一个简单的面部特征跟踪。

第二步:识别面部特征跟踪

一旦面对位于视频,下一步是确定一个功能,将帮助您跟踪的脸。例如,您可以使用的形状,纹理或颜色。选择对象的功能,是独一无二的,仍然不变即使物体。

在本例中,您使用肤色特征跟踪。肤色之间的对比提供了一个很好的协议的脸和不改变背景和面临旋转或移动。

让肤色信息提取视频帧的色彩转换到HSV颜色空间。

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

步骤3:追踪的脸

与肤色选为跟踪的功能,现在可以使用了vision.HistogramBasedTracker为跟踪。基于直方图的跟踪器使用CAMShift算法,提供能力来跟踪一个物体使用像素值的柱状图。在这个例子中,色调通道像素从鼻子中提取检测区域的脸。这些像素用于初始化的直方图跟踪器。示例跟踪对象在使用该直方图连续的视频帧。

检测面区域内的鼻子。鼻子肤色的测量提供了一种更精确,因为它不包含任何背景像素。

noseDetector = vision.CascadeObjectDetector (“鼻子”,“UseROI”,真正的);noseBBox =步骤(noseDetector、videoFrame bbox (1:));%创建一个跟踪器对象。追踪= vision.HistogramBasedTracker;%初始化跟踪器使用色调直方图通道的像素%的鼻子。initializeObject(跟踪、hueChannel noseBBox (1:));%显示视频帧创建一个视频播放器对象。放像机= vision.VideoPlayer;%跟踪面临多个连续的视频帧到视频结束。hasFrame (videoFileReader)%提取下一个视频帧videoFrame = readFrame (videoFileReader);% RGB - > HSV[hueChannel, ~, ~] = rgb2hsv (videoFrame);%跟踪使用颜色通道数据bbox =步骤(跟踪、hueChannel);%插入一个边界框的对象被跟踪videoOut = insertObjectAnnotation (videoFrame,“矩形”bbox,“脸”);%显示注释视频帧使用视频播放器对象步骤(放像机、videoOut);结束%释放资源释放(放像机);

总结

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

参考

[1]广义相对论Bradski“实时的脸和对象跟踪感知用户界面”的一个组件,程序的第四届IEEE计算机视觉的应用研讨会,1998。

[2]中提琴,Paul a .和琼斯,迈克尔·J。“快速目标检测使用了简单的级联功能”,IEEE CVPR, 2001年。