3D物体识别案例详解—VR及AR开发高级教程(7)

发表于:2017-3-27 11:10

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:吴亚峰、刘亚志、于复    来源:51Testing软件测试网原创

#
AR
#
Unity
#
VR
分享:
  3.11 3D物体识别案例详解
  前面大多数案例都是基于图片实现的,但是在现实生活中存在许多3D物体,有时开发人员需要通过扫描这些3D物体来实现部分功能。通过官方提供的App再加上适宜的扫描环境就可以实现该功能,下面笔者将详细讲解该功能。
  3.11.1 运行效果
  在下载的官方案例中并没有给定合适的案例,所以笔者开发了一个案例用来讲解其实现的具体过程。在前面章节中笔者详细介绍了扫描3D物体App的下载以及具体的扫描过程(有需要的读者参考前面章节的内容),开发完成后的案例效果如图3-123所示。
  
  3.11.2 开发流程
  扫描3D物体是一项十分高端的技术,Vuforia SDK为开发人员已经封装的较为简单。笔者只需要进行简单操作与修改即可实现。读者可以发现在鼠标光标的上方存在着一个圆球,该圆球与鼠标光标的距离是在项目中设置好的。案例的开发步骤如下。
  (1)打开官方提供的ObjectRecognition案例,会发现在ObjectTarget游戏中的Object Target Behaviour游戏组件有一行提示,如图3-124所示。所以笔者只能利用开发的例子为读者讲解该部分内容。依然以鼠标为例,按照笔者讲解的相关步骤对其进行扫描,结果如图3-125所示。
  
  (2)扫描完成后可以将该数据分享到计算机,打开Vuforia官网,进入Target Manager界面添加数据包。选择3D Object类型在File一栏选择导入的扫描文件,单击Add按钮将其上传至官网,如图3-126所示。稍等一段时间将扫描数据上传完成。
  (3)刷新浏览器界面,使其上传数据包的状态变为Active即可,如图3-127所示,在该界面选中鼠标数据包,单击Download Database按钮选择Unity Editor进行下载。下载完成后将unitypackage文件数据包导入进Unity 3D游戏开发引擎。
  (4)打开Unity3D游戏开发引擎,将Vuforia SDK导入Unity。删除场景中自带的Camera,将Prefabs文件夹中的ARCamera预制件拖曳进场景中。登录Vuforia官方,获取License Key,将其复制到ARCamera游戏对象Vuforia Behavior组件下的Key位置。
 
  (5)在官方案例中存在有UGUI搭建的界面,用来提示数据包丢失或者是提示开发人员扫描物体并且下载数据包,如图3-128所示。有兴趣的读者可以参考Unity的相关书籍,笔者在这里不在赘述。有一相关脚本专门用来控制该界面的显示,具体代码如下。
  代码位置:见官方案例ImageTargets-5- 5-9.unitypackage下的Assets/Scripts/ TextEvent Handler.cs
1     ......//此处省略了一些导入相关类的代码,读者可自行查阅官方案例中的源代码
2     public class DatabaseCheck : MonoBehaviour {
3       void Start(){                     //重写Start方法,注册Vuforia完全启动时的方法
4         VuforiaBehaviour.Instance.RegisterVuforiaStartedCallback(FindDatasets);
5       }
6       public void CloseErrorDialog() {               //关闭错误提示方法
7         Canvas errorCanvas = GetComponentsInChildren<Canvas>(true)[0];
8         if(errorCanvas) {                            //找到其下带有画布的子对象
9           errorCanvas.enabled = false;               //将错误提示画布标志为不可用
10          errorCanvas.gameObject.SetActive(false);   //并且标为不可见
11          errorCanvas.transform.parent.position = 2 * Vector3.right * Screen.width;
//设置其父对象的位置
12      }}
13      private void FindDatasets() {           //定义Vuforia启动后回调的方法
14        ObjectTracker tracker = TrackerManager.Instance.GetTracker<ObjectTracker>();
15        if (tracker == null) {                //找到场景中ObjectTracker组件
16          ShowError();                        //当没有发现该组件时调用错误提示方法
17        }else{
18          IEnumerable<DataSet> datasets = tracker.GetDataSets();
//搜寻项目中的Database数据
19          if(datasets.Count() == 0) {
20            ShowError();                      //若未发现项目中有Databse,则展示提示方法
21      }}}
22      private void ShowError() {              //定义错误提示方法
23        Canvas errorCanvas = GetComponentsInChildren<Canvas>(true)[0];
24        if(errorCanvas){                                  //找到带有画布组建的游戏对象
25          errorCanvas.enabled = true;                     //将错误提示画布标志为可用
26          errorCanvas.gameObject.SetActive(true);         //并且标为不可见
27          errorCanvas.transform.parent.position = Vector3.zero;  //设置其父对象的位置
28    }}}
  第1-5行重写Start方法,并且注册Vuforia完全启动时的回调方法。
  第6-12行定义关闭错误提示界面的方法,找到其下带有画布的子对象,将其标志为不可用的同时也标志为不可见。
  第13-21行定义了Vuforia完全启动时的回调方法,若没有带有ObjectTracker组件的对象,则弹出错误提示按钮。否则直接搜寻项目中的Database,若没有数据则直接弹出错误提示。
  第22-28行定义错误提示的方法,找到带有画布组件的游戏对象将其置为不可用与不可见。
  (6)unitypackage文件导入完成后,ObjectTarget游戏对象中的Object Target Behaviour组件就会出现选择数据包的选项。选择下载的shubiao_OT文件以及目标图片,如图3-129所示。将ObjectTarget游戏对象下的Cube删除。
  
  (7)选中ObjectTarget游戏对象,在场景中会出现一个立方体框架,如图3-130所示。开发人员只要将模型放置在该框架的上方,并且使其变为ObjectTarget的子对象。笔者添加了一个普通的圆球,如图3-131所示。
  
  (8)3D模型添加完成后,在ARCmaera游戏对象中的Database Load Behaviour脚本中选择加载的数据包并将其激活,如图3-132所示。在扫描时设备可以会在移动过程中发生抖动,所以笔者开启了扩展追踪,选中ObjectTarget,勾选该选项即可,如图3-133所示,设置完成后,运行即可。
 
  3.12   本章小结
  本章详细讲解了Vuforia的几项核心功能,学习完本章后,读者能够对Vuforia的相关功能有一个更深层的了解,包括扫描图片、圆柱体识别、多目标识别、文字识别、云识别、物体识别等,使得读者在开发过程中可以灵活地应用该方面的知识。
  3.13   习题
  1.试列举ARCamera的详细参数并进行解释。
  2.试述SDK中TurnOffBehaviour脚本的具体功能。
  3.根据选择被扫描图片的规则选取图片,模仿3.2节的案例自行制作图片的扫片项目。
  4.试操作执行3.4节多目标识别案例。
本文选自《VR及AR开发高级教程—基于Unity》第三章,本站经人民邮电出版社和作者的授权。
版权声明:51Testing软件测试网获清华大学出版社和作者授权连载本书部分章节。任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
Vuforia核心功能官方案例详解—VR及AR开发高级教程(6)
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号