2017-07-18 11 views
0

Ich habe Fenster Anwendung, die mehrere Gesicht erkennen und das Gesicht erfassen und als Bild speichern. Ich benutze den EMGU CV, um die Gesichtserkennung zu machen, lerne ich aus dem Beispielcode und dem Tutorial. Wenn das Gesicht als trainierter Datensatz erfasst werden muss, kann nur ein Gesicht gespeichert werden, obwohl 2 Gesichter erkannt wurden. Ich versuche, den Code zu ändern, aber es scheint nicht wie erwartet zu funktionieren. Unten ist der Code:EMgucv speichern mehrere Gesicht von der Webcam erkannt

gray = grabber.QueryGrayFrame().Resize(320, 240, 
Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); 

MCvAvgComp[][] facesDetected = gray.DetectHaarCascade(
      face, 
      1.2, 
      10, 
      Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, 
      new Size(20, 20)); 

foreach (MCvAvgComp f in facesDetected[0]) 
{ 
    TrainedFace = currentFrame.Copy(f.rect).Convert<Gray, byte>(); 

    TrainedFace = result.Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); 
    trainingImages.Add(TrainedFace); 

    for (int i = 1; i < trainingImages.ToArray().Length + 1; i++) 
    { 
     trainingImages.ToArray()[i - 1].Save(Application.StartupPath + "/TrainedFaces/face" + i + ".bmp"); 

    } 
} 

Die foreach-Schleife Schleife zweimal, wenn zwei Gesichter erkannt, aber das Gesicht speichern die gleiche ist. Irgendeine Idee, was schief geht?

Antwort

0

versuchen Sie bitte die folgende Art und Weise

für jede der Gesichter erkannt, werden Sie es zu Trainingsbilder hinzufügen müssen, und Sie müssen es in einer Schleife für jede Schleife Seite des aus

gray = grabber.QueryGrayFrame().Resize(320, 240, 
Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); 

MCvAvgComp[][] facesDetected = gray.DetectHaarCascade(
     face, 
     1.2, 
     10, 
     Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, 
     new Size(20, 20)); 

foreach (MCvAvgComp f in facesDetected[0]) 
{ 
TrainedFace = currentFrame.Copy(f.rect).Convert<Gray, byte>(); 

TrainedFace = result.Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); 
trainingImages.Add(TrainedFace); 
} 

for (int i = 1; i < trainingImages.ToArray().Length + 1; i++) 
{ 
    trainingImages.ToArray()[i - 1].Save(Application.StartupPath + "/TrainedFaces/face" + i + ".bmp"); 

} 

ich denke, die for-Schleife

int i=1; 
foreach(TrainedFace Tface in trainingImages) 
    { 
    Tface.Save(Application.StartupPath + "/TrainedFaces/face" + i + ".bmp") 
    i++; 
    } 

Bitte versuchen sie es auf diese Weise zu

geändert werden könnte, es könnte funktionieren ..

+0

Ich habe versucht und immer noch das Gleiche. Obwohl 2 verschiedene Gesichter in der Kamera erkannt werden und es 2 rote Rechteck zeichnen. Die foreach Schleife zweimal, aber es speichern das gleiche Gesicht. –