CameraX ImageAnalysis 设置 TargetResolution 小于 640x480

Posted

技术标签:

【中文标题】CameraX ImageAnalysis 设置 TargetResolution 小于 640x480【英文标题】:CameraX ImageAnalysis set TargetResolution smaller than 640x480 【发布时间】:2020-11-24 03:11:04 【问题描述】:

我正在尝试通过将 480x360 图像提供给 CameraX 的 ImageAnalysis 来提高人脸检测率。但是,以下代码会生成 640x480 图像,这会将检测速度降低到 10 fps。如果我给 480x360,我可以将速率提高到 20。

    如何获得更小的目标分辨率和默认值

    是否可以将我为图像分析获得的图像显示为 prweview。与预览用例相反。这样人脸检测就不会和预览有太大的延迟了。

    图像分析图像分析 = 建设者 .setTargetResolution(新尺寸(360, 480)) .setTargetRotation(旋转) .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST) .build();

【问题讨论】:

你能得到ImageProxy 低于640*480 的尺寸吗?即使我设置了 176*144,它仍然是默认值。只有预览在改变。 【参考方案1】:

如何获得更小的目标分辨率和默认值

docs 的默认值应为 640x480。

至于如何获得更小的目标分辨率,我可以想象三种可能性。

    您在某处错误地引用了 imageAnalysis 对象,它忽略了您的构建器,并默认使用 640x480 的默认分辨率。 您的相机不支持 Size(360,480) 分辨率,支持的最接近的分辨率是 640x480。 您以错误的顺序引用尺寸,即尺寸 (360, 480) 可能导致选择的分辨率与尺寸 (480, 360) 不同。 (您在问题中按两个顺序引用它们)。

根据docs

目标分辨率尝试建立图像分辨率的最小界限。实际图像分辨率将是最接近的可用分辨率,其尺寸不小于目标分辨率,由相机实现确定。但是,如果不存在等于或大于目标分辨率的分辨率,则会选择小于目标分辨率的最接近的可用分辨率。

所以,我会尝试一些较小的尺寸,例如Size(200, 200) 并查看支持的较小分辨率并从那里放大。

有没有办法将我为图像分析获得的图像显示为 prweview。与预览用例相反。这样人脸检测就不会和预览有太大的延迟了。

我不确定您为什么认为这会更快,因为这似乎会序列化操作而不是同步执行它们。

如果您需要这方面的进一步帮助,请提供有关创建 ImageAnalysis 实例的所有代码。

【讨论】:

0 = Size@11085 "1440x1080" 1 = Size@11086 "1280x720" 2 = Size@11087 "960x720" 3 = Size@11088 "960x540" 4 = 尺寸@11089 "720x720" 5 = 尺寸@11090 "800x600" 6 = 尺寸@11091 "720x480" 7 = 尺寸@11092 "640x480" 8 = 尺寸@11093 "480x320" 9 = Size@11094 "352x288" 10 = Size@11095 "320x240" 11 = Size@11096 "176x144" 我用错了数字。所以轻微的错误最终会给出默认的结果。这也意味着我们必须以某种方式获取此列表并选择所需的名称。感谢您的帮助。

以上是关于CameraX ImageAnalysis 设置 TargetResolution 小于 640x480的主要内容,如果未能解决你的问题,请参考以下文章

为 CameraX ImageAnalysis 进行 YUV 到 RGB 的转换

如何使用 Android CameraX ImageAnalysis 提高帧速率?

如何在android studio中获取camera2 api中的每一帧,例如camera api中的PreviewCallback和camerax中的ImageAnalysis.Analyzer?

Android CameraX 分析图像流

Android CameraX 多个分析器

Camerax 图像分析:将图像转换为 bytearray 或 ByteBuffer