我正在使用新的视觉api来检测相机流中的脸部。如果检测到新面部,我将通过自定义FaceDetector类捕获图像(如此主题中所述:Mobile Vision API - concatenate new detector object to continue frame processing)
class MyFaceDetector extends Detector<Face> {
private Detector<Face> mDelegate;
MyFaceDetector(Detector<Face> delegate) {
mDelegate = delegate;
}
public SparseArray<Face> detect(Frame frame) {
int width = frame.getMetadata().getWidth();
int height = frame.getMetadata().getHeight();
YuvImage yuvImage = new YuvImage(frame.getGrayscaleImageData().array(), ImageFormat.NV21, width, height, null);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
yuvImage.compressToJpeg(new Rect(0, 0, width, height), 100, byteArrayOutputStream);
byte[] jpegArray = byteArrayOutputStream.toByteArray();
Bitmap bitmap = BitmapFactory.decodeByteArray(jpegArray, 0, jpegArray.length);
GraphicHolder.faceImage = bitmap;
return mDelegate.detect(frame);
}
public boolean isOperational() {
return mDelegate.isOperational();
}
public boolean setFocus(int id) {
return mDelegate.setFocus(id);
}
}
我遇到的问题是每次调用detect函数时都会创建一个位图。这不仅是在识别新面孔时。 在我的情况下,这是不需要的,并将使用我想避免的不必要的资源。
有没有办法改变它,所以它只在检测到面部时才创建一个位图?
答案 0 :(得分:0)
我将使用相同的方法,但不确定使用的代码是否正确:
FaceDetector faceDetector = new FaceDetector.Builder(context)
.build();
MyFaceDetector myFaceDetector = new MyFaceDetector(faceDetector);
myFaceDetector.setProcessor(/* include your processor here */);
mCameraSource = new CameraSource.Builder(context, myFaceDetector)
.build();
您在里面写了什么:/ *在这里包括您的处理器* /? 在此先感谢