で遊んでいますFaceDetectionListener
。私の目的は、目の周りに円を描くことです。というSurfaceView
名前preview
のSurfaceHolder
オブジェクトと という名前のオブジェクトがありますpreviewHolder
。
すべてが非常にうまく機能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!");
}};
行で NullPointerException を取得し続けます int leftEyeXCoordinate = f.leftEye.x;
カメラが動き回っている間に、点や四角形などを描画できますか? それとも、最初に写真をキャプチャする必要がありますか?
私の質問は次のとおりです。以前にこれを達成した人がいて、どうすればできるか教えてください。
ありがとう!