This is my first post, so I'm sorry if my question is not clear or there is not enough information.
I am currently working on an Android application that can recognize faces from images.
My first approach was to use JavaCV, and everything works just fine, except for the fact that face recognition takes too long to complete!
After that, I tried to detect faces using FaceDetector.Face. Then I used the detected faces to train my face recognition model. No errors have been discovered so far.
My problem is that my model could not recognize the detected face given by FaceDetector.Face. I always get -1 from the prediction function. Can anyone say what could be wrong? Thank you in advance!
Here's 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 the main part of model training.
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();
Finally, I recognize the face with the following code:
public static String identifyFace(IplImage grayImg) { String predictedName = "";