2011-04-19 62 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