android.media.FaceDetector

Here are the examples of the java api class android.media.FaceDetector taken from open source projects.

1. FaceAndColorDetectImageView#detectFace()

Project: apps-android-wikipedia
File: FaceAndColorDetectImageView.java
@Nullable
private PointF detectFace(Bitmap testBitmap) {
    long millis = System.currentTimeMillis();
    // initialize the face detector, and look for only one face...
    FaceDetector fd = new FaceDetector(testBitmap.getWidth(), testBitmap.getHeight(), 1);
    FaceDetector.Face[] faces = new FaceDetector.Face[1];
    int numFound = fd.findFaces(testBitmap, faces);
    PointF facePos = null;
    if (numFound > 0) {
        facePos = new PointF();
        faces[0].getMidPoint(facePos);
        // normalize the position to [0, 1]
        facePos.x /= testBitmap.getWidth();
        facePos.y /= testBitmap.getHeight();
        L.d("Found face at " + facePos.x + ", " + facePos.y);
    }
    L.d("Face detection took " + (System.currentTimeMillis() - millis) + "ms");
    return facePos;
}

2. FaceCropper#cropFace()

Project: UltimateAndroid
File: FaceCropper.java
public Bitmap cropFace(Bitmap original) {
    Bitmap fixedBitmap = BitmapUtils.forceEvenBitmapSize(original);
    fixedBitmap = BitmapUtils.forceConfig565(fixedBitmap);
    FaceDetector faceDetector = new FaceDetector(fixedBitmap.getWidth(), fixedBitmap.getHeight(), mMaxFaces);
    FaceDetector.Face[] faces = new FaceDetector.Face[mMaxFaces];
    // The bitmap must be in 565 format (for now).
    int faceCount = faceDetector.findFaces(fixedBitmap, faces);
    Logs.d("face crop");
    if (faceCount == 0) {
        return fixedBitmap;
    }
    int initX = fixedBitmap.getWidth();
    int initY = fixedBitmap.getHeight();
    int endX = 0;
    int endY = 0;
    PointF centerFace = new PointF();
    // Calculates minimum box to fit all detected faces
    for (int i = 0; i < faceCount; i++) {
        FaceDetector.Face face = faces[i];
        // Eyes distance * 3 usually fits an entire face
        int faceSize = (int) (face.eyesDistance() * 3);
        if (SizeMode.FaceMarginPx.equals(mSizeMode)) {
            // *2 for top and down/right and left effect
            faceSize += mFaceMarginPx * 2;
        } else if (SizeMode.EyeDistanceFactorMargin.equals(mSizeMode)) {
            faceSize += face.eyesDistance() * mEyeDistanceFactorMargin;
        }
        faceSize = Math.max(faceSize, mFaceMinSize);
        face.getMidPoint(centerFace);
        int tInitX = (int) (centerFace.x - faceSize / 2);
        int tInitY = (int) (centerFace.y - faceSize / 2);
        tInitX = Math.max(0, tInitX);
        tInitY = Math.max(0, tInitY);
        int tEndX = tInitX + faceSize;
        int tEndY = tInitY + faceSize;
        tEndX = Math.min(tEndX, fixedBitmap.getWidth());
        tEndY = Math.min(tEndY, fixedBitmap.getHeight());
        initX = Math.min(initX, tInitX);
        initY = Math.min(initY, tInitY);
        endX = Math.max(endX, tEndX);
        endY = Math.max(endY, tEndY);
    }
    int sizeX = endX - initX;
    int sizeY = endY - initY;
    if (sizeX + initX > fixedBitmap.getWidth()) {
        sizeX = fixedBitmap.getWidth() - initX;
    }
    if (sizeY + initY > fixedBitmap.getHeight()) {
        sizeY = fixedBitmap.getHeight() - initY;
    }
    Bitmap croppedBitmap = Bitmap.createBitmap(fixedBitmap, initX, initY, sizeX, sizeY);
    if (fixedBitmap != croppedBitmap) {
        fixedBitmap.recycle();
    }
    return croppedBitmap;
}

3. FaceCropper#cropFace()

