I used com.google.android.gms.vision.face.FaceDetector to detect faces in the camera preview callback shown below:
faceDetector = new FaceDetector.Builder(this)
.setTrackingEnabled(false)
.setMode(FaceDetector.FAST_MODE)
.setLandmarkType(FaceDetector.ALL_LANDMARKS)
.build();
mCamera.setPreviewCallbackWithBuffer(new Camera.PreviewCallback() {
@Override
public void onPreviewFrame(final byte[] data, Camera camera) {
if (faceDetector.isOperational()) {
int format = camera.getParameters().getPreviewFormat();
int width = camera.getParameters().getPreviewSize().width;
int height = camera.getParameters().getPreviewSize().height;
Frame frame = new Frame.Builder().setImageData(ByteBuffer.wrap(data), width, height, format).build();
SparseArray<Face> faces = faceDetector.detect(frame);
Log.d("TEST", "Num faces = " + faces.size());
}
mSurfaceView.requestRender();
camera.addCallbackBuffer(mImageBuffer);
}
});
However, the output is always Num faces = 0
. How can I fix this?
You made one mistake. Your code must look like this:
faceDetector = new FaceDetector.Builder(this)
.setTrackingEnabled(false)
.setMode(FaceDetector.FAST_MODE)
.setLandmarkType(FaceDetector.ALL_LANDMARKS)
.build();
mCamera.setPreviewCallbackWithBuffer(new Camera.PreviewCallback() {
@Override
public void onPreviewFrame(final byte[] data, Camera camera) {
if(!faceDetector.isOperational()){
Log.e("TEST", "Could not set up the face detector!");
} else {
int format = camera.getParameters().getPreviewFormat();
int width = camera.getParameters().getPreviewSize().width;
int height = camera.getParameters().getPreviewSize().height;
Frame frame = new Frame.Builder().setImageData(ByteBuffer.wrap(data), width, height, format).build();
SparseArray<Face> faces = faceDetector.detect(frame);
Log.d("TEST", "Num faces = " + faces.size());
}
mSurfaceView.requestRender();
camera.addCallbackBuffer(mImageBuffer);
}
});
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.