Vuforia开发完全指南(四)--- Image Target
Vuforia开发完全指南---Image Target,简单方便的AR图像识别
概述
在Vuforia提供的SDK中,最简单、也是最常见的AR功能就是Image Target---图像识别。你只需提供一张可识别的图片,将图片移到设备的摄像头下,设备上就能出现之前已经集成进去的虚拟场景,而且可以根据ARCamera的不同模式,让图片和虚拟场景的叠加现象有所不同。这篇文章详细讲解了Vuforia中基于Image Target的AR产品开发流程,学完之后你就能开发出一个基于图片的AR App。
演示Demo
这是笔者做的一个简单的冰与火之歌的AR Demo,基于Vuforia Image Target。
点击观看
视频地址:https://v.qq.com/x/page/k0557z1x02n.html
准备工作
工欲善其事,必先利其器。首先我们要做的是准备好工具,这里采用Unity作为开发工具,演示在iOS设备上,因此还需要Mac系统和Xcode。进行开发的第一步就是要下载Vuforia的SDK,登上Vuforia官网进入开发者平台下载Unity的SDK包,完成之后将package导入到Unity中。然后就要登录License Manager和Target Manager创建App的license,以及上传需要扫描的图片。关于License Manager和Target Manager,已经在之前的教程中详细讲过了,可以参考一下。
Vuforia开发完全指南(三)---License Manager和Target Manager详解
首先是在License Manager中创建license key,然后进入Target Manger创建Database,上传需要扫描的图片。这里在点击Add Target之后选择的类型是Device,然后输入相关参数。上传成功后就可以下载图片SDK,导入到Unity中。
功能开发
- 打开Unity工程,在Project面板中找到Vuforia文件夹,将其Prefabs文件夹中的ARCamera拖到Unity场景中,之后删掉场景中之前默认的Camera。
- 将Prefabs文件夹中的ImageTarget拖到场景中,这个是Vuforia用来专门进行图像识别的工具。

- 点击场景中的ARCamera,在其选项面板中点击“Open Vuforia configuration”,将之前创建的license key复制到“App License Key”输入框中。然后在下面的Datasets中,勾选住之前创建的database以及其“Activate”选项,将database激活。
- 点击场景中的ImageTarget,在其选项面板的“Image Target Behaviour”组件中,在Database和Image Target选中对应的名字。
- 将想要展现的3D模型拖入到场景中,并将其作为ImageTarget的子物体。这样,已经完成了最简单的AR图像识别,如果你现在编译工程在设备上运行,将识别图放到摄像头取景范围内,模型就能出来了,并随着识别图的位置改变而改变。但是如果想要加入更多的交互功能,就要用代码来控制。
- 点击场景中的ImageTarget,在其属性面板中可以看到已经挂了一个脚本“Default Trackable Event Handler”,在这个脚本里我们就能对AR场景中的物体进行控制,当图片被成功识别时做什么,当图片消失时又会做什么。

