swift - 室内导航系统利用计算机视觉进行大面积测绘的解决方案是什么?

标签 swift unity3d computer-vision augmented-reality arkit

为了使用基于计算机视觉的室内导航,最初我们需要扫描区域并放置模型、对象和路径。保存 map ,我们可以稍后在打开应用程序时加载。问题是当要映射的区域很大时并且有多个楼层,用移动设备扫描该区域会很困难。

是否有另一种绘制大面积 map 的方法?如果有的话,是基于 3d map 的解决方案吗?问题是设备可以识别场景并放置模型和对象。如果我可以创建精确的 3d map 并将其集成统一,以便我可以将对象和模型统一放置并创建一个应用程序。因此,当我们打开应用程序时,设备会扫描并识别场景并将对象放置在那里,而不是进入场景并使用移动设备进行映射。

最佳答案

获取点云世界地图最稳健的方法是使用带有 ARKit 的 Apple 设备多次扫描整个区域,并将其作为世界地图数据保存到本地存储。

对于持久的 AR 体验,您可以保存扫描的世界地图:

func writeWorldMap(_ worldMap: ARWorldMap, to url: URL) throws {
    let data = try NSKeyedArchiver.archivedData(withRootObject: worldMap, 
                                         requiringSecureCoding: true)
    try data.write(to: url)
}

然后在需要时检索它:

func loadWorldMap(from url: URL) throws -> ARWorldMap {
    let mapData = try Data(contentsOf: url)
    guard let worldMap = try NSKeyedUnarchiver.unarchivedObject(ofClass: ARWorldMap.self, 
                                                                   from: mapData) else { 
        throw ARError(.invalidWorldMap) 
    }
    return worldMap
}

除此之外,您还必须使用打印/绘制的视觉内容(也就是基于图像为 CoreMLVision 框架预训练的 ML 模型)来检测用户在该世界地图中的确切位置(您可以为此目的使用交通标志,如下图所示)。

enter image description here

enter image description here

关于swift - 室内导航系统利用计算机视觉进行大面积测绘的解决方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52620416/

相关文章:

ios - withUnsafeMutablePointer 不编译

swift - 存储对 UIImage 的引用

json - 在 Swift 上转义 json 字符串

crash - Nextpeer.LaunchDashboard(); Nextpeer Unity游戏崩溃

ios - Unity - 为什么 iPhone 6 和 7 的触摸输入行为不同?

ios - 使用 performSegue 显示导航 Controller

unity3d - 在 Unity3d 场景中缩放所有 Assets 的方法

python - 使用OpenCV从图像中提取所选区域

c++ - 如何处理蒙版图像

tensorflow - 当 mAP 不稳定时,我应该什么时候停止对象检测模型训练?