リアルタイムのカメラで目と口を検出する

17次浏览(最近30天)
tsuyoshi tsunoda
tsuyoshi tsunoda 2021年7月5日
评论道: tsuyoshi tsunoda2021年7月11日
リアルタイムのカメラで目と口の同時検出をしようとしているのですが,どのようなコードで進めればいいか教えていただきたいです。
現状のコードは,目のみは検出することができます
%创建人脸检测对象。
eyeDetector =愿景。CascadeObjectDetector (“EyePairBig”);
创建点跟踪器对象。
pointTracker =愿景。PointTracker (“MaxBidirectionalError”2);
%创建网络摄像机对象。
凸轮=摄像头();
%捕获一帧以获取其大小。
videoFrame =快照(cam);
frameSize =大小(videoFrame);
%创建视频播放器对象。
放像机=愿景。放像机(“位置”, [100 100 [frameSize(2), frameSize(1)]+30]);
runLoop = true;
numPts = 0;
frameCount = 0;
runLoop && frameCount < 400
获得下一帧。
videoFrame =快照(cam);
videoFrameGray = rgb2gray (videoFrame);
frameecount = frameecount + 1;
如果numPts < 10
%检测模式。
bboxeye = eyeDetector.step (videoFrameGray);
如果~ isempty (bboxeye)
%找到被检测区域内的角点。
点= detectMinEigenFeatures (videoFrameGray,“投资回报”bboxeye (:));
重新初始化点跟踪器。
xyPoints = points.Location;
numPts =大小(xyPoints, 1);
释放(pointTracker);
初始化(pointTracker xyPoints videoFrameGray);
%保存分数的副本。
oldPoints = xyPoints;
将矩形[x, y, w, h]转换为an
4个角的[x,y]坐标的m × 2矩阵。这
%需要能够将边界框转换为显示
%面部的方向。
bboxPoints = bbox2points(bboxeye(1,:)));
%将方框角转换为[x1 y1 x2 y2 x3 y3 x4 y4]
insertShape要求的%格式。
bboxPolygon =重塑(bboxPoints', 1, []);
%在检测到的人脸周围显示一个边界框。
videoFrame = insertShape (videoFrame,“多边形”bboxPolygon,“线宽”3);
%显示检测到的角。
= insertMarker(videoFrame, xyPoints,)“+”“颜色”“白色”);
结束
其他的
%跟踪模式。
[xyPoints, isFound] = step(pointTracker, videoFrameGray);
visiblePoints = xyPoints(isFound,:);
olddinliers = oldPoints(isFound,:);
numPts = size(visiblePoints, 1); / /显示时间
如果numPts > = 10
估计旧点之间的几何变换
%和新积分。
[xform, inlierIdx] = estimateGeometricTransform2D(...
oldInliers visiblePoints,“相似”“MaxDistance”4);
oldInliers = oldInliers(inlierIdx,:); / / / / / /
visiblePoints = visiblePoints(inlierIdx,:);
对包围框应用变换。
bboxPoints = transformpointforward (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);
释放(eyeDetector);

接受的答案

健
2021年7月10日
编辑: 2021年7月10日
こちらは,目の探测器のみ用意されているのですね。
こちらをみると,他の部位を検出することもできそうですので,まずはこのファイルを試してみて,それをWEBカメラにあうように改良されてはいかがでしょうか。
3评论
tsuyoshi tsunoda
tsuyoshi tsunoda 2021年7月11日
色々と教えてくださりありがとうございます。

登录评论。

更多的答案(0)

标签

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!