在这个脚本中需要关注两个函数:OnTrackingFound()和OnTrackingLost()函数。其中OnTrackingFound会在图片被识别后调用,OnTrackingLost会在被识别的图片从摄像头取景范围内消失后调用。这两个函数的定义如下:
private void OnTrackingFound()
{
Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);
// Enable rendering:
foreach (Renderer component in rendererComponents)
{
component.enabled = true;
}
// Enable colliders:
foreach (Collider component in colliderComponents)
{
component.enabled = true;
}
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found");
}
private void OnTrackingLost()
{
Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);
// Disable rendering:
foreach (Renderer component in rendererComponents)
{
component.enabled = false;
}
// Disable colliders:
foreach (Collider component in colliderComponents)
{
component.enabled = false;
}
Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");
}
这两个函数的最后都有一行Debug.Log的打印,里面有mTrackableBehaviour.TrackableName这个变量。这个变量就是之前在Target Manager中上传图片后,导入到图片SDK的图片名字。还记得在上传图片时需要输入的那个名字字符串么?mTrackableBehaviour.TrackableName这个变量就和那个名字字符串是一样的,因此我们可以在代码中利用这个变量来判断是哪张图片被识别,继而控制场景中的物体。
在这个例子中,笔者在场景中加了一个红龙Dragon的模型,还加了一个附带几个按钮的Canvas,用来控制这个红龙的动作。在Default Trackable Event Handler脚本中,将Dragon和Canvas声明为public变量,
public GameObject dragon;
public GameObject canvas;
将场景中的Dragon和Canvas拖入到脚本中的物体框。然后在OnTrackingFound()函数中添加当图像被识
别后,对Dragon和Canvas的控制代码,这里只是简单的让两者出现,注意这里对图片的名字进行了判断,虽说工程中只有这一张图片,但是当需要识别多张图片时,就必须通过ImageTarget中的图像名称来判断识别出的是哪张图片。
if (mTrackableBehaviour.TrackableName == "Dragon")
{
dragon.SetActive(true);
canvas.SetActive(true);
}
同样,在OnTrackingLost()函数中通过对mTrackableBehaviour.TrackableName的判断,来让Dragon和Canvas消失。
if (mTrackableBehaviour.TrackableName == "Dragon")
{
dragon.SetActive(false);
canvas.SetActive(false);
}
Canvas中对Dragon控制的按钮脚本代码就不贴出来了,大家可以通过自己的需求加上很多酷炫和实用的功能。
当代码检查无误后,就能编译工程,拷进设备进行AR体验了。大家可以看到使用Vuforia的Image Target功能,无需很复杂的代码就能做出非常酷炫的AR程序。
Vuforia开发完全指南(四)--- Image Target的更多相关文章
- Vuforia开发完全指南---Vuforia概述
Vuforia概述 AR(Augmented Reality)增强现实,想必大家都已经很熟悉了.这是当下最热的技术之一,是利用计算机视觉和计算机图像学领域的相关知识将虚拟世界融入到现实生活当中.AR和 ...
- Vuforia开发完全指南---License Manager和Target Manager详解
License Manager和Target Manager License Manager 对于每一个用Vuforia开发的AR程序来说,都有一个唯一的license key,在Unity中必须首先 ...
- Vuforia开发完全指南---不懂编程也能做AR程序
不懂编程也能做AR程序 可能一听到要做AR程序,很多人都会想到这是程序员的事.如果不懂编程,不会写代码,是做不了AR程序的.其实,Vuforia的Unity SDK非常人性化,即使你不会编程,也能做出 ...
- 【文章内容来自《Android 应用程序开发权威指南》(第四版)】如何设计兼容的用户界面的一些建议(有删改)
最近一直在看的一本书是<Android 应用程序开发权威指南>(第四版),十分推荐.书中讲到了一些用户界面设计的规范,对于初学者我认为十分有必要,在这里码给大家,希望对我们都有用. 在我们 ...
- C#微信公众号开发系列教程四(接收普通消息)
微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...
- 微信公众账号开发教程(四)自定义菜单(含实例源码)——转自http://www.cnblogs.com/yank/p/3418194.html
微信公众账号开发教程(四)自定义菜单 请尊重作者版权,如需转载,请标明出处. 应大家强烈要求,将自定义菜单功能课程提前. 一.概述: 如果只有输入框,可能太简单,感觉像命令行.自定义菜单,给我们提供了 ...
- Chrome 开发工具指南
Chrome 开发工具指南 谷歌 Chrome 开发工具,是基于谷歌浏览器内含的一套网页制作和调试工具.开发者工具允许网页开发者深入浏览器和网页应用程序的内部.该工具可以有效地追踪布局问题,设置 Ja ...
- OpenGL ES应用开发实践指南:iOS卷
<OpenGL ES应用开发实践指南:iOS卷> 基本信息 原书名:Learning OpenGL ES for iOS:A Hands-On Guide to Modern 3D Gra ...
- Visual C++2010开发权威指南 中文高清PDF - VC.NET
第一部分 Visual C++ 2010开发与新特性第1章 Visual C++ 2010开发环境简介 11.1 Visual C++ 2010简介 11.2 Visual C++ 2010下 ...
随机推荐
- javascript基础进阶——执行环境及作用域链
概念 执行环境 执行环境定义了变量或函数有权访问的其他函数,决定了他们各自的行为.每个执行环境都有一个与之关联的变量对象. 变量对象 环境中定义的所有变量和函数都保存在这个对象中. 全局执行环境 全局 ...
- jvm系列 (四) ---强、软、弱、虚引用
java引用 目录 jvm系列(一):jvm内存区域与溢出 jvm系列(二):垃圾收集器与内存分配策略 jvm系列(三):锁的优化 我的博客目录 为什么将引用分为不同的强度 因为我们需要实现这样一种情 ...
- python利用urllib实现的爬取京东网站商品图片的爬虫
本例程使用urlib实现的,基于python2.7版本,采用beautifulsoup进行网页分析,没有第三方库的应该安装上之后才能运行,我用的IDE是pycharm,闲话少说,直接上代码! # -* ...
- RobotFramework自动化测试框架-移动手机自动化测试Input Text和Click Button关键字的使用
Input Text和Click Button Input Text 关键字一般用来给输入框进行输入操作,该关键字接收两个参数[ locator | text ]. 示例1:启动安卓手机上一个APP的 ...
- 【2017集美大学1412软工实践_助教博客】团队作业7——Alpha冲刺之事后诸葛亮
题目 团队作业7: http://www.cnblogs.com/happyzm/p/6827853.html 团队成绩 评分项目 变更管理 设计/实现 测试/发布 团队的角色,管理,合作 总结 全组 ...
- 团队作业4——第一次项目冲刺(Alpha版本)4.22
团队作业4--第一次项目冲刺(Alpha版本) Day one: 会议照片 由于团队中的组员今天不在学校,所以我们的站立会议提前一天展开. 项目进展 由于今天是Alpha版本项目冲刺的第一天,所以没有 ...
- 201521123038 《Java程序设计》 第六周学习总结
201521123038 <Java程序设计> 第六周学习总结 1. 本周学习总结 2. 书面作业 1.clone方法 1.1 Object对象中的 clone 方法是被protected ...
- 201521123065 《Java程序设计》第4周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容 类设计:属性设计类型为priate并初始化. 文档注释:以/*开始,以*/结束. 继承:存在的 ...
- 201521123051 《Java程序设计》 第二周学习总结
1. 本周学习总结 1.学会使用码云:学会如何将项目同步到码云中以及从码云上的项目保存到本地. 2.各数据类型的使用. 3.运算符和表达式的使用. 4.string创建之后不可在修改. 5.Java程 ...
- 201521123113《Java程序设计》第10周学习总结
1. 本周学习总结 2. 书面作业 本次PTA作业题集异常.多线程 Q1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中finally中捕获异常需要注意什么? fi ...