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

此示例使用KLT算法显示如何在实时视频流中自动检测和跟踪面部。

概述

对象检测和跟踪在许多计算机视觉应用中非常重要,包括活动识别,汽车安全和监视。在此示例中,您将开发一个简单的系统,用于跟踪由网络摄像头捕获的实时视频流中的单个面部。MATLAB通过硬件支持包提供网络摄像头支持,万博1manbetx您需要下载并安装以运行此示例。支持包可万博1manbetx通过以下方式获得万博1manbetx支持包安装程序

该示例中的面部跟踪系统可以是两种模式之一:检测或跟踪。在检测模式中,您可以使用aVision.cascadeObjectDetector对象以检测当前帧中的面部。如果检测到脸部,则必须检测脸部上的角点,初始化aVision.PointCracker.对象,然后切换到跟踪模式。

在跟踪模式下,您必须使用点跟踪器跟踪点。当您跟踪点时,由于遮挡,其中一些将丢失。如果被跟踪的点数低于阈值,这意味着不再被跟踪面部。然后,您必须切换回检测模式以尝试重新获取面部。

设置

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

%创建面部探测器对象。FaceDetector = Vision.cascadeObjectDetector();%创建点跟踪器对象。pointtracker = Vision.PointCracker('maxbidirectionalerror',2);%创建网络摄像头对象。凸轮=网络摄像头();%捕获一帧以获得其大小。视频rame =快照(Cam);Framesize = size(视频rame);%创建视频播放器对象。VideoPlayer = Vision.videoplayer('位置',[100 100 [框架(2),帧质化(1)] + 30);

检测和跟踪

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

runloop = true;numpts = 0;framecount = 0;尽管Runloop && framecount <400%得到下一帧。视频rame =快照(Cam);videoframegray = rgb2gray(视频rame);framecount = framecount + 1;如果numpls <10%检测模式。bbox = facedetector.step(视频ramegray);如果〜isempty(bbox)%找到检测到的区域内的角点。点=侦听(VideoframeGray,'roi',bbox(1,:));%重新初始化点跟踪器。xypoints = points.location;numpts = size(xypoints,1);释放(PointTracker);初始化(PointTracker,Xypoints,VideoframeGray);%保存点的副本。oldPoints = Xypoints;%将表示为[x,y,w,h]表示为的矩形[x,y]四个角的%m-by-2矩阵。这需要%以便能够将边界框转换为显示%面部的方向。bboxpoints = bbox2points(bbox(1,:));%将框角转换为[x1 y1 x2 y2 x3 y3 x4 y4]InsertShape所需的%格式。BboxPolygon = Rehape(BboxPoints',1,[]);%在检测到的面周围显示边界框。视频rame = insertshape(视频rame,'多边形',bboxpolygon,'行宽',3);%显示检测到的角落。视频rame = InsertMarker(视频帧,XYPOINTS,'+''颜色''白色的');结尾别的%跟踪模式。[Xypoints,ISFound] =步骤(PointTracker,VideoframeGray);VisiblePoints = XYPOINTS(ISFOUND,:);oderinliers = oldPoints(isfound,:);numpts = size(visiblepoints,1);如果numpts> = 10%估计旧点之间的几何变换%和新点。[XForm,oddininliers,VisiblePoints] = estImateGeometricTransform(......旧单,观光点,'相似''maxdistance'4);%将转换应用于边界框。bboxpoints = TransformPointSforward(XForm,BboxPoints);%将框角转换为[x1 y1 x2 y2 x3 y3 x4 y4]InsertShape所需的%格式。BboxPolygon = Rehape(BboxPoints',1,[]);%在被跟踪的脸部周围显示一个边界框。视频rame = insertshape(视频rame,'多边形',bboxpolygon,'行宽',3);%显示跟踪点。视频rame = InsertMarker(视频帧,visiblepoints,'+''颜色''白色的');%重置点。OldPoints = VisiblePoints;设定值(PointTracker,OldPoints);结尾结尾%使用Video Player对象显示带注释的视频帧。步骤(Videoplayer,Videoframe);%检查视频播放器窗口是否已关闭。Runloop = Inopen(视频播放器);结尾% 清理。清除cam;释放(Videoplayer);释放(PointTracker);释放(FaceDetector);

参考

Viola,Paul A.和Jones,Michael J.“使用促进级联的简单功能的快速对象检测”,IEEE CVPR,2001。

Bruce D. Lucas和Takeo Kanade。一种迭代图像配准技术,其应用于立体视觉。1981年人工智能国际联合会议。

卡洛托马斯和果汁kanade。点特征的检测和跟踪。卡内基梅隆大学技术报告CMU-CS-91-132,1991。

建立施和卡洛托马斯。追踪的良好功能。电脑愿景和模式识别的IEEE会议,1994年。

Zdenek Kalal,Krystian Mikolajczyk和Jiri Matas。前后错误:自动检测跟踪故障。2010年模式识别国际会议