2013-05-11 2 views
0

얼굴 인식 작업을하고 있었고 코드를 실행할 때 EigenObjectRecognizer가 초기화 된 지점에서 실행을 중지하고 오류없이 프로그램을 종료합니다. 다른 사람이 전에도 같은 문제에 직면 한 적이 있습니까? 추가 코드가 필요하면 더 게시 할 수 있습니다. 나는 훈련 데이터와 훈련 인식기가C# - Emgu CV - 얼굴 인식 코드가 EigenObjectRecognizer에서 실행을 멈추고 오류없이 종료합니다.

 EigenObjectRecognizer recognizer = new EigenObjectRecognizer(
         trainingImages.ToArray(), 
         NameLabless.ToArray(), 
         3000, 
         ref termCrit); 
         name = recognizer.Recognize(ExtFaces[faceNo]).ToString(); 
를 설정 지점까지 작업 내 코드를 보았다

내가 훈련 세트에서로드하는 데 사용한 코드는

public FaceRecognizer() 
    { 
     InitializeComponent(); 

     try 
     { 
      ContTrain = ContTrain + 1; 
      //Load previous trained and labels for each image from the database Here 
      string NameLabelsinfo = File.ReadAllText(Application.StartupPath + 
          "/TrainedFaces/TrainedNameLables.txt"); 
      string[] NameLabels = NameLabelsinfo.Split('%'); 
      NumNameLabels = Convert.ToInt16(NameLabels[0]); 
      string IDLabelsinfo = File.ReadAllText(Application.StartupPath + 
       "/TrainedFaces/TrainedNameLables.txt"); 
      string[] IDLables = IDLabelsinfo.Split('%'); 
      NumIDLabels = Convert.ToInt16(IDLables[0]); 


      if (NumNameLabels == NumIDLabels) 
      { 
       ContTrain = NumNameLabels; 
       string LoadFaces; 
       // Converting the master image to a bitmap 

       for (int tf = 1; tf < NumNameLabels + 1; tf++) 
       { 
        LoadFaces = String.Format("face{0}.bmp", tf); 
        trainingImages.Add(new Image<Gray, byte>(String.Format(" 
        {0}/TrainedFaces/{1}", Application.StartupPath, 
          LoadFaces))); 
        IDLabless.Add(IDLables[tf]); 
        NameLabless.Add(NameLabels[tf]); 

       } 
      } 
     } 
     catch (Exception e) 
     { 
      //MessageBox.Show(e.ToString()); 
      MessageBox.Show("Nothing in binary database, please add at least a 
      face(Simply train the prototype with the Add 
        Face Button).", "Triained faces load", MessageBoxButtons.OK, 
          MessageBoxIcon.Exclamation); 
     } 
    } 

