Swift 如何提高ARKit中的相机质量

Swift 如何提高ARKit中的相机质量,swift,ios11,arkit,Swift,Ios11,Arkit,我正在构建一个ARKit应用程序,我们希望能够在其中拍摄场景照片。我发现ARCamera view的图像质量不足以在iPad Pro上拍照 标准摄像机图像: ARCamera图像: 我看过一篇苹果论坛的帖子,其中提到这可能是iPad Pro 10.5特有的,与固定镜头位置有关() 是否有公开的方法更改设置 或者,我尝试使用AVCaptureSession拍摄一张普通照片,并将其应用于sceneView.scene.background.contents,在拍摄照片时切换模糊图像以获得更高分辨

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

标准摄像机图像:

ARCamera图像:

我看过一篇苹果论坛的帖子,其中提到这可能是iPad Pro 10.5特有的,与固定镜头位置有关()

是否有公开的方法更改设置


或者,我尝试使用AVCaptureSession拍摄一张普通照片,并将其应用于
sceneView.scene.background.contents
,在拍摄照片时切换模糊图像以获得更高分辨率的图像,但无法使AVCapturePhotoOutput与ARKit一起工作更新:祝贺提交该照片的人!在iOS 11.3(又名“ARKit 1.5”)中,您可以控制至少一些捕获设置。现在,您可以使用默认启用的自动对焦功能获得1080p

检查
ARConfiguration.VideoFormat
对象列表,每个对象定义分辨率和帧速率。列表中的第一个选项是当前设备上支持的默认(和最佳)选项,因此,如果您只想获得最佳分辨率/帧速率,则无需执行任何操作。(如果您想通过设置来降低性能,那么最好根据数组顺序而不是硬编码大小进行设置。)

在iOS 11.3中,默认情况下自动对焦处于启用状态,因此您的示例图片(拍摄对象相对靠近相机)的效果应该会更好。如果出于某种原因需要关闭它


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

据WWDC的工程师说,ARKit使用有限的摄像机捕获功能子集,以确保高帧速率,同时对CPU和GPU的使用影响最小。制作更高质量的实时视频会有一些处理开销,但使ARKit正常工作的计算机视觉和运动传感器集成系统也会有一些处理开销-这会增加太多的开销,并且会增加延迟。对于一种应该向用户展示其世界的“实时”增强视图的技术,您不希望“增强”部分将相机运动延迟多帧。(此外,除此之外,您可能还需要一些CPU/GPU时间,以便您的应用程序在摄像头视图上呈现漂亮的3D内容。)

iPhone和iPad设备之间的情况是一样的,但你在iPad上注意到的更多,只是因为屏幕大得多——720p视频在4-5英寸的屏幕上看起来没那么糟糕,但在10-13英寸的屏幕上,它看起来太长了。(幸运的是,在iOS 11.3中,默认情况下您可以获得1080p,看起来应该更好。)

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


我不得不花了一段时间研究如何设置配置,所以它可能会对某些人有所帮助

谢谢你,瑞克斯特。我会提交一个功能请求,但仍在考虑如何使用相机捕捉图像并切换场景background@EdwardFord你找到解决这个问题的方法了吗?我还没有,但苹果刚刚发布了一个新版本,对图像分辨率进行了改进,您可以在iOS 11.3中设置视频捕获分辨率和帧速率,在大多数设备上默认为1080p60,而不是720p。但是仍然没有办法获得高质量的静态照片。1080p对于静态图像输出来说仍然不够好。我需要原始的4:3纵横比。现在前置摄像头已经是8MP了。720p和1080p是4:3大小的作物。。。你找到解决办法了吗?我在使用ARFaceTracking会话的iPhone X上的真深度前置摄像头时也遇到了同样的问题,我想从会话中获取一张高分辨率的静态图像。您是否能够切换到正常的AVCaptureSession?开关之间的停顿是什么?真的想知道这里的选项…如果由于某种原因设备没有它,它将崩溃,也不意味着它将在您需要的顺序
config.videoFormat = ARWorldTrackingConfiguration.supportedVideoFormats[1]