C# 如何获得一个;“照片”;从人脸检测方块?

C# 如何获得一个;“照片”;从人脸检测方块?,c#,face-detection,C#,Face Detection,我正在构建一个应用程序,它将拍摄一个人的全身图像,并为此人生成一张“照片” 面部照片是指一个人的整个面部、颈部、头发和耳朵的图像,与另一张面部照片的大致尺寸相同 目前我正在使用 为了实现OpenCV,我正在使用 harrcascade_frontalface_default.xml harrcascade_frontalface_alt.xml harrcascade_frontalface_alt2.xml harrcascade_frontalface_alt_tree.xml

我正在构建一个应用程序,它将拍摄一个人的全身图像,并为此人生成一张“照片”

面部照片是指一个人的整个面部、颈部、头发和耳朵的图像,与另一张面部照片的大致尺寸相同

目前我正在使用

为了实现OpenCV,我正在使用

harrcascade_frontalface_default.xml  
harrcascade_frontalface_alt.xml  
harrcascade_frontalface_alt2.xml  
harrcascade_frontalface_alt_tree.xml
就像我的瀑布一样

我使用所有的级联,因为单个级联无法检测到我所有的脸。在我得到所有级联检测到的所有人脸后,我找到了我的平均正方形,并用它来最终猜测照片的高度和宽度

我的问题是三个部分

  • 我目前的进程相当缓慢。如何加快检测过程?
    编辑:我发现处理时间与照片大小直接相关。缩小照片的尺寸可能会有帮助

  • 单个级联不会检测到我遇到的所有人脸,因此我将使用所有人脸。这当然会产生许多不同的方块和一些误报。我可以使用什么方法来识别误报并将其排除在均方计算之外?例如
    编辑:我正在实现标准偏差内的平均值。我很快就会发布代码

  • 考虑到面部的方坐标,我不确定找到这张照片的最佳方法。在哪里可以找到面部与面部照片的比例?
    编辑:解决了这个问题。假设我所有的头都是他们脸的比例

    static public Rectangle GetMugshotRectangle(Rectangle rFace)
    {
        int y2, x2, w2, h2;
    
        //adjust as neccessary
        double heightRatio = 2;
    
        y2 = Convert.ToInt32(rFace.Y - rFace.Height * (heightRatio - 1.0) / 2.0);
        h2 = Convert.ToInt32(rFace.Height * heightRatio);
        //height to width ratio is 1.25 : 1 in mugshots
        w2 = Convert.ToInt32(h2 * 4 / 5);
        x2 = Convert.ToInt32((rFace.X + rFace.Width / 2) - w2 / 2);
    
        return new Rectangle(x2, y2, w2, h2);
    }
    

    我只需要消除那些误报

好的,那就4个问题吧

  • 我们将要使用的相机目前已经不能使用了,所以我目前还没有一种拍摄图像的方法。我在哪里可以找到与谷歌的全身图像搜索不同的人的全身图像?
    编辑:“站着的人”是一个很好的搜索:)

如果以这种方式设置,单个级联可以完成所有级联的功能,而且它不会给您提供多个可供判断的结果。您使用的级联可能在它们所构成的教学图片集合或某些参数方面有所不同


可以找到关于如何构建自己的级联的教程。获取用于训练您使用的四个级联的图片是很有用的,但我不知道它们是否公开提供。

好的,我想出来了,但该项目目前还处于搁置状态。
我没有要粘贴的源代码,因为虚拟机需要很长时间才能加载。
如果有人真的感兴趣,请告诉我,我会发布。
如果你看到一些看起来可以做得更好的事情,请告诉我

我采取的步骤如下

  • 加载图像,如果高度或宽度大于500像素,则生成一个版本的新图像,该版本的最大高度或宽度为500px。保存天平
  • 在的所有正面上运行C#OpenCV实现
  • 出于某种原因,Ask Ernest生成的矩形需要放大1.3倍
  • 使用生成的矩形删除误报。我对矩形的每个角点都这样做,找到每个矩形角点离平均角点位置的距离。我记下了任何一个角不正常的矩形,并将其从候选矩形列表中删除
  • 从剩余矩形中获取平均矩形,并在问题中应用上面的“GetMugshotRectangle”
  • 使用我们在第1步中保存的比例,重新缩放照片矩形
  • 从原始图像中剪下照片并保存到新位置

  • 完成了

    我建议您使用上半身Haar cascade文件,该文件将返回到肩部的矩形。
    请在“

    找到头肩瀑布文件,是托马斯·海登教堂吗?是《蜘蛛侠哈哈塔》中的沙人,是我获得当前瀑布的地方。我还不确定我是否想要通过努力来构建自己的级联。我没有1000张独特面孔的5000张图片。也许有一些“加法规则”适用于级联,因此可以从多张图片中构建一个新的级联,就像在所有级联图片中训练一样。但对我来说也很复杂。。