[英]Draw Canvas over eyes using the FaceDetectionListener
我在玩FaceDetectionListener
,目的是在眼睛周围画一个圆。 我有一个名为preview
SurfaceView
对象和一个名为previewHolder
的SurfaceHolder
对象。
一切正常,我可以使用后置摄像头检测在SurfaceView
中代表了多少张面孔。 我还想在左右眼周围画一些圆。 我的drawCanvas
方法如下所示:
private void drawCanvas(float x, float y) {
Canvas canvas = previewHolder.lockCanvas();
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.BLACK);
paint.setDither(true);
paint.setColor(0xFFFFFF00);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeWidth(3);
canvas.drawPoint(x, y, paint);
previewHolder.unlockCanvasAndPost(canvas);
}
从FaceDetectionListener
调用此方法:
@Override
public void onFaceDetection(Face[] faces, Camera camera) {
if (faces.length > 0) {
tv.setText(String.valueOf(faces.length) + " Face(s) Detected");
for(Face f : faces) {
int leftEyeXCoordinate = f.leftEye.x;
int leftEyeYCoordinate = f.leftEye.y;
drawCanvas(leftEyeXCoordinate, leftEyeYCoordinate);
int rightEyeXCoordinate = f.rightEye.x;
int rightEyeYCoordinate = f.rightEye.y;
drawCanvas(rightEyeXCoordinate, rightEyeYCoordinate);
}
}
else
tv.setText("No Faces Detected!");
}};
我一直在行int leftEyeXCoordinate = f.leftEye.x;
处获得NullPointerException int leftEyeXCoordinate = f.leftEye.x;
相机移动时,我可以画点,矩形和其他东西吗? 还是我必须先拍摄图片?
因此,我的问题是:有人有没有做到这一点,并想告诉我该怎么做?
谢谢!
是的,我也看到了这个问题。 返回的Face对象是android.hardware.Camera.Face而不是FaceDetector.Face,并且只有rect对象具有有效的信息。 矩形对象的边界在相机坐标系中。 您将不得不将它们转换为Views坐标系。 它在rect下的此链接中进行了解释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.