我正在尝试使用android camera2进行面部/眼睛检测。我的问题是上面没有太多的文档,某些功能无法正常运行。我需要处理相机发送的每一帧。
我正在尝试使用captureRequestBuilder.addTarget()
将帧发送到imageReader.OnAvailableImage()
,但是当我这样做时,我不再将帧发送到预览会话。
这段代码破坏了我的手机摄像头预览。
SurfaceTexture texture = textureView.getSurfaceTexture();
assert texture != null;
texture.setDefaultBufferSize(imageSize.getWidth(),imageSize.getHeight());
Surface surface = new Surface(texture);
ArrayList<Surface> surfaces = new ArrayList<>();
surfaces.add(surface);
surfaces.add(imageReader.getSurface());
captureRequestBuilder = cameraDevice.createCaptureRequest(cameraDevice.TEMPLATE_PREVIEW);
captureRequestBuilder.addTarget(surface);
captureRequestBuilder.addTarget(imageReader.getSurface());
cameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() {
但是,如果我这样做,预览效果很好,但是我找不到任何处理帧的方法
SurfaceTexture texture = textureView.getSurfaceTexture();
assert texture != null;
texture.setDefaultBufferSize(imageSize.getWidth(),imageSize.getHeight());
Surface surface = new Surface(texture);
captureRequestBuilder = cameraDevice.createCaptureRequest(cameraDevice.TEMPLATE_PREVIEW);
captureRequestBuilder.addTarget(surface);
cameraDevice.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback() {
这是ImageReader
ImageReader reader = ImageReader.newInstance(width,height,ImageFormat.JPEG,1);
List<Surface> outputSurface = new ArrayList<>(2);
outputSurface.add(reader.getSurface());
outputSurface.add(new Surface(textureView.getSurfaceTexture()));
int rotation = getWindowManager().getDefaultDisplay().getRotation();
ImageReader.OnImageAvailableListener readerListener = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Image image = null;
try
{
image = reader.acquireLatestImage();
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
byte[] bytes = new byte[buffer.capacity()];
buffer.get(bytes);
}
catch (Exception e)
{
e.printStackTrace();
}
finally {
{
if (image != null)
image.close();
}
}
}
};
reader.setOnImageAvailableListener(readerListener,mBackgroundHandler);
有人可以帮助我实时处理Camera2帧吗?