Search in sources :

Example 31 with Face

use of android.hardware.camera2.params.Face in project android_frameworks_base by ResurrectionRemix.

the class CameraMetadataNative method getFaceRectangles.

// Face rectangles are defined as (left, top, right, bottom) instead of
// (left, top, width, height) at the native level, so the normal Rect
// conversion that does (l, t, w, h) -> (l, t, r, b) is unnecessary. Undo
// that conversion here for just the faces.
private Rect[] getFaceRectangles() {
    Rect[] faceRectangles = getBase(CaptureResult.STATISTICS_FACE_RECTANGLES);
    if (faceRectangles == null)
        return null;
    Rect[] fixedFaceRectangles = new Rect[faceRectangles.length];
    for (int i = 0; i < faceRectangles.length; i++) {
        fixedFaceRectangles[i] = new Rect(faceRectangles[i].left, faceRectangles[i].top, faceRectangles[i].right - faceRectangles[i].left, faceRectangles[i].bottom - faceRectangles[i].top);
    }
    return fixedFaceRectangles;
}
Also used : Rect(android.graphics.Rect) MarshalQueryableRect(android.hardware.camera2.marshal.impl.MarshalQueryableRect) Point(android.graphics.Point)

Example 32 with Face

use of android.hardware.camera2.params.Face in project android_frameworks_base by crdroidandroid.

the class LegacyFaceDetectMapper method mapResultFaces.

/**
     * Update the {@code result} camera metadata map with the new value for the
     * {@code statistics.faces} and {@code statistics.faceDetectMode}.
     *
     * <p>Face detect callbacks are processed in the background, and each call to
     * {@link #mapResultFaces} will have the latest faces as reflected by the camera1 callbacks.</p>
     *
     * <p>If the scene mode was set to {@code FACE_PRIORITY} but face detection is disabled,
     * the camera will still run face detection in the background, but no faces will be reported
     * in the capture result.</p>
     *
     * @param result a non-{@code null} result
     * @param legacyRequest a non-{@code null} request (read-only)
     */
public void mapResultFaces(CameraMetadataNative result, LegacyRequest legacyRequest) {
    checkNotNull(result, "result must not be null");
    checkNotNull(legacyRequest, "legacyRequest must not be null");
    Camera.Face[] faces, previousFaces;
    int fdMode;
    boolean fdScenePriority;
    synchronized (mLock) {
        fdMode = mFaceDetectReporting ? STATISTICS_FACE_DETECT_MODE_SIMPLE : STATISTICS_FACE_DETECT_MODE_OFF;
        if (mFaceDetectReporting) {
            faces = mFaces;
        } else {
            faces = null;
        }
        fdScenePriority = mFaceDetectScenePriority;
        previousFaces = mFacesPrev;
        mFacesPrev = faces;
    }
    CameraCharacteristics characteristics = legacyRequest.characteristics;
    CaptureRequest request = legacyRequest.captureRequest;
    Size previewSize = legacyRequest.previewSize;
    Camera.Parameters params = legacyRequest.parameters;
    Rect activeArray = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
    ZoomData zoomData = ParameterUtils.convertScalerCropRegion(activeArray, request.get(CaptureRequest.SCALER_CROP_REGION), previewSize, params);
    List<Face> convertedFaces = new ArrayList<>();
    if (faces != null) {
        for (Camera.Face face : faces) {
            if (face != null) {
                convertedFaces.add(ParameterUtils.convertFaceFromLegacy(face, activeArray, zoomData));
            } else {
                Log.w(TAG, "mapResultFaces - read NULL face from camera1 device");
            }
        }
    }
    if (DEBUG && previousFaces != faces) {
        // Log only in verbose and IF the faces changed
        Log.v(TAG, "mapResultFaces - changed to " + ListUtils.listToString(convertedFaces));
    }
    result.set(CaptureResult.STATISTICS_FACES, convertedFaces.toArray(new Face[0]));
    result.set(CaptureResult.STATISTICS_FACE_DETECT_MODE, fdMode);
    // Override scene mode with FACE_PRIORITY if the request was using FACE_PRIORITY
    if (fdScenePriority) {
        result.set(CaptureResult.CONTROL_SCENE_MODE, CONTROL_SCENE_MODE_FACE_PRIORITY);
    }
}
Also used : Rect(android.graphics.Rect) Size(android.util.Size) ArrayList(java.util.ArrayList) CameraCharacteristics(android.hardware.camera2.CameraCharacteristics) ZoomData(android.hardware.camera2.legacy.ParameterUtils.ZoomData) CaptureRequest(android.hardware.camera2.CaptureRequest) Camera(android.hardware.Camera) Face(android.hardware.camera2.params.Face)

Example 33 with Face

use of android.hardware.camera2.params.Face in project android_frameworks_base by crdroidandroid.

the class CameraMetadataNative method getFaceRectangles.

