2011-09-10 9 views
5

私はHttpHandlerをC#で書いています。サイズ変更された画像を提供しています。何の問題もなく、何百万人ものハンドラが参考になります。C# - 顔とクロップの画像を検出します。

問題は、4:3と16:9のように「従来の」サイズで撮影したユーザーの写真があることです。しかし、このハンドラは写真IDサイズ(4cm×3cm)で写真を提供する必要があり、明らかにのユーザーの顔を切り取る必要があります。顔の位置は大きく異なります(常に絵の中心にあるわけではありません)。

顔の中心を検出してこの点を中心に画像を切り抜くにはどのようなアルゴリズムを使用できますか?

答えて

8

あなたはEmguCV(OpenCVのの過去ログポート)でこの例を実行するためにhttp://www.emgu.com/wiki/index.php/Face_detection

ノートHaarCascadeクラスを使用することができます。

  • Windowsフォームアプリケーションを作成するのPictureBoxを追加し、 (有効にしてください) - x86システムで実行する
  • OpenCV関連のDLL(Emgu CVダウンロードに含まれています)を実行していることを確認してくださいes。
ここ
using System; 
using System.Windows.Forms; 
using System.Drawing; 
using Emgu.CV; 
using Emgu.Util; 
using Emgu.CV.Structure; 
using Emgu.CV.CvEnum; 

namespace opencvtut 
{ 
    public partial class Form1 : Form 
    { 
       private Capture cap; 
       private HaarCascade haar; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void timer1_Tick(object sender, EventArgs e) 
     { 
       using (Image<Bgr, byte> nextFrame = cap.QueryFrame()) 
       { 
         if (nextFrame != null) 
         { 
           // there's only one channel (greyscale), hence the zero index 
           //var faces = nextFrame.DetectHaarCascade(haar)[0]; 
           Image<Gray, byte> grayframe = nextFrame.Convert<Gray, byte>(); 
           var faces = 
             grayframe.DetectHaarCascade(
               haar, 1.4, 4, 
               HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, 
               new Size(nextFrame.Width/8, nextFrame.Height/8) 
               )[0]; 

           foreach (var face in faces) 
           { 
             nextFrame.Draw(face.rect, new Bgr(0,double.MaxValue,0), 3); 
           } 
           pictureBox1.Image = nextFrame.ToBitmap(); 
         } 
       } 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      // passing 0 gets zeroth webcam 
         cap = new Capture(0); 
      // adjust path to find your xml 
         haar = new HaarCascade(
       "..\\..\\..\\..\\lib\\haarcascade_frontalface_alt2.xml"); 
     } 
    } 
} 

は、私はあなたが、顔検出およびトリミングの例を見ることができますhttp://www.overroot.com/blog/wp-content/uploads/2011/03/FaceRecognition.zip

1

example on CodeProjectがあります。開始するにはとても良い場所になるようです。

+0

(リンクをご確認ください)CodeProjectの上で利用できなくなりました。 –

1

を書いたサンプルである(コードの最後の行)Haarcascade XMLを見つけるために、パスを調整しますソフトウェアはhttp://deteksiwajah.blogspot.com/です。それはオープンソースであり、OpenCVライブラリを使用しています。

1

画像を切り抜くために探している場合は、写真のすべての人物の顔を区切るFace C APIという名前のMicrosoft Cognitive Serviceを使用すると、Rectangle構造体を返す要素を持つJSONを返すことができます必要に応じて画像を切り抜き、サイズを変更することができます。

ここではそれについての詳細informationa見ることができます:それは、オンライン別の仕事の直接の複製であるとして、この記事FaceAPI

関連する問題