2011-04-19 39 views
17

我正在构建一个应用程序,它将拍摄一个人的整个身体的图像,并将为该人制作一张“照片”。如何从面部检测正方形中获取“面部照片”?

照片意味着一个人的整个脸部,脖子,头发和耳朵的图像在相同的一般大小的另一个面部照片。

目前我使用
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 

我的级联。

我使用所有的级联,因为一个人不会检测到我的所有面孔。当我得到所有级联检测到的所有面孔后,我找到了我的平均平方,并用它来最终猜测面部照片的高度和宽度。

我的问题是3部分。

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

  • 单个级联不会检测到我遇到的所有面,所以我使用它们全部。这当然会产生许多不同的正方形和一些误报。我可以使用什么方法来识别误报并将其排除在平均平方计算之外?恩。 SandmanWayne
    编辑:我正在执行标准差内的平均值。将很快发布代码。

  • 我不完全确定最好的方法找到面部的平方坐标的照片。我在哪里可以找到面部照片比例?
    编辑:解决了这一个。假设我所有的头都是他们面部的比例。

    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); 
    } 
    

    Sandman
    我只需要摆脱那些误报。

好吧,让那4个问题。

  • 我们的摄像头,我们将使用目前无佣金,所以我没有在目前的捕获图像的方法。我在哪里可以找到非纯粹的人的全身图像像谷歌的图像搜索全身图像?
    编辑:“人站在”打造一个良好的搜索:)
+2

找到头肩膀档案文件是托马斯海登堂吗? – 2011-04-21 20:43:49

+0

这是蜘蛛侠的沙盒哈哈 – 2011-04-21 21:01:32

回答

0

好吧,我想通了,但项目暂时在冰上。
由于VM需要永久加载,所以我没有粘贴源代码。
如果有人真的感兴趣,让我知道,我会发布。
如果您看到看起来可以做得更好的东西,请告诉我。

我采取的步骤如下。

  1. 加载图像,如果高度或宽度大于500像素,则会将版本的新图像缩小至最大500px的高度或宽度。保存比例。
  2. Harrtraining的所有正面Harrcasscades上运行C#OpenCV实现Ask Ernest
  3. 由于某些原因,Ask Ernest生成的矩形需要按比例放大1.3X
  4. 生成的矩形使用standard deviation删除误报。我为矩形的每个角落做了这个,找到每个矩形角落与平均角落位置之间的距离。我记下了任何有一个角落的矩形,并将它从候选矩形列表中删除。
  5. 从剩余的矩形中获取平均矩形,并在问题中应用上面的“GetMugshotRectangle”。
  6. 使用我们在步骤1中保存的比例缩放照片的矩形。
  7. 从原始图像中剪下照片并保存到新的位置。

完成!

1

单个级联可以做什么,如果它被设置这样所有级联的事,再加上它不给你几个结果从...判断。您使用的级联在制作教学图片或某些参数时可能会有所不同。

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

+0

这就是我获得当前瀑布的地方。我不确定我想要通过建立自己的级联的努力。我不完全拥有1000张独特面孔的5000张图像。 – 2011-04-25 16:18:48

+0

也许有一些“附加规则”适用于级联,因此可以从几个级联构建一个新的级联,这些级联的行为就像在所有级联图像一起训练的情况下一样。但是我听起来很复杂。 – dronus 2011-04-28 21:21:49