Project: UltimateAndroid
File: FaceCropper.java
public Bitmap cropFace(Bitmap original) {
    Bitmap fixedBitmap = BitmapUtils.forceEvenBitmapSize(original);
    fixedBitmap = BitmapUtils.forceConfig565(fixedBitmap);
    FaceDetector faceDetector = new FaceDetector(fixedBitmap.getWidth(), fixedBitmap.getHeight(), mMaxFaces);
    FaceDetector.Face[] faces = new FaceDetector.Face[mMaxFaces];
    // The bitmap must be in 565 format (for now).
    int faceCount = faceDetector.findFaces(fixedBitmap, faces);
    Logs.d("face crop");
    if (faceCount == 0) {
        return fixedBitmap;
    }
    int initX = fixedBitmap.getWidth();
    int initY = fixedBitmap.getHeight();
    int endX = 0;
    int endY = 0;
    PointF centerFace = new PointF();
    // Calculates minimum box to fit all detected faces
    for (int i = 0; i < faceCount; i++) {
        FaceDetector.Face face = faces[i];
        // Eyes distance * 3 usually fits an entire face
        int faceSize = (int) (face.eyesDistance() * 3);
        if (SizeMode.FaceMarginPx.equals(mSizeMode)) {
            // *2 for top and down/right and left effect
            faceSize += mFaceMarginPx * 2;
        } else if (SizeMode.EyeDistanceFactorMargin.equals(mSizeMode)) {
            faceSize += face.eyesDistance() * mEyeDistanceFactorMargin;
        }
        faceSize = Math.max(faceSize, mFaceMinSize);
        face.getMidPoint(centerFace);
        int tInitX = (int) (centerFace.x - faceSize / 2);
        int tInitY = (int) (centerFace.y - faceSize / 2);
        tInitX = Math.max(0, tInitX);
        tInitY = Math.max(0, tInitY);
        int tEndX = tInitX + faceSize;
        int tEndY = tInitY + faceSize;
        tEndX = Math.min(tEndX, fixedBitmap.getWidth());
        tEndY = Math.min(tEndY, fixedBitmap.getHeight());
        initX = Math.min(initX, tInitX);
        initY = Math.min(initY, tInitY);
        endX = Math.max(endX, tEndX);
        endY = Math.max(endY, tEndY);
    }
    int sizeX = endX - initX;
    int sizeY = endY - initY;
    if (sizeX + initX > fixedBitmap.getWidth()) {
        sizeX = fixedBitmap.getWidth() - initX;
    }
    if (sizeY + initY > fixedBitmap.getHeight()) {
        sizeY = fixedBitmap.getHeight() - initY;
    }
    Bitmap croppedBitmap = Bitmap.createBitmap(fixedBitmap, initX, initY, sizeX, sizeY);
    if (fixedBitmap != croppedBitmap) {
        fixedBitmap.recycle();
    }
    return croppedBitmap;
}

4. PUtil#detectFaces()

Project: Protocoder
File: PUtil.java
@ProtoMethod(description = "Detect faces in a bitmap", example = "")
@ProtoMethodParam(params = { "Bitmap", "numFaces" })
public int detectFaces(Bitmap bmp, int num_faces) {
    FaceDetector face_detector = new FaceDetector(bmp.getWidth(), bmp.getHeight(), num_faces);
    FaceDetector.Face[] faces = new FaceDetector.Face[num_faces];
    int face_count = face_detector.findFaces(bmp, faces);
    return face_count;
}

5. FaceCropper#cropFace()

Project: FaceRecognition
File: FaceCropper.java
/**
     * ?????????
     * 
     * @param bitmap
     *            ??????
     * @param debug
     *            ????????
     * @return
     */
private FaceResult cropFace(Bitmap bitmap, boolean debug) {
    Bitmap formatBitmap = BitmapOperate.formatBitmap(bitmap);
    formatBitmap = BitmapOperate.formatBitmapTo565(formatBitmap);
    Bitmap aimBitmap = formatBitmap.copy(Bitmap.Config.RGB_565, true);
    if (formatBitmap != aimBitmap) {
        formatBitmap.recycle();
    }
    // ?????????
    FaceDetector faceDetector = new FaceDetector(aimBitmap.getWidth(), aimBitmap.getHeight(), mMaxFaces);
    // ????
    FaceDetector.Face[] faces = new FaceDetector.Face[mMaxFaces];
    // Bitmap???565??
    int faceCount = faceDetector.findFaces(aimBitmap, faces);
    if (debug) {
        Log.d("kymjs", faceCount + "?????");
    }
    if (faceCount == 0) {
        return new FaceResult(aimBitmap);
    }
    int initX = aimBitmap.getWidth();
    int initY = aimBitmap.getHeight();
    int endX = 0;
    int endY = 0;
    PointF centerFace = new PointF();
    Canvas canvas = new Canvas(aimBitmap);
    canvas.drawBitmap(aimBitmap, new Matrix(), null);
    // ???????????
    for (int i = 0; i < faceCount; i++) {
        FaceDetector.Face face = faces[i];
        // ????????????????????
        int faceSize = (int) (face.eyesDistance() * 3);
        if (SizeMode.FACE_MARGIN.equals(mSizeMode)) {
            faceSize += mFaceMarginPx * 2;
        } else if (SizeMode.EYE_MARGIN.equals(mSizeMode)) {
            faceSize += face.eyesDistance() * mEyeMarginPx;
        }
        faceSize = Math.max(faceSize, mFaceMinSize);
        face.getMidPoint(centerFace);
        if (debug) {
            // ?????????
            canvas.drawPoint(centerFace.x, centerFace.y, mDebugPainter);
            canvas.drawCircle(centerFace.x, centerFace.y, face.eyesDistance() * 1.5f, mDebugPainter);
        }
        int tInitX = (int) (centerFace.x - faceSize / 2);
        int tInitY = (int) (centerFace.y - faceSize / 2);
        tInitX = Math.max(0, tInitX);
        tInitY = Math.max(0, tInitY);
        int tEndX = tInitX + faceSize;
        int tEndY = tInitY + faceSize;
        tEndX = Math.min(tEndX, aimBitmap.getWidth());
        tEndY = Math.min(tEndY, aimBitmap.getHeight());
        initX = Math.min(initX, tInitX);
        initY = Math.min(initY, tInitY);
        endX = Math.max(endX, tEndX);
        endY = Math.max(endY, tEndY);
    }
    int sizeX = endX - initX;
    int sizeY = endY - initY;
    if (sizeX + initX > aimBitmap.getWidth()) {
        sizeX = aimBitmap.getWidth() - initX;
    }
    if (sizeY + initY > aimBitmap.getHeight()) {
        sizeY = aimBitmap.getHeight() - initY;
    }
    Point init = new Point(initX, initY);
    Point end = new Point(initX + sizeX, initY + sizeY);
    return new FaceResult(aimBitmap, init, end);
}

