在我的应用程序中,我尝试在自定义相机视图中使用 ArCore 作为“相机助手”。
需要明确的是 - 我想在用户的相机中显示图像并让他捕获以下图像don't包含 AR 模型。
据我了解,为了使用 ArCore 捕获图像,我必须使用 Camera2 API,该 API 通过将会话配置为使用“共享相机”来启用。
但是,我似乎无法将相机配置为使用任何高端分辨率(我使用的是 Pixel 3,所以我应该能够高达 12MP)。
在“共享相机示例”中,它们在 Camera2 和 ArCore 之间切换(可惜没有适用于 CameraX 的 API),并且存在几个问题:
- 在 ArCore 模式下,图像模糊(我认为这是因为深度传感器被禁用,如其文档中所述)
- 在Camera2模式下我根本无法提高分辨率。
- 在显示 ArCore 模型时,我无法使用 Camera2 API 捕获图像。
目前这个要求是否可行?
我还没有使用 ARCore 共享相机,但我可以就你问题的要点说几句话。
在 ARCore 中,您可以配置 CPU 图像大小和 GPU 图像大小。您可以通过检查所有来做到这一点可用的相机配置 https://developers.google.com/ar/reference/java/com/google/ar/core/Session#getSupportedCameraConfigs(com.google.ar.core.CameraConfigFilter)(可通过Session.getSupportedCameraConfigs(CameraConfigFilter cameraConfigFilter)
)并通过将其传回 ARCore 会话来选择您喜欢的一个。在各个相机配置 https://developers.google.com/ar/reference/java/com/google/ar/core/CameraConfig您可以检查您将获得哪个 CPU 图像大小和 GPU 纹理大小。
可能您当前正在使用(也许默认情况下?)具有最低 CPU 图像的 CameraConfig,如果我没记错的话,为 640x480 像素,所以是的,渲染时它看起来肯定很模糊(但在这方面与深度传感器无关)。
听起来您可以选择更高的 CPU 映像,然后就可以了...但不幸的是,情况并非如此,因为该配置适用于每一帧。获取更高分辨率的 CPU 图像将导致性能大幅降低。当我对此进行测试时,我的测试设备每秒大约有 3-4 帧,绝对不理想。
那么现在怎么办?我认为你有两个选择:
- 暂停 ARCore 会话,切换到更高的 CPU 图像 1 帧,获取图像并切换回“正常”配置。
- 也许您已经获得了不错的 GPU 图像,由于相机预览的原因可能不是最好的,但希望足够好?不确定如何渲染它,但通过一些 OpenGL 技能,您可以复制该纹理。当然不是直接的,因为整个GL_TEXTURE_EXTERNAL_OES东西...但是将其渲染到另一个帧缓冲区上,然后读取附加到它的纹理可以工作。当然,您可能需要自己处理纹理坐标(完整图像与可见区域),但这是另一个主题。
关于CameraX,请注意,它包装了Camera2 API,以便提供一些相机用例,以便应用程序开发人员不必担心相机生命周期。据我了解,ARCore 不适合使用 CameraX,因为我认为他们需要完全控制相机。
我希望这有一点帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)