gpt4 book ai didi

android - 在 Android Vision API 中切换到 Camera2

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:26 25 4
gpt4 key购买 nike

我看到在 android vision api 中(示例在这里:https://github.com/googlesamples/android-vision)相机 (camera1) 现已弃用,建议使用 camera2。

你们知道如何重写 CameraSource 以在 android vision 上使用 camera2 吗?

提前致谢

最佳答案

可以将 Camera2 API 与 Google Vision API 结合使用。

首先,Google Vision API 人脸检测器收到一个 Frame用于分析(检测人脸及其地标)的对象。

Camera1 API 提供 NV21 图像格式的预览帧,这对我们来说非常理想。 Google Vision Frame.Builder 支持 setImageData (NV16、NV21 或 YV12 图像格式的 ByteBuffer)和 setBitmap使用位图作为预览帧进行处理。

您的问题是 Camera2 API 以不同的格式提供预览帧。是YUV_420_888 .为使一切正常,您必须将预览帧转换为一种受支持的格式。

一旦您从 ImageReader 获得 Camera2 预览帧作为Image您可以使用此函数将其转换为支持的格式(在本例中为 NV21)。

private byte[] convertYUV420888ToNV21(Image imgYUV420) {
// Converting YUV_420_888 data to YUV_420_SP (NV21).
byte[] data;
ByteBuffer buffer0 = imgYUV420.getPlanes()[0].getBuffer();
ByteBuffer buffer2 = imgYUV420.getPlanes()[2].getBuffer();
int buffer0_size = buffer0.remaining();
int buffer2_size = buffer2.remaining();
data = new byte[buffer0_size + buffer2_size];
buffer0.get(data, 0, buffer0_size);
buffer2.get(data, buffer0_size, buffer2_size);
return data;
}

然后您可以使用返回的 byte[] 创建一个 Google Vision Frame:

outputFrame = new Frame.Builder()
.setImageData(nv21bytes, mPreviewSize.getWidth(), mPreviewSize.getHeight(), ImageFormat.NV21)
.setId(mPendingFrameId)
.setTimestampMillis(mPendingTimeMillis)
.setRotation(mSensorOrientation)
.build();

最后,您使用创建的框架调用检测器:

mDetector.receiveFrame(outputFrame);

无论如何,如果您想了解更多相关信息,可以在 GitHub 上免费测试我的工作示例:Camera2Vision .希望对您有所帮助:)

关于android - 在 Android Vision API 中切换到 Camera2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37559401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com