【问题标题】:How to obtain a "mugshot" from face detection squares?如何从人脸检测方块中获取“面部照片”?
【发布时间】:2011-08-09 01:15:19
【问题描述】:

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

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

目前我正在使用
http://askernest.com/archive/2008/05/03/face-detection-in-c.aspx
实现 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 个问题。

  • 我们将使用的相机目前无法使用,所以我目前没有捕捉图像的方法。我在哪里可以找到不是纯代名词的人的全身图像,就像谷歌的全身图像搜索一样?
    编辑:“站立的人”是一个很好的搜索:)

【问题讨论】:

  • 那是托马斯海登教堂吗?
  • 是蜘蛛侠里的沙人哈哈

标签: c# face-detection


【解决方案1】:

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

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

【讨论】:

  • 这是我获得当前级联的地方。我不确定我是否想通过构建自己的级联的努力。我没有 1000 张独特面孔的 5000 张图像。
  • 也许有一些“加法规则”适用于级联,因此可以从多个级联构建新的级联,其行为类似于使用所有级联图像进行训练。但对我来说听起来也很复杂..
【解决方案2】:

好的,我想通了,但该项目目前处于停滞状态。
我没有要粘贴的源,因为 VM 需要永远加载。
如果有人真的感兴趣,请告诉我,我会发布。
如果您看到一些看起来可以做得更好的东西,请告诉我。

我采取的步骤如下。

  1. 加载图像,如果高度或宽度大于 500 像素,则将版本的新图像缩小到最大 500 像素的高度或宽度。保存比例。
  2. Harrtraining 的所有正面 Harrcasscades 上运行 C# OpenCV 实现 Ask Ernest
  3. 出于某种原因,Ask Ernest 生成的矩形需要放大 1.3 倍
  4. 生成的矩形使用standard deviation 来消除误报。我对矩形的每个角进行了此操作,以查找每个矩形角与平均角位置的距离。我记下了任何一个角不正常的矩形,并将其从候选矩形列表中删除。
  5. 从剩余矩形中获取平均矩形,然后在问题中应用上面的“GetMugshotRectangle”。
  6. 使用我们在步骤 1 中保存的比例重新缩放面部照片矩形。
  7. 从原始图像中剪下面部照片并保存到新位置。

完成!

【讨论】:

    【解决方案3】:

    我建议你使用 Upper-body Haar 级联文件,它将返回矩形直到肩膀。 请在“http://alereimondo.no-ip.org/OpenCV/34”找到头肩级联文件

    【讨论】:

      猜你喜欢
      • 2018-03-19
      • 2017-07-30
      • 1970-01-01
      • 2020-08-03
      • 2015-02-10
      • 2011-04-27
      • 2020-06-03
      • 2021-05-24
      • 1970-01-01
      相关资源
      最近更新 更多