我正在尝试将Google Mobile Vision API与 camera2 模块一起使用,但遇到了很多麻烦。
我使用 Google 的android-Camera2Video示例代码作为基础。我已对其进行了修改以包含以下回调:
Camera2VideoFragment.java
OnCameraImageAvailable mCameraImageCallback;
public interface OnCameraImageAvailable {
void onCameraImageAvailable(Image image);
}
ImageReader.OnImageAvailableListener mImageAvailable = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Image image = reader.acquireLatestImage();
if (image == null)
return;
mCameraImageCallback.onCameraImageAvailable(image);
image.close();
}
};
这样,包括在内的任何片段Camera2VideoFragment.java
都可以访问其图像。
现在,条形码 API 只接受Bitmap
图像,但我无法转换YUV_420_888
为位图。相反,我将imageReader
's 文件格式更改为JPEG
并运行以下转换代码:
Image.Plane[] planes = image.getPlanes();
ByteBuffer buffer = planes[0].getBuffer();
buffer.rewind();
byte[] data = new byte[buffer.capacity()];
buffer.get(data);
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
JPEG
这行得通,但是将数据馈送到的帧率下降imageReader
是显着的。我想知道是否有人以前解决过这个问题。