使用ArCore时是否可以捕获高分辨率图像?

时间:2019-12-05 08:17:01

标签: android arcore android-camera2

在我的应用中,我试图在自定义相机视图中将ArCore用作“相机助手”。

要清楚-我想在用户的相机中显示该用户的图像,并让他捕获包含AR模型的图像。

据我了解,为了使用ArCore捕获图像,我必须使用Camera2 API,该API是通过将会话配置为使用“共享相机”而启用的。

但是,我似乎无法将相机配置为使用任何高端分辨率(我使用的是像素3,因此我应该能够将像素提高到12MP)。

在“共享相机示例”中,它们在Camera2和ArCore之间切换(可惜没有CameraX的API),并且它有几个问题:

  1. 在ArCore模式下,图像模糊(我认为这是因为深度传感器已按照其文档中的说明被禁用)
  2. 在Camera2模式下,我根本无法提高分辨率。
  3. 显示来自ArCore的模型时,我无法使用Camera2 API捕获图像。

此要求目前是否可能?

1 个答案:

答案 0 :(得分:0)

我还没有使用ARCore的共享摄像头,但是关于您问题的要点我可以说几句。

在ARCore中,您可以配置CPU图像大小和GPU图像大小。您可以通过选中所有available camera configurations(可通过Session.getSupportedCameraConfigs(CameraConfigFilter cameraConfigFilter)使用),然后将其传递回ARCore会话来选择您喜欢的一个。在每个CameraConfig上,您可以检查将获得的CPU图像大小和GPU纹理大小。

可能您当前正在使用(可能是默认设置?)具有最低CPU图像的CameraConfig,如果我没有记错的话,则为640x480像素,因此,是的,渲染时肯定看起来很模糊(但与深度传感器无关)。

听起来像您可以选择一个更高的CPU映像,您就可以了...但是不幸的是,并非如此,因为该配置适用于每帧。获取更高分辨率的CPU映像将导致性能大大降低。当我对此进行测试时,我在测试设备上每秒获得大约3-4帧的帧,绝对不理想。

那现在呢?我认为您有2个选择:

  1. 暂停ARCore会话,切换到较高的CPU图像一帧,获取图像,然后切换回“正常”配置。
  2. 可能您已经获得了不错的GPU图像,也许不是由于Camera Preview而获得的最好图像,但是希望足够好吗?不确定如何渲染,但是您可以使用一些OpenGL技能来复制该纹理。当然,由于整个 GL_TEXTURE_EXTERNAL_OES 问题,不是直接的,而是将其渲染到另一个帧缓冲区中,然后读取附加到它的纹理可能有效。当然,您可能需要自己处理纹理坐标(完整图像与可见区域),但这是另一个主题。

关于CameraX,请注意,它包装了Camera2 API以提供一些相机用例,从而使应用程序开发人员不必担心相机的生命周期。据我了解,ARCore不适合使用CameraX,因为我认为他们需要完全控制相机。

我希望能有所帮助!