Java Code Examples for com.google.android.gms.vision.face.Landmark#RIGHT_EYE

The following examples show how to use com.google.android.gms.vision.face.Landmark#RIGHT_EYE . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: DetectFacesFunction.java    From face-detection-ane with Apache License 2.0 6 votes vote down vote up
private String getLandmarkKey( int landmarkType ) {
	switch( landmarkType ) {
		case Landmark.BOTTOM_MOUTH: return "mouth";
		case Landmark.LEFT_EYE: return "leftEye";
		case Landmark.RIGHT_EYE: return "rightEye";
		case Landmark.LEFT_EAR: return "leftEar";
		case Landmark.LEFT_EAR_TIP: return "leftEarTip";
		case Landmark.LEFT_CHEEK: return "leftCheek";
		case Landmark.LEFT_MOUTH: return "leftMouth";
		case Landmark.RIGHT_EAR: return "rightEar";
		case Landmark.RIGHT_EAR_TIP: return "rightEarTip";
		case Landmark.RIGHT_CHEEK: return "rightCheek";
		case Landmark.RIGHT_MOUTH: return "rightMouth";
		case Landmark.NOSE_BASE: return "noseBase";
		default: return null;
	}
}
 
Example 2
Source File: PhotoFace.java    From TelePlus-Android with GNU General Public License v2.0 4 votes vote down vote up
public PhotoFace(Face face, Bitmap sourceBitmap, Size targetSize, boolean sideward) {
    List<Landmark> landmarks = face.getLandmarks();

    Point leftEyePoint = null;
    Point rightEyePoint = null;

    Point leftMouthPoint = null;
    Point rightMouthPoint = null;

    for (Landmark landmark : landmarks) {
        PointF point = landmark.getPosition();

        switch (landmark.getType()) {
            case Landmark.LEFT_EYE: {
                leftEyePoint = transposePoint(point, sourceBitmap, targetSize, sideward);
            }
            break;

            case Landmark.RIGHT_EYE: {
                rightEyePoint = transposePoint(point, sourceBitmap, targetSize, sideward);
            }
            break;

            case Landmark.LEFT_MOUTH: {
                leftMouthPoint = transposePoint(point, sourceBitmap, targetSize, sideward);
            }
            break;

            case Landmark.RIGHT_MOUTH: {
                rightMouthPoint = transposePoint(point, sourceBitmap, targetSize, sideward);
            }
            break;
        }
    }

    if (leftEyePoint != null && rightEyePoint != null) {
        eyesCenterPoint = new Point(0.5f * leftEyePoint.x + 0.5f * rightEyePoint.x,
                0.5f * leftEyePoint.y + 0.5f * rightEyePoint.y);
        eyesDistance = (float)Math.hypot(rightEyePoint.x - leftEyePoint.x, rightEyePoint.y - leftEyePoint.y);
        angle = (float)Math.toDegrees(Math.PI + Math.atan2(rightEyePoint.y - leftEyePoint.y, rightEyePoint.x - leftEyePoint.x));

        width = eyesDistance * 2.35f;

        float foreheadHeight = 0.8f * eyesDistance;
        float upAngle = (float)Math.toRadians(angle - 90);
        foreheadPoint = new Point(eyesCenterPoint.x + foreheadHeight * (float)Math.cos(upAngle),
                eyesCenterPoint.y + foreheadHeight * (float)Math.sin(upAngle));
    }

    if (leftMouthPoint != null && rightMouthPoint != null) {
        mouthPoint = new Point(0.5f * leftMouthPoint.x + 0.5f * rightMouthPoint.x,
                0.5f * leftMouthPoint.y + 0.5f * rightMouthPoint.y);

        float chinDepth = 0.7f * eyesDistance;
        float downAngle = (float)Math.toRadians(angle + 90);
        chinPoint = new Point(mouthPoint.x + chinDepth * (float)Math.cos(downAngle),
                mouthPoint.y + chinDepth * (float)Math.sin(downAngle));
    }
}
 
