主要内容

使用实时视频采集的人脸检测和跟踪

这个例子展示了如何使用KLT算法在实时视频流中自动检测和跟踪人脸。

概述

目标检测和跟踪在许多计算机视觉应用中都很重要,包括活动识别、汽车安全和监视。在本例中,您将开发一个简单的系统,用于跟踪由网络摄像头捕获的实时视频流中的一张脸。MATLAB通过硬件支持包提供网络摄像头支持,金宝app您需要下载并安装该包才能运行本示例。支持包可金宝app通过金宝app支持包安装程序

这个例子中的人脸跟踪系统可以是两种模式之一:检测或跟踪。在检测模式下,可以使用愿景。CascadeObjectDetector对象来检测当前帧中的人脸。如果检测到人脸,则必须检测人脸上的角点,初始化a愿景。PointTracker目标,然后切换到跟踪模式。

在跟踪模式下,您必须使用点跟踪器来跟踪点。当你跟踪这些点时,一些点会因为遮挡而丢失。如果被跟踪的点的数量低于一个阈值,这意味着脸不再被跟踪。然后,你必须切换回检测模式,试图重新获取人脸。

设置

创建用于人脸检测、跟踪点、获取和显示视频帧的对象。

%创建人脸检测对象。faceDetector = vision.CascadeObjectDetector ();创建点跟踪器对象。pointTracker =愿景。PointTracker (“MaxBidirectionalError”2);%创建网络摄像机对象。凸轮=摄像头();%捕获一帧以获取其大小。videoFrame =快照(cam);frameSize =大小(videoFrame);%创建视频播放器对象。放像机=愿景。放像机(“位置”, [100 100 [frameSize(2), frameSize(1)]+30]);

检测和跟踪

从网络摄像头中循环捕获和处理视频帧,以检测和跟踪人脸。循环将运行400帧或直到视频播放器窗口关闭。

runLoop = true;numPts = 0;frameCount = 0;runLoop && frameCount < 400获得下一帧。videoFrame =快照(cam);videoFrameGray = rgb2gray (videoFrame);frameecount = frameecount + 1;如果numPts < 10%检测模式。bbox = faceDetector.step (videoFrameGray);如果~ isempty (bbox)%找到被检测区域内的角点。点= detectMinEigenFeatures (videoFrameGray,“投资回报”bbox (:));重新初始化点跟踪器。xyPoints = points.Location;numPts =大小(xyPoints, 1);释放(pointTracker);初始化(pointTracker xyPoints videoFrameGray);%保存分数的副本。oldPoints = xyPoints;将矩形[x, y, w, h]转换为an4个角的[x,y]坐标的m × 2矩阵。这%需要能够将边界框转换为显示%面部的方向。bboxPoints = bbox2points(bbox(1,:)));%将方框角转换为[x1 y1 x2 y2 x3 y3 x4 y4]insertShape要求的%格式。bboxPolygon =重塑(bboxPoints', 1, []);%在检测到的人脸周围显示一个边界框。videoFrame = insertShape (videoFrame,“多边形”bboxPolygon,“线宽”3);%显示检测到的角。= insertMarker(videoFrame, xyPoints,)“+”“颜色”“白色”);结束其他的%跟踪模式。[xyPoints, isFound] = step(pointTracker, videoFrameGray);visiblePoints = xyPoints(isFound,:);olddinliers = oldPoints(isFound,:);numPts = size(visiblePoints, 1); / /显示时间如果numPts > = 10估计旧点之间的几何变换%和新积分。[xform, inlierIdx] = estimateGeometricTransform2D(...oldInliers visiblePoints,“相似”“MaxDistance”4);oldInliers = oldInliers(inlierIdx,:); / / / / / /visiblePoints = visiblePoints(inlierIdx,:);对包围框应用变换。bboxPoints = transformpointforward (xform, bboxPoints);%将方框角转换为[x1 y1 x2 y2 x3 y3 x4 y4]insertShape要求的%格式。bboxPolygon =重塑(bboxPoints', 1, []);在被跟踪的脸部周围显示一个边界框。videoFrame = insertShape (videoFrame,“多边形”bboxPolygon,“线宽”3);%显示跟踪点。videoFrame = insertMarker(videoFrame, visiblePoints,“+”“颜色”“白色”);%重置点数。oldPoints = visiblePoints;选点(pointTracker oldPoints);结束结束使用视频播放器对象显示带注释的视频帧。步骤(放像机、videoFrame);%检查视频播放窗口是否已关闭。runLoop = isOpen(放像机);结束%清理。清晰的凸轮;释放(放像机);释放(pointTracker);释放(faceDetector);

参考文献

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

布鲁斯·d·卢卡斯和金ade武夫。一种迭代图像配准技术及其在立体视觉中的应用。国际人工智能联合会议,1981年。

卡洛·托马西和金ade武夫。点特征检测与跟踪。卡耐基梅隆大学技术报告

史剑波和卡洛·托马西。良好的功能跟踪。计算机视觉与模式识别,1994。

兹德内克·卡拉尔,克里斯蒂安·米科拉奇克和吉里·马塔斯。Forward-Backward Error:自动检测跟踪失败。国际模式识别会议,2010