在AR Resource Group中保存ARKit屏幕截图

时间:2018-05-08 14:47:18

标签: swift arkit

我试图在运行时将UIImage保存到AR资源组中,以便在之后检测它。您可以使用referenceImagesInGroupNamed:bundle读取此组:但没有关于如何编写它的说明。

我正在尝试以下方法:

//step 1: list all reference images
print("BEFORE = ", ARReferenceImage.referenceImages(inGroupNamed: "AR Resources", bundle: nil) ?? "None")

//step 2: take snapshot
let snapshot = self.viewController?.sceneView.snapshot()
//optional crops and image processing here

//step 3: add shapshot to bundle
let referenceImage = ARReferenceImage(snapshot.cgImage, orientation: CGImagePropertyOrientation.up, physicalWidth: someComputedPhysicalWidth)
// ??

//step 4: list all reference images and ensure new one is added
print("AFTER = ", ARReferenceImage.referenceImages(inGroupNamed: "AR Resources", bundle: nil) ?? "None")

//step 5: relaunch session if intempted to redirect it now
sceneView.session.pause()
configuration.detectionImages = ARReferenceImage.referenceImages(inGroupNamed: "AR Resources", bundle: nil)!
sceneView.session.run(configuration, options: [.resetTracking, .removeExistingAnchors])

关闭应用后,会保存组中存储的内容吗?我可以删除其中的内容吗?如果写访问是不可能的,我想我可以在某处保存创建的referenceImage参数并在需要时重建referenceImage?

1 个答案:

答案 0 :(得分:1)

您无法在运行时修改默认文件夹的内容,但您可以动态创建图像并稍后访问它们。

要动态创建图像,您可以使用以下方法:

enter image description here

为了保持并发性,例如访问任何已保存的snapShots,您需要将它们保存到设备中,然后再访问它们。

这是一个基本实现,您可以在其中拍摄ARSCNView的快照,然后动态加载它们。

此处的问题(您需要修复)是确定需要以米为单位提供的physicalSize的{​​{1}}:

ARReferenceImages

此示例从实际角度和快速模型中工作正常,但正如我所说,您需要了解如何正确确定动态创建的参考图像的大小等:

希望它有所帮助...