// Face rectangles are defined as (left, top, right, bottom) instead of
// (left, top, width, height) at the native level, so the normal Rect
// conversion that does (l, t, w, h) -> (l, t, r, b) is unnecessary. Undo
// that conversion here for just the faces.
private Rect[] getFaceRectangles() {
    Rect[] faceRectangles = getBase(CaptureResult.STATISTICS_FACE_RECTANGLES);
    if (faceRectangles == null)
        return null;
    Rect[] fixedFaceRectangles = new Rect[faceRectangles.length];
    for (int i = 0; i < faceRectangles.length; i++) {
        fixedFaceRectangles[i] = new Rect(faceRectangles[i].left, faceRectangles[i].top, faceRectangles[i].right - faceRectangles[i].left, faceRectangles[i].bottom - faceRectangles[i].top);
    }
    return fixedFaceRectangles;
}
Also used : Rect(android.graphics.Rect) MarshalQueryableRect(android.hardware.camera2.marshal.impl.MarshalQueryableRect) Point(android.graphics.Point)

Example 34 with Face

use of android.hardware.camera2.params.Face in project android_frameworks_base by crdroidandroid.

the class CameraMetadataNative method setFaces.

private boolean setFaces(Face[] faces) {
    if (faces == null) {
        return false;
    }
    int numFaces = faces.length;
    // Detect if all faces are SIMPLE or not; count # of valid faces
    boolean fullMode = true;
    for (Face face : faces) {
        if (face == null) {
            numFaces--;
            Log.w(TAG, "setFaces - null face detected, skipping");
            continue;
        }
        if (face.getId() == Face.ID_UNSUPPORTED) {
            fullMode = false;
        }
    }
    Rect[] faceRectangles = new Rect[numFaces];
    byte[] faceScores = new byte[numFaces];
    int[] faceIds = null;
    int[] faceLandmarks = null;
    if (fullMode) {
        faceIds = new int[numFaces];
        faceLandmarks = new int[numFaces * FACE_LANDMARK_SIZE];
    }
    int i = 0;
    for (Face face : faces) {
        if (face == null) {
            continue;
        }
        faceRectangles[i] = face.getBounds();
        faceScores[i] = (byte) face.getScore();
        if (fullMode) {
            faceIds[i] = face.getId();
            int j = 0;
            faceLandmarks[i * FACE_LANDMARK_SIZE + j++] = face.getLeftEyePosition().x;
            faceLandmarks[i * FACE_LANDMARK_SIZE + j++] = face.getLeftEyePosition().y;
            faceLandmarks[i * FACE_LANDMARK_SIZE + j++] = face.getRightEyePosition().x;
            faceLandmarks[i * FACE_LANDMARK_SIZE + j++] = face.getRightEyePosition().y;
            faceLandmarks[i * FACE_LANDMARK_SIZE + j++] = face.getMouthPosition().x;
            faceLandmarks[i * FACE_LANDMARK_SIZE + j++] = face.getMouthPosition().y;
        }
        i++;
    }
    set(CaptureResult.STATISTICS_FACE_RECTANGLES, faceRectangles);
    set(CaptureResult.STATISTICS_FACE_IDS, faceIds);
    set(CaptureResult.STATISTICS_FACE_LANDMARKS, faceLandmarks);
    set(CaptureResult.STATISTICS_FACE_SCORES, faceScores);
    return true;
}
Also used : Rect(android.graphics.Rect) MarshalQueryableRect(android.hardware.camera2.marshal.impl.MarshalQueryableRect) Face(android.hardware.camera2.params.Face) Point(android.graphics.Point)

Example 35 with Face

use of android.hardware.camera2.params.Face in project android_frameworks_base by crdroidandroid.

the class CameraMetadataNative method setFaceRectangles.

/**
     * Convert Face Rectangles from managed side to native side as they have different definitions.
     * <p>
     * Managed side face rectangles are defined as: left, top, width, height.
     * Native side face rectangles are defined as: left, top, right, bottom.
     * The input face rectangle need to be converted to native side definition when set is called.
     * </p>
     *
     * @param faceRects Input face rectangles.
     * @return true if face rectangles can be set successfully. Otherwise, Let the caller
     *             (setBase) to handle it appropriately.
     */
private boolean setFaceRectangles(Rect[] faceRects) {
    if (faceRects == null) {
        return false;
    }
    Rect[] newFaceRects = new Rect[faceRects.length];
    for (int i = 0; i < newFaceRects.length; i++) {
        newFaceRects[i] = new Rect(faceRects[i].left, faceRects[i].top, faceRects[i].right + faceRects[i].left, faceRects[i].bottom + faceRects[i].top);
    }
    setBase(CaptureResult.STATISTICS_FACE_RECTANGLES, newFaceRects);
    return true;
}
Also used : Rect(android.graphics.Rect) MarshalQueryableRect(android.hardware.camera2.marshal.impl.MarshalQueryableRect) Point(android.graphics.Point)

Aggregations

Point (android.graphics.Point)30 Rect (android.graphics.Rect)30 Face (android.hardware.camera2.params.Face)25 MarshalQueryableRect (android.hardware.camera2.marshal.impl.MarshalQueryableRect)20 Camera (android.hardware.Camera)10 ArrayList (java.util.ArrayList)10 Area (android.hardware.Camera.Area)5 CameraCharacteristics (android.hardware.camera2.CameraCharacteristics)5 CaptureRequest (android.hardware.camera2.CaptureRequest)5 ZoomData (android.hardware.camera2.legacy.ParameterUtils.ZoomData)5 MarshalQueryableNativeByteToInteger (android.hardware.camera2.marshal.impl.MarshalQueryableNativeByteToInteger)5 TonemapCurve (android.hardware.camera2.params.TonemapCurve)5 SmallTest (android.test.suitebuilder.annotation.SmallTest)5 Size (android.util.Size)5