6. FaceCropper#cropFace()

Project: AndroidFaceCropper
File: FaceCropper.java
protected CropResult cropFace(Bitmap original, boolean debug) {
    Bitmap fixedBitmap = BitmapUtils.forceEvenBitmapSize(original);
    fixedBitmap = BitmapUtils.forceConfig565(fixedBitmap);
    Bitmap mutableBitmap = fixedBitmap.copy(Bitmap.Config.RGB_565, true);
    if (fixedBitmap != mutableBitmap) {
        fixedBitmap.recycle();
    }
    FaceDetector faceDetector = new FaceDetector(mutableBitmap.getWidth(), mutableBitmap.getHeight(), mMaxFaces);
    FaceDetector.Face[] faces = new FaceDetector.Face[mMaxFaces];
    // The bitmap must be in 565 format (for now).
    int faceCount = faceDetector.findFaces(mutableBitmap, faces);
    if (BuildConfig.DEBUG) {
        Log.d(LOG_TAG, faceCount + " faces found");
    }
    if (faceCount == 0) {
        return new CropResult(mutableBitmap);
    }
    int initX = mutableBitmap.getWidth();
    int initY = mutableBitmap.getHeight();
    int endX = 0;
    int endY = 0;
    PointF centerFace = new PointF();
    Canvas canvas = new Canvas(mutableBitmap);
    canvas.drawBitmap(mutableBitmap, new Matrix(), null);
    // Calculates minimum box to fit all detected faces
    for (int i = 0; i < faceCount; i++) {
        FaceDetector.Face face = faces[i];
        // Eyes distance * 3 usually fits an entire face
        int faceSize = (int) (face.eyesDistance() * 3);
        if (SizeMode.FaceMarginPx.equals(mSizeMode)) {
            // *2 for top and down/right and left effect
            faceSize += mFaceMarginPx * 2;
        } else if (SizeMode.EyeDistanceFactorMargin.equals(mSizeMode)) {
            faceSize += face.eyesDistance() * mEyeDistanceFactorMargin;
        }
        faceSize = Math.max(faceSize, mFaceMinSize);
        face.getMidPoint(centerFace);
        if (debug) {
            canvas.drawPoint(centerFace.x, centerFace.y, mDebugPainter);
            canvas.drawCircle(centerFace.x, centerFace.y, face.eyesDistance() * 1.5f, mDebugPainter);
        }
        int tInitX = (int) (centerFace.x - faceSize / 2);
        int tInitY = (int) (centerFace.y - faceSize / 2);
        tInitX = Math.max(0, tInitX);
        tInitY = Math.max(0, tInitY);
        int tEndX = tInitX + faceSize;
        int tEndY = tInitY + faceSize;
        tEndX = Math.min(tEndX, mutableBitmap.getWidth());
        tEndY = Math.min(tEndY, mutableBitmap.getHeight());
        initX = Math.min(initX, tInitX);
        initY = Math.min(initY, tInitY);
        endX = Math.max(endX, tEndX);
        endY = Math.max(endY, tEndY);
    }
    int sizeX = endX - initX;
    int sizeY = endY - initY;
    if (sizeX + initX > mutableBitmap.getWidth()) {
        sizeX = mutableBitmap.getWidth() - initX;
    }
    if (sizeY + initY > mutableBitmap.getHeight()) {
        sizeY = mutableBitmap.getHeight() - initY;
    }
    Point init = new Point(initX, initY);
    Point end = new Point(initX + sizeX, initY + sizeY);
    return new CropResult(mutableBitmap, init, end);
}