主要内容

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

这个例子展示了如何自动检测和跟踪的脸在视频直播,使用KLT算法。

概述

对象检测和跟踪是重要的活动在许多计算机视觉应用程序包括识别、汽车安全、监视。在这个例子中,您将开发一个简单的系统来跟踪一个面对摄像头捕获视频直播。MATLAB提供摄像头支持通过硬件支持包,您需万博1manbetx要下载并安装运行这个例子。可以通过万博1manbetx支持包万博1manbetx支持包安装程序

面对跟踪系统在这个例子可以在两种模式:检测或跟踪。在检测模式下,你可以使用一个vision.CascadeObjectDetector对象在当前帧检测的脸。如果检测到脸,那么你必须检测角点在脸上,初始化一个vision.PointTracker对象,然后切换到跟踪模式。

在跟踪模式中,你必须使用点跟踪器跟踪点。当你跟踪点,其中一些将会丢失,因为阻塞。如果要跟踪点的数量低于阈值,这意味着面对不再是被跟踪。你必须然后切换回检测模式,试图重新获得。

设置

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

%创建面对探测器对象。faceDetector = vision.CascadeObjectDetector ();%创建重点跟踪对象。pointTracker = vision.PointTracker (“MaxBidirectionalError”2);%创建远程对象。凸轮=摄像头();%获取一帧大小。videoFrame =快照(cam);frameSize =大小(videoFrame);%创建视频播放器对象。放像机= vision.VideoPlayer (“位置”100年[100 [frameSize (2), frameSize (1)] + 30]);

检测和跟踪

捕获和处理网络摄像头的视频帧循环探测和跟踪的脸。400帧的循环运行,直到视频播放器窗口关闭。

runLoop = true;numPts = 0;frameCount = 0;runLoop & & frameCount < 400%得到下一帧。videoFrame =快照(cam);videoFrameGray = im2gray (videoFrame);frameCount = frameCount + 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)成一个% M-by-2 (x, y)坐标矩阵的四个角。这%是需要能够改变边界框显示%的方向面对。:bboxPoints = bbox2points (bbox (1));%将盒子角落转换成(x1 y1 x2 y2 x3 y3 x4 y4)% insertShape所需的格式。bboxPolygon =重塑(bboxPoints ', 1, []);%显示一个边界框周围发现的脸。videoFrame = insertShape (videoFrame,“多边形”bboxPolygon,“线宽”3);%显示检测到的角落。videoFrame = insertMarker (videoFrame xyPoints,“+”,“颜色”,“白色”);结束其他的%跟踪模式。[xyPoints, isFound] = (pointTracker videoFrameGray)步;visiblePoints = xyPoints (isFound:);oldInliers = oldPoints (isFound:);numPts =大小(visiblePoints, 1);如果numPts > = 10%估计老点之间的几何变换%和新观点。[xform, inlierIdx] = estgeotform2d (oldInliers visiblePoints,“相似”,“MaxDistance”4);oldInliers = oldInliers (inlierIdx:);visiblePoints = visiblePoints (inlierIdx:);%转换应用于边界框。bboxPoints = transformPointsForward (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);

引用

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

布鲁斯·d·卢卡斯和金。一个迭代的图像配准技术应用立体视觉。人工智能国际联合大会,1981年。

卡洛预和金。检测和跟踪点的特性。卡内基梅隆大学技术报告cmu - cs - 91 - 132, 1991。

简帛史和卡洛预。良好的跟踪特性。IEEE计算机视觉与模式识别会议,1994。

兹德内克Kalal。Krystian Mikolajczyk和吉马特斯。Forward-Backward错误:自动检测跟踪失败。模式识别国际会议上,2010年