EMgucv 保存从网络摄像头检测到的多张人脸

Posted

技术标签:

【中文标题】EMgucv 保存从网络摄像头检测到的多张人脸【英文标题】:EMgucv save multiple face detected from webcam 【发布时间】:2017-12-22 20:39:35 【问题描述】:

我有一个窗口应用程序,它将检测多张人脸并捕获人脸并保存为图像。我使用 EMGU CV 进行人脸检测,我从示例代码和教程中学习。当它需要将人脸捕获为训练数据集时,它只能存储一张人脸,尽管它检测到了 2 张人脸。我尝试修改代码,但似乎没有按预期工作。下面是代码:

 gray = grabber.QueryGrayFrame().Resize(320, 240, 
 Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);

MCvAvgComp[][] facesDetected = gray.DetectHaarCascade(
            face,
            1.2,
            10,
            Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
            new Size(20, 20));

foreach (MCvAvgComp f in facesDetected[0])

    TrainedFace = currentFrame.Copy(f.rect).Convert<Gray, byte>();

    TrainedFace = result.Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);
    trainingImages.Add(TrainedFace);

    for (int i = 1; i < trainingImages.ToArray().Length + 1; i++)
    
        trainingImages.ToArray()[i - 1].Save(Application.StartupPath + "/TrainedFaces/face" + i + ".bmp");

    

当检测到 2 个人脸时,foreach 循环将循环两次,但人脸保存是相同的。知道出了什么问题吗?

【问题讨论】:

【参考方案1】:

请尝试以下方式

对于检测到的每个人脸,您必须将其添加到训练图像中 你需要将它循环到 for each 循环之外

gray = grabber.QueryGrayFrame().Resize(320, 240, 
Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);

MCvAvgComp[][] facesDetected = gray.DetectHaarCascade(
        face,
        1.2,
        10,
        Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,
        new Size(20, 20));

foreach (MCvAvgComp f in facesDetected[0])

TrainedFace = currentFrame.Copy(f.rect).Convert<Gray, byte>();

TrainedFace = result.Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC);
trainingImages.Add(TrainedFace);


 for (int i = 1; i < trainingImages.ToArray().Length + 1; i++)

    trainingImages.ToArray()[i - 1].Save(Application.StartupPath + "/TrainedFaces/face" + i + ".bmp");

 

我觉得for循环可以改成

int i=1;
foreach(TrainedFace Tface in trainingImages)
  
   Tface.Save(Application.StartupPath + "/TrainedFaces/face" + i + ".bmp")
    i++;
   

请尝试这种方式,它可能会工作..

【讨论】:

我试过了,还是一样。虽然在相机中检测到 2 个不同的面孔,但它绘制了 2 个红色矩形。 foreach 循环了两次,但它保存了同一张脸。

以上是关于EMgucv 保存从网络摄像头检测到的多张人脸的主要内容,如果未能解决你的问题,请参考以下文章

Emgu CV Capture IP 摄像头人脸检测问题

仅捕获检测到的人脸正方形 JS

使用 EmguCV 3.1.0.1 从视频捕获中检测

带有面部检测和形状预测的 Dlib 网络摄像头捕获速度很慢

无法从 emgucv 中的视频中检测到人脸

获取检测到的人脸位图