我正在使用新的视觉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函数时都会创建一个位图。这不仅是在识别新面孔时。在我的情况下,这是不需要的,并将使用我想避免的不必要的资源。
有没有办法改变它,所以只有在检测到面部时才会创建一个位图?
我会使用相同的方法,但我不确定我使用正确的代码:
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();
你在里面写了什么:/ *包括你的处理器* /?提前致谢