上一篇基于卡片地图,已经做到了基于某一张卡片,不需要用户手动初始化地图即可直接进入slam的跟踪状态,从用户体验来说避免了初始化地图阶段的卡顿和地图初始化成功的不确定性。周末在上一篇的基础上,继续添加了多目标:
-
首先使用摄像头移动到卡片1所在位置,基于上一篇结果,此时地图直接进入跟踪状态,并且地图随着地图移动向外不断扩展。如下图。
-
接着,当移动到卡片2所在位置时,基于图像识别,识别卡片2,并且在卡片2的位置绘制虚拟物体导入slam坐标系。此时slam地图中出现了两个虚拟物体。如下图:
-
和上面一样,当地图扩展到卡片3的位置,基于图像识别,识别卡片3,并且在卡片3的位置也绘制虚拟物体到slam坐标系
最终分别使用三个不同的卡片,在slam中添加了三个虚拟人物(物体)。可以发现最终的FPS和绘制单个虚拟人物其实是差不多的。因为图像的识别以及虚拟人物的绘制本身并不占用太多时间。
实现的原理本身也非常简单,第一个卡片实现slam的地图初始化和跟踪,上一篇文章讲到了。在跟踪的过程中,同时进行目标检测,检测到其他两个目标的话,就在目标的位置绘制虚拟人物加入到slam坐标系,两个目标都检测到之后彻底去掉目标检测部分。当然在此基础上再增加第四个第五个虚拟人物也是一样的道理。
目前到此为止本系列文章主要改善了这些点:
-
基于orbslam标准代码做了MacOSX移植和iOS移植。
-
优化了iOS词典加载速度(代码来自github fork的修改)
-
基于预先卡片地图,用户可以不需要地图初始化直接进入slam跟踪,提高了用户体验。
-
基于目标探测和跟踪,实现了在slam地图中基于不同卡片加入不同的虚拟物体。
此方案如果继续优化,还可以从以下点入手: