前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单的人脸跟踪

简单的人脸跟踪

作者头像
MachineLP
发布2018-01-09 15:15:47
7450
发布2018-01-09 15:15:47
举报
文章被收录于专栏:小鹏的专栏小鹏的专栏

选用的人脸检测器:NPD Face Detector

单人脸的简单跟踪MATLAB代码。

代码语言:javascript
复制
close all; clear; clc;
mov = VideoReader('test.mov');
modelFile = 'model_frontal.mat'
load(modelFile, 'npdModel')

%原图中检测到的人脸位置
cddBoxX=0;
cddBoxY=0;
cddBoxW=0;
cddBoxH=0;
%在检测人脸时,为下一次检测产生的候选框。
rectX=0;
rectY=0;
rectW=0;
rectH=0;
%检测到的人脸总数
numFaces=0;
%总的检测时间
timeSum=0;
%总共检测的帧数
frameN=0;

for i=1:mov.NumberOfFrames
    img = read(mov, i);
    img = imresize(img,[640, 480]);
    imgCpy = img;
    if(i~=1 && numFaces>0)
        %候选框的生成
	rectX = cddBoxX*0.6;
	rectY = cddBoxY*0.6;
	rectW = cddBoxW*2.5;
	rectH = cddBoxH*2.5;
	%在原图中抠出候选框
	img = imcrop(imgCpy, [rectX ,rectY ,rectW ,rectH]);
    end

    if(numFaces == 0)
	img = imgCpy;
    end
    
    t1 = clock;
    %人脸检测
    rects = DetectFace(npdModel,img);
    t2 = clock;
    timeDet = etime(t2,t1);
    timeSum = timeSum + timeDet;
    frameN = frameN+1;
    fprintf('detect time is: %f\n', timeDet);
    numFaces = length(rects);
    fprintf('%d faces detected.\n', numFaces);


    %判断是在原图上检测的人脸,还是在候选框中检测的人脸,两者的显示是不同的。
    if numFaces > 0
        border = round(size(img,2) / 300);
        if border < 2, border = 2; end

	%注意这是一个单人脸检测的版本。
	maxBox=0;
	for j=1:numFaces
	    areas = rects[j].width * rects[j].height;
	    if(areas>maxBox)
		index = j;
            end
	end
	cddBoxX = rects(index).col;
	cddBoxY = rects(index).row;
	cddBoxW = rects(index).width;
	cddBoxH = rects(index).height;
	
        imgCpy = DrawRectangle(imgCpy, int16(rectX+cddBoxX), int16(rectY+cddBoxY), cddBoxW , cddBoxH , [0 255 0], border);
        cddBoxX = rectX+cddBoxX;
	cddBoxY = rectY+cddBoxY;
	cddBoxW = cddBoxW;
	cddBoxH = cddBoxH;
    end

    if numFaces > 0
        border = round(size(img,2) / 300);
        if border < 2, border = 2; end

	maxBox=0;
	for j=1:numFaces
	    areas = rects[j].width * rects[j].height;
	    if(areas>maxBox)
		index = j;
            end
	end
	cddBoxX = rects(index).col;
	cddBoxY = rects(index).row;
	cddBoxW = rects(index).width;
	cddBoxH = rects(index).height;
	
        imgCpy = DrawRectangle(imgCpy, cddBoxX, cddBoxY, cddBoxW , cddBoxH , [0 255 0], border);
    end
    imshow(imgCpy)
end

timeAvg = timeSum/frameN;
fprintf('average time: %f.\n', timeAvg);
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年09月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
人脸识别
腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档