【问题标题】:Switching to Camera2 in Android Vision API在 Android Vision API 中切换到 Camera2
【发布时间】:2016-06-01 04:24:43
【问题描述】:

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

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

提前致谢,

【问题讨论】:

    标签: android android-vision


    【解决方案1】:

    可以将 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。为了使一切正常,您必须将预览帧转换为一种受支持的格式。

    一旦您从ImageReaderImage 获得 Camera2 预览帧,您就可以使用此函数将其转换为支持的格式(在本例中为 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();
    

    最后,用创建的 Frame 调用检测器:

    mDetector.receiveFrame(outputFrame);
    

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

    【讨论】:

    • 我尝试使用convertYUV420888ToNV21()转换数据,但它根本不扫描条形码或二维码
    • @LalitPoptani 如果您遇到问题,请随时在此处打开一个新问题:github.com/EzequielAdrianM/Camera2Vision/issues 并提供更多信息,以便我为您提供帮助。
    【解决方案2】:

    请看一下

    camera2 with mobile vision? #65

    好的,我找到了这个

    官方 API 中没有针对 CameraSource 类的 camera2 版本的近期计划。但是,鉴于 API 的结构,CameraSource 的替代版本可以由使用 camera2 的开发人员社区编写。用于处理帧和检测器的所有现有 API 也足以支持 camera2 实现。

    【讨论】:

      【解决方案3】:

      我没有尝试过下面的链接,因为我停止了 Google Android Vision 的工作,但我认为它对那些想要的人有好处:

      https://medium.com/@mt1729/an-android-journey-barcode-scanning-with-mobile-vision-api-and-camera2-part-1-8a97cc0d6747

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-14
        • 2015-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多