그리고 얼굴 인식입니다 이 얼굴 인식 방법은 (는) EigenObjectRecognizer 훈련되는 지점까지 작동 이벤트로 호출되면

 private void RecognizeFaces() 
    { 
     //detect faces from the gray-scale image and store into an array of type 
     //   'var',i.e 'MCvAvgComp[]' 

     Image<Gray, byte> grayframe = GetGrayframe(); 
     //Assign user-defined Values to parameter variables: 
     MinNeighbors = int.Parse(comboBoxMinNeigh.Text); // the 3rd parameter 
     WindowsSize = int.Parse(textBoxWinSiz.Text); // the 5th parameter 
     ScaleIncreaseRate = Double.Parse(comboBoxScIncRte.Text); //the 2nd parameter 



     var faces = grayframe.DetectHaarCascade(haar, ScaleIncreaseRate, MinNeighbors, 
           HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, 
           new Size(WindowsSize, WindowsSize))[0]; 

     if (faces.Length > 0) 
     { 
      Bitmap ExtractedFace; //empty 
      ExtFaces = new Image<Gray, byte>[faces.Length]; 

      faceNo = 0; 

      foreach (var face in faces) 
      { 
       // ImageFrame.Draw(face.rect, new Bgr(Color.Green), 3); 
       t = t + 1; 
       //set the size of the empty box(ExtractedFace) which will later 
       //  contain the detected face 
       ExtractedFace = new Bitmap(face.rect.Width, face.rect.Height); 

       ExtFaces[faceNo] = new Image<Gray, byte>(ExtractedFace); 
        //= newExtractedImage; 
       ExtFaces[faceNo] = ExtFaces[faceNo].Resize(100, 100, 
        Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); 
       //TermCriteria for face recognition with numbers of trained images 
       //    like maxIteration 
       MCvTermCriteria termCrit = new MCvTermCriteria(ContTrain, 0.001); 
       if (trainingImages.ToArray().Length != 0) 
       { 
        //Eigen face recognizer 
        EigenObjectRecognizer recognizer = new EigenObjectRecognizer(
        trainingImages.ToArray(), 
        NameLabless.ToArray(), 
        3000, 
        ref termCrit); 
        name = recognizer.Recognize(ExtFaces[faceNo]).ToString(); 
        stringOutput[faceNo] = name; 
       } 
       faceNo++; 
      } 

      pbExtractedFaces.Image = ExtFaces[0].ToBitmap(); //draw the face detected 
        in the 0th (gray) channel with blue 
           color 
      t = 0; 

      if (stringOutput[0] == null) 
       { 
        label1.Text = "Unknown"; 
        label9.Text = ""; 
       } 
       //Draw the label for each face detected and recognized 
      else 
      { 
        label1.Text = "Known"; 
        label9.Text = stringOutput[0]; 

      } 
     } 
     if (faceNo == 0) 
      { 
       MessageBox.Show("No face detected"); 
      } 
     else 
     { 
      btnNextRec.Enabled = true; 
      btnPreviousRec.Enabled = true; 
     } 
    } 

다음과 같이 함수이고 그것은 일하는 정지 g (실행 종료) 프로그램이 전혀 실행되지 않습니다.

나는 당신의 응답을 기대합니다

, 감사 Sisay

+0

코드를 게시해야합니다. 출구라고 할 때, 정확히 * 무슨 뜻입니까? 그 부분에 어떻게 도달했는지 어떻게 알 수 있습니까? –

+0

FaceRecognizer()는 트레이닝 세트가 저장된 폴더에서 트레이닝 세트가로드되는 곳입니다. RecognizeFaces() 메소드가 호출되는 이벤트는 '인식'버튼이있는 기본 폼에 설정된 버튼에서 발생한 이벤트입니다. 내 시스템은 64 비트이고 다른 코드와 Emgu CV가있는 샘플은 정상적으로 작동합니다 (즉, 구성은 정상입니다). VS2010 프로젝트를 첨부하고로드했으며 미디어 파이어 (mediafire)로 가져올 수도 있습니다 (여기를 클릭하십시오). 그 모든 것을 제외하고 일하기로되어있다. – Sisay

+0

http://www.mediafire.com/view/?bfysqsze6n2zs9y는 EigenObjectInitializer에서 catch catch를 할당 한 후에 발생하는 오류 메시지입니다. – Sisay

답변

1

아래 정신으로 시내에서 5 시간 후, 나는 시도-catch 블록을 사용하여 호출 스택을 얻을 수있는 첫 번째 기회가 예외를하고 난 것을 깨닫게되었다 트레이닝 세트에 저장된 이미지 및 인식 된 인식 된 이미지는 동일한 크기가 아니었다. 그래서 이것이 내 프로그램이 멈추었 고 오류 알림없이 종료되는 이유입니다. http://www.mediafire.com/view/?bfysqsze6n2zs9y은 eigenObjectRecognizer에서 나를 멈추게하는 오류 메시지 였고 인식하도록 감지 된 이미지와 크기가 같도록 트레이닝에 공급되는 이미지의 크기를 조정하여 해결했습니다.