Example 3
Source File: PhotoFace.java    From TelePlus-Android with GNU General Public License v2.0 4 votes vote down vote up
public PhotoFace(Face face, Bitmap sourceBitmap, Size targetSize, boolean sideward) {
    List<Landmark> landmarks = face.getLandmarks();

    Point leftEyePoint = null;
    Point rightEyePoint = null;

    Point leftMouthPoint = null;
    Point rightMouthPoint = null;

    for (Landmark landmark : landmarks) {
        PointF point = landmark.getPosition();

        switch (landmark.getType()) {
            case Landmark.LEFT_EYE: {
                leftEyePoint = transposePoint(point, sourceBitmap, targetSize, sideward);
            }
            break;

            case Landmark.RIGHT_EYE: {
                rightEyePoint = transposePoint(point, sourceBitmap, targetSize, sideward);
            }
            break;

            case Landmark.LEFT_MOUTH: {
                leftMouthPoint = transposePoint(point, sourceBitmap, targetSize, sideward);
            }
            break;

            case Landmark.RIGHT_MOUTH: {
                rightMouthPoint = transposePoint(point, sourceBitmap, targetSize, sideward);
            }
            break;
        }
    }

    if (leftEyePoint != null && rightEyePoint != null) {
        eyesCenterPoint = new Point(0.5f * leftEyePoint.x + 0.5f * rightEyePoint.x,
                0.5f * leftEyePoint.y + 0.5f * rightEyePoint.y);
        eyesDistance = (float)Math.hypot(rightEyePoint.x - leftEyePoint.x, rightEyePoint.y - leftEyePoint.y);
        angle = (float)Math.toDegrees(Math.PI + Math.atan2(rightEyePoint.y - leftEyePoint.y, rightEyePoint.x - leftEyePoint.x));

        width = eyesDistance * 2.35f;

        float foreheadHeight = 0.8f * eyesDistance;
        float upAngle = (float)Math.toRadians(angle - 90);
        foreheadPoint = new Point(eyesCenterPoint.x + foreheadHeight * (float)Math.cos(upAngle),
                eyesCenterPoint.y + foreheadHeight * (float)Math.sin(upAngle));
    }

    if (leftMouthPoint != null && rightMouthPoint != null) {
        mouthPoint = new Point(0.5f * leftMouthPoint.x + 0.5f * rightMouthPoint.x,
                0.5f * leftMouthPoint.y + 0.5f * rightMouthPoint.y);

        float chinDepth = 0.7f * eyesDistance;
        float downAngle = (float)Math.toRadians(angle + 90);
        chinPoint = new Point(mouthPoint.x + chinDepth * (float)Math.cos(downAngle),
                mouthPoint.y + chinDepth * (float)Math.sin(downAngle));
    }
}
 
Example 4
Source File: FaceGraphic.java    From Camera2Vision with Apache License 2.0 4 votes vote down vote up
@Override
public void draw(Canvas canvas) {
    Face face = mFace;
    if(face == null) {
        canvas.drawColor(0, PorterDuff.Mode.CLEAR);
        isSmilingProbability = -1;
        eyeRightOpenProbability= -1;
        eyeLeftOpenProbability = -1;
        return;
    }

    facePosition = new PointF(translateX(face.getPosition().x), translateY(face.getPosition().y));
    faceWidth = face.getWidth() * 4;
    faceHeight = face.getHeight() * 4;
    faceCenter = new PointF(translateX(face.getPosition().x + faceWidth/8), translateY(face.getPosition().y + faceHeight/8));
    isSmilingProbability = face.getIsSmilingProbability();
    eyeRightOpenProbability = face.getIsRightEyeOpenProbability();
    eyeLeftOpenProbability = face.getIsLeftEyeOpenProbability();
    eulerY = face.getEulerY();
    eulerZ = face.getEulerZ();
    //DO NOT SET TO NULL THE NON EXISTENT LANDMARKS. USE OLDER ONES INSTEAD.
    for(Landmark landmark : face.getLandmarks()) {
        switch (landmark.getType()) {
            case Landmark.LEFT_EYE:
                leftEyePos = new PointF(translateX(landmark.getPosition().x), translateY(landmark.getPosition().y));
                break;
            case Landmark.RIGHT_EYE:
                rightEyePos = new PointF(translateX(landmark.getPosition().x), translateY(landmark.getPosition().y));
                break;
            case Landmark.NOSE_BASE:
                noseBasePos = new PointF(translateX(landmark.getPosition().x), translateY(landmark.getPosition().y));
                break;
            case Landmark.LEFT_MOUTH:
                leftMouthCorner = new PointF(translateX(landmark.getPosition().x), translateY(landmark.getPosition().y));
                break;
            case Landmark.RIGHT_MOUTH:
                rightMouthCorner = new PointF(translateX(landmark.getPosition().x), translateY(landmark.getPosition().y));
                break;
            case Landmark.BOTTOM_MOUTH:
                mouthBase = new PointF(translateX(landmark.getPosition().x), translateY(landmark.getPosition().y));
                break;
            case Landmark.LEFT_EAR:
                leftEar = new PointF(translateX(landmark.getPosition().x), translateY(landmark.getPosition().y));
                break;
            case Landmark.RIGHT_EAR:
                rightEar = new PointF(translateX(landmark.getPosition().x), translateY(landmark.getPosition().y));
                break;
            case Landmark.LEFT_EAR_TIP:
                leftEarTip = new PointF(translateX(landmark.getPosition().x), translateY(landmark.getPosition().y));
                break;
            case Landmark.RIGHT_EAR_TIP:
                rightEarTip = new PointF(translateX(landmark.getPosition().x), translateY(landmark.getPosition().y));
                break;
            case Landmark.LEFT_CHEEK:
                leftCheek = new PointF(translateX(landmark.getPosition().x), translateY(landmark.getPosition().y));
                break;
            case Landmark.RIGHT_CHEEK:
                rightCheek = new PointF(translateX(landmark.getPosition().x), translateY(landmark.getPosition().y));
                break;
        }
    }

    Paint mPaint = new Paint();
    mPaint.setColor(Color.WHITE);
    mPaint.setStrokeWidth(4);
    if(faceCenter != null)
        canvas.drawBitmap(marker, faceCenter.x, faceCenter.y, null);
    if(noseBasePos != null)
        canvas.drawBitmap(marker, noseBasePos.x, noseBasePos.y, null);
    if(leftEyePos != null)
        canvas.drawBitmap(marker, leftEyePos.x, leftEyePos.y, null);
    if(rightEyePos != null)
        canvas.drawBitmap(marker, rightEyePos.x, rightEyePos.y, null);
    if(mouthBase != null)
        canvas.drawBitmap(marker, mouthBase.x, mouthBase.y, null);
    if(leftMouthCorner != null)
        canvas.drawBitmap(marker, leftMouthCorner.x, leftMouthCorner.y, null);
    if(rightMouthCorner != null)
        canvas.drawBitmap(marker, rightMouthCorner.x, rightMouthCorner.y, null);
    if(leftEar != null)
        canvas.drawBitmap(marker, leftEar.x, leftEar.y, null);
    if(rightEar != null)
        canvas.drawBitmap(marker, rightEar.x, rightEar.y, null);
    if(leftEarTip != null)
        canvas.drawBitmap(marker, leftEarTip.x, leftEarTip.y, null);
    if(rightEarTip != null)
        canvas.drawBitmap(marker, rightEarTip.x, rightEarTip.y, null);
    if(leftCheek != null)
        canvas.drawBitmap(marker, leftCheek.x, leftCheek.y, null);
    if(rightCheek != null)
        canvas.drawBitmap(marker, rightCheek.x, rightCheek.y, null);
}
 
