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

Android 使用ArCore时是否可以捕获高分辨率图像?,android,arcore,android-camera2,Android,Arcore,Android Camera2,在我的应用程序中,我试图使用ArCore作为自定义相机视图中的“相机助手” 为了清楚起见,我想在他的相机中为用户显示图像,并让他拍摄不包含AR模型的图像 据我所知,为了使用ArCore拍摄图像,我必须使用Camera2 API,该API通过将会话配置为使用“共享相机”来启用 但是,我似乎无法将相机配置为使用任何高端分辨率(我使用的是像素3,所以应该可以高达12MP) 在“共享相机示例”中,它们在Camera2和ArCore之间切换(遗憾的是CameraX没有API),它有几个问题: 在ArCor

在我的应用程序中,我试图使用ArCore作为自定义相机视图中的“相机助手”

为了清楚起见,我想在他的相机中为用户显示图像,并让他拍摄不包含AR模型的图像

据我所知,为了使用ArCore拍摄图像,我必须使用Camera2 API,该API通过将会话配置为使用“共享相机”来启用

但是,我似乎无法将相机配置为使用任何高端分辨率(我使用的是像素3,所以应该可以高达12MP)

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

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

  • 这一要求目前是否可行?

    我还没有与ARCore合作使用共享摄像头,但我可以就您问题的要点说几句话

    在ARCore中,您可以配置CPU映像大小和GPU映像大小。您可以通过选中全部(可通过
    会话.getSupportedCameraConfig(CameraConfigFilter CameraConfigFilter)
    )并通过将其传递回ARCore会话来选择首选项来完成此操作。在每个屏幕上,您可以检查将获得的CPU图像大小和GPU纹理大小

    如果我没记错的话,可能您当前正在使用(默认情况下可能是?)CPU图像最低的CameraConfig,640x480像素,所以是的,渲染时它看起来确实很模糊(但这与深度传感器无关)

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

    那现在怎么办?我想你有两个选择:

  • 暂停ARCore会话,切换到更高的CPU映像1帧,获取映像并切换回“正常”配置
  • 也许你已经得到了一个很好的GPU图像,也许不是最好的由于相机预览,但希望足够好?不确定如何渲染它,但使用一些OpenGL技能可以复制该纹理。当然不是直接的,因为整个GL\u纹理\u外部\u OES东西。。。但将其渲染到另一个帧缓冲区,然后读取附加到它的纹理可能会起作用。当然,您可能需要自己处理纹理坐标(完整图像与可见区域),但这是另一个主题
  • 关于CameraX,请注意它正在包装Camera2API,以便提供一些相机用例,这样应用程序开发人员就不必担心相机的生命周期。据我所知,ARCore不适合使用CameraX,因为我认为他们需要完全控制摄像头

    我希望这有点帮助