얼굴 인식 작업을하고 있었고 코드를 실행할 때 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
코드를 게시해야합니다. 출구라고 할 때, 정확히 * 무슨 뜻입니까? 그 부분에 어떻게 도달했는지 어떻게 알 수 있습니까? –
FaceRecognizer()는 트레이닝 세트가 저장된 폴더에서 트레이닝 세트가로드되는 곳입니다. RecognizeFaces() 메소드가 호출되는 이벤트는 '인식'버튼이있는 기본 폼에 설정된 버튼에서 발생한 이벤트입니다. 내 시스템은 64 비트이고 다른 코드와 Emgu CV가있는 샘플은 정상적으로 작동합니다 (즉, 구성은 정상입니다). VS2010 프로젝트를 첨부하고로드했으며 미디어 파이어 (mediafire)로 가져올 수도 있습니다 (여기를 클릭하십시오). 그 모든 것을 제외하고 일하기로되어있다. – Sisay
http://www.mediafire.com/view/?bfysqsze6n2zs9y는 EigenObjectInitializer에서 catch catch를 할당 한 후에 발생하는 오류 메시지입니다. – Sisay