I am pretty new to EMGUCV . I want to make a face recognition system , I had implemented it but the results are not acceptable. Here is my code for the recognition :
public List<Person> RecognizeFaces(List<Image<Bgr, byte>> faces)
{
List<Person> RecognizedPersons = new List<Person>();
MCvTermCriteria termCrit = new MCvTermCriteria(TrainDB.Count, 0.001);
EigenObjectRecognizer recognizer = new EigenObjectRecognizer(
this.ToGrayList(this.TrainDB),
labels.ToArray(),
7000, // I changed this argument many times but nothing has changed (1000, 2000, ...
ref termCrit);
string label = "";
for (int i = 0; i < faces.Count; i++)
{
label = recognizer.Recognize(faces[i].Convert<Gray, byte>());
RecognizedPersons.Add(new Person(faces[i],!label.Equals("") ? label : "unknown"));
}
return RecognizedPersons;
}
This function takes a list of previously detected faces from an input image and returns a list of Type Person where each person contains an image and a label to the recognized person .
My Question is why the results are not good ? is there is something wrong with my code ? Or there is something wrong with the training set TrainDB , if so , what is the best guidelines to follow when creating the training set ?
I had collected the training set according to this : 1- Applying face detection (using EMGU) on an image that's contain a single person 2- Then I resize the detected face to 200 : W, 200 : H
Some images from my training set :


Some Examples of test images :

- List item


My last question .. do Emgu/OpenCv are powerful tools to be used in face recognition ? or there is something else that could be more accurate in results ?