Android Open Source - AndroidFaceRecognizer Face Detection






From Project

Back to project page AndroidFaceRecognizer.

License

The source code is released under:

MIT License

If you think the Android project AndroidFaceRecognizer listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.yaylas.sytech.facerecognizer.methods;
/*from w w w . j  av a  2s. c om*/
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.imgproc.Imgproc;

import android.media.FaceDetector;
import android.os.AsyncTask;

import com.yaylas.sytech.facerecognizer.DetectionBasedTracker;
import com.yaylas.sytech.facerecognizer.FaceDetectionActivity;
import com.yaylas.sytech.facerecognizer.utils.FaceDetectionUtils;
import com.yaylas.sytech.facerecognizer.utils.ImageUtils;

public class FaceDetection {
  public static Mat detectFaces(Mat cameraFrame, Mat image, boolean captureImage){
         MatOfRect faces = new MatOfRect();
         if (FaceDetectionUtils.mNativeDetector != null)
           FaceDetectionUtils.mNativeDetector.detect(image, faces);

         Rect[] facesArray = faces.toArray();
         if(facesArray.length == 0){
           return null;
         }
         
         Mat faceRect = null;
         Rect leftEye = null;
         Rect rightEye = null;
         Rect faceFrame = null;
         for (int i = 0; i < 1; i++){
           leftEye = null;
           rightEye = null;
           Mat submat = null;
           try{
             submat = image.submat(facesArray[i]);
           } catch(Exception e){
             return null;
           }
            faceRect = new Mat(200, 200, submat.type());
            Imgproc.resize(submat, faceRect, faceRect.size());
            leftEye = detectEyes(FaceDetectionUtils.mNativeLeftEyeDetector, faceRect, true);
            if(leftEye == null) {
              return null;
            }
            rightEye = detectEyes(FaceDetectionUtils.mNativeRightEyeDetector, faceRect, false);
            if(rightEye == null) {
              return null;
            }
            break;
          }
         
         if(captureImage) {
           Point leftEyeCenter = new Point(leftEye.x +leftEye.width/2, leftEye.y +leftEye.height/2);
           Point rightEyeCenter = new Point(rightEye.x +rightEye.width/2, rightEye.y +rightEye.height/2);
           
           Mat capturedMat = ImageUtils.cropFace(faceRect, leftEyeCenter, rightEyeCenter, 0.2, 200, 200);
           return capturedMat;
         }
         return null;
  }
  
  
  
   private static Rect detectEyes(DetectionBasedTracker detector, Mat image, boolean left){
       Rect result = null;
       if(detector == null){
         return result;
       }
       detector.setMinFaceSize(30);
       MatOfRect eyes = new MatOfRect();
       detector.detect(image, eyes);
       Rect[] eyesArray = eyes.toArray();
       int possibleEyeIndex = -1;
       int minEyeRectSize = 1000000;
        for (int j = 0; j < eyesArray.length; j++){
          if(left && (eyesArray[j].x + eyesArray[j].width) > (image.cols()/2)) {
            continue;
          }
          if(!left && (eyesArray[j].x + eyesArray[j].width) < (image.cols()/2)) {
            continue;
          }
          if(eyesArray[j].x > 0
              && eyesArray[j].y > (image.rows() /4) && (eyesArray[j].y + eyesArray[j].height) < (image.rows() /2)){
            int rectSize = eyesArray[j].height * eyesArray[j].width;
            if(rectSize < minEyeRectSize){
              possibleEyeIndex = j;
              rectSize = minEyeRectSize;
            }
          }
        }
        if(possibleEyeIndex != -1) {
          result = eyesArray[possibleEyeIndex];
        }
        return result;
     }
}




Java Source Code List

com.yaylas.sytech.facerecognizer.DetectionBasedTracker.java
com.yaylas.sytech.facerecognizer.EditDatabaseActivity.java
com.yaylas.sytech.facerecognizer.FaceDetectionActivity.java
com.yaylas.sytech.facerecognizer.FaceRecognitionActivity.java
com.yaylas.sytech.facerecognizer.MainPageActivity.java
com.yaylas.sytech.facerecognizer.SplashActivity.java
com.yaylas.sytech.facerecognizer.facedatabase.FaceRecognizerDBHelper.java
com.yaylas.sytech.facerecognizer.facedatabase.FacesDataSource.java
com.yaylas.sytech.facerecognizer.facedatabase.Person.java
com.yaylas.sytech.facerecognizer.methods.FaceDetection.java
com.yaylas.sytech.facerecognizer.utils.FaceDetectionUtils.java
com.yaylas.sytech.facerecognizer.utils.ImageUtils.java