主要内容

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

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

概述

目标探测和跟踪在许多计算机视觉应用,包括动作识别,汽车安全和监视重要。在这个例子中,你将开发用于在由摄像头拍摄的实时视频流跟踪单个面的简单系统。MATLAB通过硬件支持包,您将需要下载和安装金宝app,以运行这个例子提供了网络摄像头的支持。该支持包金宝app是通过提供金宝app支持包安装程序

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

在跟踪模式下,您必须使用跟踪点跟踪点。当你跟踪点,它们中的一些会被丢失,因为闭塞。如果被跟踪的点的数量下降到低于一个阈值,这意味着面不再被跟踪。然后,您必须切换到检测模式,试图重新获得的脸。

设置

创建用于检测的面孔,跟踪点,获取和显示的视频帧的对象。

%创建面部检测器对象。faceDetector = vision.CascadeObjectDetector ();创建点跟踪器对象。pointTracker = vision.PointTracker(“MaxBidirectionalError”,2);%创建摄像头对象。凸轮=网络摄像头();%采集一帧来获得它的大小。videoFrame =快照(cam);frameSize =大小(videoFrame);%创建视频播放器对象。放像机=愿景。放像机(“位置”[100 100 [框架尺寸(2),框架尺寸(1)] + 30]);

检测和跟踪

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

runLoop = TRUE;量numPts = 0;帧数又= 0;runLoop &&帧数又<400%获取下一帧。videoFrame =快照(cam);videoFrameGray = rgb2gray (videoFrame);frameecount = frameecount + 1;如果numPts < 10%检测模式。BBOX = faceDetector.step(videoFrameGray);如果~ isempty (bbox)%发现检测到的区域内眼角点。点= detectMinEigenFeatures (videoFrameGray,“投资回报率”,BBOX(1,:));重新初始化点跟踪器。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);%显示检测的角点。videoFrame = insertMarker(videoFrame,xyPoints,“+”“颜色”'白色的');结尾其他的%跟踪模式。[xyPoints,isFound] =步骤(pointTracker,videoFrameGray);visiblePoints = xyPoints(isFound,:);oldInliers = oldPoints(isFound,:);量numPts =尺寸(visiblePoints,1);如果numPts > = 10估计旧点之间的几何变换%,而新的点。[XForm的,inlierIdx] = estimateGeometricTransform2D(......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);

参考文献

中提琴,保罗·琼斯,迈克尔J.“使用简单功能的升压级联快速目标检测”,IEEE CVPR,2001。

布鲁斯D.卢卡斯和金出武雄。一种迭代图像配准技术在立体视觉的应用。国际人工智能联合会议,1981。

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

剑波石和Carlo Tomasi的。好的特点进行跟踪。IEEE会议计算机视觉与模式识别,1994年。

兹德涅克Kalal,克里斯蒂安米科瓦伊奇克和吉日麦塔斯。正倒向错误:跟踪故障的自动检测。国际会议模式识别,2010