Example 5
Source File: FaceDetectionImplGmsCore.java    From 365browser with Apache License 2.0 4 votes vote down vote up
@Override
public void detect(
        SharedBufferHandle frameData, int width, int height, DetectResponse callback) {
    // The vision library will be downloaded the first time the API is used
    // on the device; this happens "fast", but it might have not completed,
    // bail in this case.
    if (!mFaceDetector.isOperational()) {
        Log.e(TAG, "FaceDetector is not operational");

        // Fallback to Android's FaceDetectionImpl.
        FaceDetectorOptions options = new FaceDetectorOptions();
        options.fastMode = mFastMode;
        options.maxDetectedFaces = mMaxFaces;
        FaceDetectionImpl detector = new FaceDetectionImpl(options);
        detector.detect(frameData, width, height, callback);
        return;
    }

    Frame frame = SharedBufferUtils.convertToFrame(frameData, width, height);
    if (frame == null) {
        Log.e(TAG, "Error converting SharedMemory to Frame");
        callback.call(new FaceDetectionResult[0]);
        return;
    }

    final SparseArray<Face> faces = mFaceDetector.detect(frame);

    FaceDetectionResult[] faceArray = new FaceDetectionResult[faces.size()];
    for (int i = 0; i < faces.size(); i++) {
        faceArray[i] = new FaceDetectionResult();
        final Face face = faces.valueAt(i);

        final PointF corner = face.getPosition();
        faceArray[i].boundingBox = new RectF();
        faceArray[i].boundingBox.x = corner.x;
        faceArray[i].boundingBox.y = corner.y;
        faceArray[i].boundingBox.width = face.getWidth();
        faceArray[i].boundingBox.height = face.getHeight();

        final List<Landmark> landmarks = face.getLandmarks();
        ArrayList<org.chromium.shape_detection.mojom.Landmark> mojoLandmarks =
                new ArrayList<org.chromium.shape_detection.mojom.Landmark>(landmarks.size());

        for (int j = 0; j < landmarks.size(); j++) {
            final Landmark landmark = landmarks.get(j);
            final int landmarkType = landmark.getType();
            if (landmarkType == Landmark.LEFT_EYE || landmarkType == Landmark.RIGHT_EYE
                    || landmarkType == Landmark.BOTTOM_MOUTH) {
                org.chromium.shape_detection.mojom.Landmark mojoLandmark =
                        new org.chromium.shape_detection.mojom.Landmark();
                mojoLandmark.location = new org.chromium.gfx.mojom.PointF();
                mojoLandmark.location.x = landmark.getPosition().x;
                mojoLandmark.location.y = landmark.getPosition().y;
                mojoLandmark.type = landmarkType == Landmark.BOTTOM_MOUTH ? LandmarkType.MOUTH
                                                                          : LandmarkType.EYE;
                mojoLandmarks.add(mojoLandmark);
            }
        }
        faceArray[i].landmarks = mojoLandmarks.toArray(
                new org.chromium.shape_detection.mojom.Landmark[mojoLandmarks.size()]);
    }
    callback.call(faceArray);
}