This is my first post here so I am sorry if my question is not clear or there is not enough information provided.
I am currently working on an Android application that could recognize faces from pictures.
My first approach was to use JavaCV and everything works fine, except the fact that face detection takes too much of time to finish!
After that, I tried to detect faces by using FaceDetector.Face. Then I used the detected faces for training my face recognizer model. There was no error found so far.
My problem is that my model could not recognize any detected face given by FaceDetector.Face. I always get -1 from the predict function. Could anybody tell what might be wrong? Thank you in advance!
This is how I crop faces after detection:
for(int count=0;count<NUMBER_OF_FACE_DETECTED;count++)
{
Face face=detectedFaces[count];
PointF midPoint=new PointF();
face.getMidPoint(midPoint);
eyeDistance=face.eyesDistance();
left = midPoint.x - (float)(1.4 * eyeDistance);
top = midPoint.y - (float)(1.8 * eyeDistance);
bmFace = Bitmap.createBitmap(origiImage, (int) left, (int) top, (int) (2.8 * eyeDistance), (int) (3.6 * eyeDistance));
bmFaces.add(bmFace);
}
Here is a main part of training the model.
MatVector images = new MatVector(imageFiles.length);
int[] labels = new int[imageFiles.length];
IplImage img;
IplImage grayImage;
FaceRecognizer faceRecognizer = createLBPHFaceRecognizer(1, 8, 8, 8, binaryTreshold);
try
{
FileInputStream fstream = new FileInputStream(working_Dir.getAbsolutePath()+"/csv.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String imgInfo;
for (int i = 0; (imgInfo = br.readLine()) != null; i++)
{
String info[] = imgInfo.split(";");
String imagePath = info[0];
img = cvLoadImage(imagePath);
grayImage = IplImage.create(img.width(),img.height(), IPL_DEPTH_8U, 1);
cvCvtColor(img, grayImage, CV_BGR2GRAY);
images.put(i, grayImage);
labels[i] = Integer.parseInt(info[1]);;
}
in.close();
//train the FaceRecognizer model
faceRecognizer.train(images, labels);
}catch (Exception e)
{
System.err.println("Error: " + e.getMessage());
}
Finally I recognize face with the following code:
public static String identifyFace(IplImage grayImg)
{
String predictedName = "";
//identify face from the image
int predictedLabel = faceRecognizer.predict(grayImg);
if(predictedLabel != -1 )
{
predictedName = new String(idToName.get(predictedLabel));
}
return predictedName;
}