2012-03-29 15 views
0

私は画像処理に関する研究プロジェクトを行っています。このプロジェクトは、以前に生成された自動テスト紙を使用してユーザーを評価することです。Webカメラで顔が検出されたときに自動的に画像を取得

これは紙の評価プロセスに私は、ユーザーのWebカメラからランダムユーザーの画像を取得する必要がありますオンラインプロセスですので...私はC#言語を使用して、通常のWindowsベースのアプリケーションで、このプロジェクトを実施しています。..

このプロセスのために私は正常に既にWindows形式にユーザーのイメージを取得し、私はすでにユーザーの顔を検出することができます。

事が

1)がどのようにイムに行く..私は、私は、この画像検出の実装にEMGU CVライブラリを使用しています。..顔が窓の形で検出されたユーザの画像を取得したいされユーザーの顔が検出されたときにユーザーの画像をキャプチャします。 2)ランダムな時間に画像をキャプチャしたい場合...

これは私が顔検出を暗示するために使用したコードです。

public class ClassifierTrain 
{ 
    #region Variables 
    //Eigen 
    MCvTermCriteria termCrit; 
    EigenObjectRecognizer recognizer; 
    //training variables 
    List<Image<Gray, byte>> trainingImages = new List<Image<Gray, byte>>();//Images 
    List<string> Names_List = new List<string>(); //labels 
    int ContTrain, NumLabels; 

    //Class Variables 
    string Error; 
    bool _IsTrained = false; 

    #endregion 

    #region Constructors 
    /// <summary> 
    /// Default Constructor, Looks in (Application.StartupPath + "\\TrainedFaces") for traing data. 
    /// </summary> 
    public ClassifierTrain() 
    { 
     termCrit = new MCvTermCriteria(ContTrain, 0.001); 
     _IsTrained = LoadTrainingData(Application.StartupPath + "\\TrainedFaces"); 
    } 

    /// <summary> 
    /// Takes String input to a different location for training data 
    /// </summary> 
    /// <param name="Training_Folder"></param> 
    public ClassifierTrain(string Training_Folder) 
    { 
     termCrit = new MCvTermCriteria(ContTrain, 0.001); 
     _IsTrained = LoadTrainingData(Training_Folder); 
    } 

    #endregion 

    #region Public 
    /// <summary> 
    /// <para>Return(True): If Training data has been located and Eigen Recogniser has been trained</para> 
    /// <para>Return(False): If NO Training data has been located of error in training has occured</para> 
    /// </summary> 
    public bool IsTrained 
    { 
     get { return _IsTrained; } 
    } 

    /// <summary> 
    /// Recognise a Grayscale Image using the trained Eigen Recogniser 
    /// </summary> 
    /// <param name="Input_image"></param> 
    /// <returns></returns> 
    public string Recognise(Image<Gray, byte> Input_image) 
    { 
     if (_IsTrained) 
     { 
      string t = recognizer.Recognize(Input_image); 
      return t; 
     } 
     else return "";//Blank prefered else can use null 

    } 

    /// <summary> 
    /// Returns a string contatining any error that has occured 
    /// </summary> 
    public string Get_Error 
    { 
     get { return Error; } 
    } 

    /// <summary> 
    /// Dispose of Class call Garbage Collector 
    /// </summary> 
    public void Dispose() 
    { 
     recognizer = null; 
     trainingImages = null; 
     Names_List = null; 
     Error = null; 
     GC.Collect(); 
    } 

    #endregion 

    #region Private 
    /// <summary> 
    /// Loads the traing data given a (string) folder location 
    /// </summary> 
    /// <param name="Folder_loacation"></param> 
    /// <returns></returns> 
    private bool LoadTrainingData(string Folder_loacation) 
    { 
     if (File.Exists(Folder_loacation +"\\TrainedLabels.xml")) 
     { 
      try 
      { 
       //message_bar.Text = ""; 
       Names_List.Clear(); 
       trainingImages.Clear(); 
       FileStream filestream = File.OpenRead(Folder_loacation + "\\TrainedLabels.xml"); 
       long filelength = filestream.Length; 
       byte[] xmlBytes = new byte[filelength]; 
       filestream.Read(xmlBytes, 0, (int)filelength); 
       filestream.Close(); 

       MemoryStream xmlStream = new MemoryStream(xmlBytes); 

       using (XmlReader xmlreader = XmlTextReader.Create(xmlStream)) 
       { 
        while (xmlreader.Read()) 
        { 
         if (xmlreader.IsStartElement()) 
         { 
          switch (xmlreader.Name) 
          { 
           case "NAME": 
            if (xmlreader.Read()) 
            { 
             Names_List.Add(xmlreader.Value.Trim()); 
             NumLabels += 1; 
            } 
            break; 
           case "FILE": 
            if (xmlreader.Read()) 
            { 
             //PROBLEM HERE IF TRAININGG MOVED 
             trainingImages.Add(new Image<Gray, byte>(Application.StartupPath + "\\TrainedFaces\\" + xmlreader.Value.Trim())); 
            } 
            break; 
          } 
         } 
        } 
       } 
       ContTrain = NumLabels; 

       if (trainingImages.ToArray().Length != 0) 
       { 
        //Eigen face recognizer 
        recognizer = new EigenObjectRecognizer(trainingImages.ToArray(), 
        Names_List.ToArray(), 5000, ref termCrit); //5000 default 
        return true; 
       } 
       else return false; 
      } 
      catch (Exception ex) 
      { 
       Error = ex.ToString(); 
       return false; 
      } 
     } 
     else return false; 
    } 
    #endregion 
}` 
+0

デュ誰もがこのために答えを海... ??? – tharindlaksh

答えて

1

は、あなたのトピックに、Microsoftの研究の非常に優れた紙が存在する: http://research.microsoft.com/en-us/um/people/ablake/papers/ablake/romdhani_iccv01.pdf

これを、あなたは出発点として使用する必要があります。その後、あなたは画像処理と直接Xの画像変換を見ている必要があります: http://www.c-sharpcorner.com/UploadFile/ShrutiShrivastava/ImageProcessing12192005061519AM/ImageProcessing.aspx

挨拶、

関連する問題