【问题标题】:How to improve camera quality in ARKit如何在 ARKit 中提高相机质量
【发布时间】:2018-03-22 09:47:49
【问题描述】:

我正在构建一个 ARKit 应用程序,我们希望能够在其中拍摄场景照片。我发现 ARCamera 视图的图像质量不足以在 iPad Pro 上拍照。

标准相机图像:

ARCamera 图像:

我看到一个 Apple 论坛帖子提到这可能是 iPad Pro 10.5 特有的并且与固定镜头位置有关 (https://forums.developer.apple.com/message/262950#262950)。

是否有公开的方式来更改设置?

或者,我尝试使用 AVCaptureSession 拍摄普通照片并将其应用于sceneView.scene.background.contents 以在拍摄照片时切换出模糊图像以获得更高分辨率的图像,但无法让 AVCapturePhotoOutput 与 ARKit 一起使用

【问题讨论】:

  • 您找到解决方案了吗?我在使用 ARFaceTracking 会话的 iPhone X 上的 True-Depth 前置摄像头时遇到了同样的问题,我想从会话中取出高分辨率的静止图像。你能切换到正常的 AVCaptureSession 吗?切换之间的停顿是什么?真的很想知道这里的选项...

标签: swift ios11 arkit


【解决方案1】:

更新:恭喜提交feature requests的人!在 iOS 11.3(又名“ARKit 1.5”)中,您至少可以控制一些捕捉设置。您现在可以在默认启用自动对焦的情况下获得 1080p。

检查ARWorldTrackingConfiguration.supportedVideoFormats 以获取ARConfiguration.VideoFormat 对象的列表,每个对象都定义了分辨率和帧速率。列表中的第一个是当前设备支持的默认(也是最佳)选项,因此如果您只想要可用的最佳分辨率/帧速率,则无需执行任何操作。 (如果你想通过设置videoFormat 来降低性能,那么基于数组顺序而不是硬编码大小可能会更好。)

自动对焦在 iOS 11.3 中默认开启,因此您的示例图片(主题相对靠近相机)应该会更好。如果由于某种原因需要关闭它,there's a switch for that


仍然没有用于更改 ARKit 使用的底层捕获会话的相机设置的 API。

根据 WWDC 工程师的说法,ARKit 使用有限的相机捕捉功能子集来确保高帧速率,同时对 CPU 和 GPU 使用率的影响最小。制作更高质量的实时视频会产生一些处理开销,但使 ARKit 工作的计算机视觉和运动传感器集成系统也有一些处理开销——开销增加太多,你开始增加延迟。对于应该向用户展示他们世界的“实时”增强视图的技术,您不希望“增强”部分将相机运动滞后多个帧。 (此外,最重要的是,您可能需要一些 CPU/GPU 时间让您的应用程序在相机视图顶部呈现精美的 3D 内容。)

iPhone 和 iPad 设备的情况相同,但您会在 iPad 上发现更多,只是因为屏幕大得多 — 720p 视频在 4-5 英寸屏幕上看起来并没有那么糟糕,但看起来可怕的拉伸以填充 10-13 英寸的屏幕。 (幸运的是,iOS 11.3 默认为 1080p,应该会更好看。)

AVCapture 系统确实可以在视频捕获期间拍摄更高分辨率/更高质量的静态照片,但 ARKit 不会以任何方式公开其内部捕获会话,因此您不能将 AVCapturePhotoOutput 与它一起使用。 (在会话期间捕获高分辨率静止图像可能仍然是一个很好的feature request。)

【讨论】:

  • 谢谢瑞克斯特。我将提出功能请求,但仍会继续研究如何使用相机捕捉图像并切换场景背景
  • @EdwardFord 你找到解决这个问题的办法了吗?
  • 我还没有,但苹果刚刚宣布了一个改进了图像分辨率的新版本developer.apple.com/news/?id=01242018b
  • 对,你可以在iOS 11.3中设置视频的采集分辨率和帧率,在大多数设备上默认为1080p60,而不是720p。但是仍然没有办法获得高质量的静态照片。
  • 1080p 仍然不足以输出静止图像。我需要原始的 4:3 纵横比。现在前置摄像头已经是8MP了。 720p 和 1080p 是 4:3 尺寸的裁剪......烦人
【解决方案2】:
config.videoFormat = ARWorldTrackingConfiguration.supportedVideoFormats[1]

我不得不寻找一段时间如何设置配置,所以也许它会对某人有所帮助。

【讨论】:

  • 如果由于某种原因设备没有它会崩溃,这并不意味着它会按照您需要的顺序进行
【解决方案3】:

这可以让您选择分辨率最高的那个,您可以更改它以使其按大多数 fps 选择,等等...

    if let videoFormat = ARWorldTrackingConfiguration.supportedVideoFormats.sorted { ($0.imageResolution.width * $0.imageResolution.height) < ($1.imageResolution.width * $1.imageResolution.height) }.last{
        configuration.videoFormat = videoFormat
    }

【讨论】:

    猜你喜欢
    • 2011-09-14
    • 2021-05-31
    • 1970-01-01
    • 2019-04-16
    • 2018-08-26
    • 2011-09-28
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多