主要内容

基于实时视频采集的人脸检测与跟踪

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

概述

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

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

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

设置

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

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

检测与跟踪

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

runLoop = true;numPts = 0;frameCount = 0;runLoop && frameCount < 400获取下一帧。视频帧=快照(凸轮);videoFrameGray = rgb2gray(videoFrame);frameCount = frameCount + 1;如果numPts < 10检测模式。bbox = faceDetector.step(videoFrameGray);如果~ isempty (bbox)在检测区域内找到角点。点= detectMinEigenFeatures(videoFrameGray,“投资回报”, bbox(1,:));重新初始化点跟踪器。xyPoints = points.Location;numPts = size(xyPoints,1);释放(pointTracker);初始化(pointTracker, xyPoints, videoFrameGray);保存分数的副本。oldPoints = xyPoints;将表示为[x, y, w, h]的矩形转换为an% m × 2矩阵的[x,y]坐标的四个角。这%需要能够将包围框转换为显示脸的朝向。bboxPoints = bbox2points(bbox(1,:));将方框角转换为[x1 y1 x2 y2 x3 y3 x4 y4]insertShape所需的%格式。bboxPolygon =重塑(bboxPoints', 1, []);在检测到的人脸周围显示一个包围框。视频框架=插入形状(视频框架,“多边形”bboxPolygon,“线宽”3);显示检测到的角。视频帧= insertMarker(视频帧,xyPoints,“+”“颜色”“白色”);结束其他的跟踪模式。[xyPoints, isFound] = step(pointTracker, videoFrameGray);visiblePoints = xyPoints(isFound,:);oldInliers = oldPoints(isFound,:);numPts = size(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, []);在被跟踪的脸部周围显示一个包围框。视频框架=插入形状(视频框架,“多边形”bboxPolygon,“线宽”3);显示跟踪点。视频帧= insertMarker(视频帧,visiblePoints,“+”“颜色”“白色”);重置分数。oldPoints = visiblePoints;选点(pointTracker oldPoints);结束结束使用视频播放器对象显示带注释的视频帧。步骤(放像机、videoFrame);检查视频播放器窗口是否关闭。%runLoop = isOpen(videoPlayer);结束打扫卫生。清晰的凸轮;释放(放像机);释放(pointTracker);释放(faceDetector);

参考文献

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

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

Carlo Tomasi和Takeo Kanade。点特征的检测与跟踪。卡内基梅隆大学技术报告cmu - cs91 -132, 1991。

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

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