ARFoundation之路-3D物体识别之二

版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载。

  在获取到参考物体的空间特征信息Elephant.arobject文件后就可以将其做为参考物体进行真实环境3D物体的检测识别跟踪了。虽然3D物体检测识别跟踪在技术上与2D图像检测识别跟踪有非常大的差异,但在ARFoundation中,3D物体识别跟踪与2D图像识别跟踪操作几乎完全一致,这大大的方便了开发者的使用。

(一) 术语

  在ARFoundation中,3D物体跟踪系统依据参考物体库中的参考物体空间特征信息尝试在周围环境中检测匹配的3D物体并跟踪,与2D图像识别跟踪类似,3D物体识别跟踪也有一些特定的术语,如下表如示。

术语 描述
参考物体(Reference Object) 识别3D物体的过程也是一个特征值对比的过程,ARFoundation将从摄像头中获取的图像信息与参考物体库的参考物体空间特征点信息进行对比,存储在参考物体库中的用于对比的物体空间特征信息就叫做参考物体(物体空间特征信息并不是物体,也不能据此恢复出3D物体)。一旦对比成功,真实环境中的3D物体将与参考物体库的参考物体建立对应关系,每一个真实3D物体的姿态信息也一并被检测。
参考物体库(Reference Object Library) 参考物体库用来存储一系列的参考物体空间特征信息用于对比,每一个3D物体跟踪程序都必须有一个参考物体库,但需要注意的是,参考物体库中存储的实际是参考物体的空间特征值信息而不是原始3D物体网格信息,这有助于提高对比速度与鲁棒性。参考物体库越大,3D物体检测对比就会越慢,相比与2D图像检测识别,3D物体检测识别需要比对的数据更大、计算也更密集,因此,在同等条件下,参考物体库中的参考物体数量要比2D图像库中的参考图像数量少得多。
跟踪组件提供方(Provider) ARFoundation是架构在底层SDK3D物体跟踪API之上的,也即是说ARFoundation并不具体负责3D物体识别过程的算法,它只提供一个接口,具体3D物体识别由算法提供方提供。
AR物体锚点(ARObjectAnchor) 记录真实世界被检测识别的3D物体位置与姿态的锚点,该锚点由Session在检测识别到3D物体后自动添加到每一个被检测到的对象上。通过该锚点,可以将虚拟物体对象渲染到指定的空间位置上。

(二)AR Tracked Object Manager

  在ARFoundation中,3D物体属于可跟踪对象,由AR Tracked Object Manager组件进行统一管理,该组件通常挂载在AR Session Origin对象上,其有Reference Library和Tracked Object Prefab两个属性,如下图所示。

在这里插入图片描述
  AR Tracked Object Manager组件负责对3D物体的检测识别和跟踪,并可以在已检测到3D物体上渲染虚拟对象,该组件依据参考物体库中的参考物体空间特征信息不断尝试在环境中检测3D物体,因此,只有预制在参考物体库中的3D物体才有可能被检测到。

  Reference Library
  参考物体库,ARFoundation检测3D物体的依据,可以静态设置也可以在运行时添加,但AR Tracked Object Manager一开始跟踪3D物体,参考物体库就不能为null。

  Tracked Object Prefab
  在检测到3D物体后需要被实例化的预制体,在实例化时,ARFoundation会确保每一个实例化后的对象都有一个ARTrackedObject组件,可以在运行时通过代码获取到该实例化对象。

(三)3D物体识别跟踪基本操作

  在ARFoundation中,3D物体跟踪与2D图像跟踪操作基本一致,分成两步,第一步是建立一个参考物体库,第二步是在场景中挂载AR Tracked Object Manager组件,并将一个需要实例化的Prefab赋给其Tracked Object Prefab即可,下面我们来具体操作。

  按上述步骤,在Unity中新建一个工程,第一步建立一个参考物体库,首先在Project窗口中的ObjectLib文件夹下点击鼠标右键并依次选择Create->XR->Reference Object Library新建一个参考物体库,并命名为RefObjectLib,如下图所示。

在这里插入图片描述
  选择新建的RefObjectLib参考物体库,在Inspector窗口中,点击“Add Reference Object”添加参考物体,将上节中导出的Elephant.arobject文件拖入到工程中,并将其拖动到到Reference Object Assets框中,如下图所示。

在这里插入图片描述
  每一个参考物体还有一个Name属性,Name用于标识参考物体,这个名字在做3D物体检测对比时没有作用,但在比对匹配成功后我们可以通过参考物体名字获知是哪个参考物体,参考物体名字可以重复,因为在跟踪时,跟踪系统还会给每一个参考物体一个referenceObject.guid值,这个值是唯一值,可用于唯一标识一个参考物体。

扫描二维码关注公众号,回复: 9457718 查看本文章

  在完成上述工作之后,在Hierarchy窗口中选择AR Session Origin,并为其挂载AR Tracked Object Manager组件,将第一步制作的RefObjectLib参考物体库拖到Reference Library属性中,并设置相应的Prefab,如下图所示。

在这里插入图片描述

  最后需要说明的是,动态物体跟踪与底层SDK的算法有非常大的关系,不同的底层对参考物体的格式、处理方式都有不同的要求,对指定平台具体应用需要参阅该平台的SDK资料。ARFoundation目前只支持动态iOS平台对3D物体的检测识别跟踪。编译运行,效果如下图所示。

在这里插入图片描述

发布了89 篇原创文章 · 获赞 104 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/yolon3000/article/details/99574712
今日推荐