检测到的脸部显示圈 - Android

时间:2015-11-24 15:08:38

标签: android android-studio android-camera face-detection

我制作了视频捕捉和人脸检测应用程序。我想在检测到的Face上显示一个圆圈,并在Myview类中使用以下方法,检查它是否正常工作:

  protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        canvas.drawCircle(50f,50f,50f, paint);

    }

我有相对布局和CameraPreview。我在哪里可以调用MyView类来获得所需的功能?

1 个答案:

答案 0 :(得分:0)

您可以在此处使用画布检测到的脸部上显示圆圈是一个示例

import com.google.android.gms.vision.face.Face;

/**
* Created by echessa on 8/31/15.
*/
public class CustomView extends View {

private Bitmap mBitmap;
private SparseArray<Face> mFaces;

public CustomView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

/**
 * Sets the bitmap background and the associated face detections.
 */
void setContent(Bitmap bitmap, SparseArray<Face> faces) {
    mBitmap = bitmap;
    mFaces = faces;
    invalidate();
}

/**
 * Draws the bitmap background and the associated face landmarks.
 */
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if ((mBitmap != null) && (mFaces != null)) {
        double scale = drawBitmap(canvas);
        drawFaceRectangle(canvas, scale);
    }
}

/**
 * Draws the bitmap background, scaled to the device size.  Returns the scale for future use in
 * positioning the facial landmark graphics.
 */
private double drawBitmap(Canvas canvas) {
    double viewWidth = canvas.getWidth();
    double viewHeight = canvas.getHeight();
    double imageWidth = mBitmap.getWidth();
    double imageHeight = mBitmap.getHeight();
    double scale = Math.min(viewWidth / imageWidth, viewHeight / imageHeight);

    Rect destBounds = new Rect(0, 0, (int)(imageWidth * scale), (int)(imageHeight * scale));
    canvas.drawBitmap(mBitmap, null, destBounds, null);
    return scale;
}

/**
 * Draws a rectangle around each detected face
 */
private void drawFaceRectangle(Canvas canvas, double scale) {
    Paint paint = new Paint();
    paint.setColor(Color.GREEN);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(5);

    for (int i = 0; i < mFaces.size(); ++i) {
        Face face = mFaces.valueAt(i);
        canvas.drawRect((float)(face.getPosition().x * scale),
            (float)(face.getPosition().y * scale),
            (float)((face.getPosition().x + face.getWidth()) * scale),
            (float)((face.getPosition().y + face.getHeight()) * scale),
            paint);
    }
}

}

了解更多信息http://www.sitepoint.com/face-detection-in-android-with-google-play-services/