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中。

功能开发

  1. 打开Unity工程,在Project面板中找到Vuforia文件夹,将其Prefabs文件夹中的ARCamera拖到Unity场景中,之后删掉场景中之前默认的Camera。
  2. 将Prefabs文件夹中的ImageTarget拖到场景中,这个是Vuforia用来专门进行图像识别的工具。

  3. 点击场景中的ARCamera,在其选项面板中点击“Open Vuforia configuration”,将之前创建的license key复制到“App License Key”输入框中。然后在下面的Datasets中,勾选住之前创建的database以及其“Activate”选项,将database激活。
  4. 点击场景中的ImageTarget,在其选项面板的“Image Target Behaviour”组件中,在Database和Image Target选中对应的名字。
  5. 将想要展现的3D模型拖入到场景中,并将其作为ImageTarget的子物体。这样,已经完成了最简单的AR图像识别,如果你现在编译工程在设备上运行,将识别图放到摄像头取景范围内,模型就能出来了,并随着识别图的位置改变而改变。但是如果想要加入更多的交互功能,就要用代码来控制。
  6. 点击场景中的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的更多相关文章

  1. Vuforia开发完全指南---Vuforia概述

    Vuforia概述 AR(Augmented Reality)增强现实,想必大家都已经很熟悉了.这是当下最热的技术之一,是利用计算机视觉和计算机图像学领域的相关知识将虚拟世界融入到现实生活当中.AR和 ...

  2. Vuforia开发完全指南---License Manager和Target Manager详解

    License Manager和Target Manager License Manager 对于每一个用Vuforia开发的AR程序来说,都有一个唯一的license key,在Unity中必须首先 ...

  3. Vuforia开发完全指南---不懂编程也能做AR程序

    不懂编程也能做AR程序 可能一听到要做AR程序,很多人都会想到这是程序员的事.如果不懂编程,不会写代码,是做不了AR程序的.其实,Vuforia的Unity SDK非常人性化,即使你不会编程,也能做出 ...

  4. 【文章内容来自《Android 应用程序开发权威指南》(第四版)】如何设计兼容的用户界面的一些建议(有删改)

    最近一直在看的一本书是<Android 应用程序开发权威指南>(第四版),十分推荐.书中讲到了一些用户界面设计的规范,对于初学者我认为十分有必要,在这里码给大家,希望对我们都有用. 在我们 ...

  5. C#微信公众号开发系列教程四(接收普通消息)

    微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...

  6. 微信公众账号开发教程(四)自定义菜单(含实例源码)——转自http://www.cnblogs.com/yank/p/3418194.html

    微信公众账号开发教程(四)自定义菜单 请尊重作者版权,如需转载,请标明出处. 应大家强烈要求,将自定义菜单功能课程提前. 一.概述: 如果只有输入框,可能太简单,感觉像命令行.自定义菜单,给我们提供了 ...

  7. Chrome 开发工具指南

    Chrome 开发工具指南 谷歌 Chrome 开发工具,是基于谷歌浏览器内含的一套网页制作和调试工具.开发者工具允许网页开发者深入浏览器和网页应用程序的内部.该工具可以有效地追踪布局问题,设置 Ja ...

  8. OpenGL ES应用开发实践指南:iOS卷

    <OpenGL ES应用开发实践指南:iOS卷> 基本信息 原书名:Learning OpenGL ES for iOS:A Hands-On Guide to Modern 3D Gra ...

  9. Visual C++2010开发权威指南 中文高清PDF - VC.NET

    第一部分  Visual C++ 2010开发与新特性第1章  Visual C++ 2010开发环境简介 11.1  Visual C++ 2010简介 11.2  Visual C++ 2010下 ...

随机推荐

  1. 6.26学习 异步委托回调函数 VS 多线程 VS 并行处理

    描述: 我现在是轮询着构建实例,然后这个实例去执行一个方法,但是执行方法需要大约10s时间,全部轮询下来需要很长时间.所以我现在要更改,头给了我两个方法,1多线程 2异步委托回调函数. 异步委托回调函 ...

  2. Android艺术探索第四 view的自定义

    一.初见View View的层级关系(Veiw到底分成几层,自定义view是从那一层开始绘制的) R:Veiw树的结构如下 ,自定义View是从DecorView开始的;DecorView是View树 ...

  3. .NET Core 2.0 应用程序大小减少50%

    .NET Core 2.0减小体积瘦身官方工具 IL Linker. IL Linker 来源于mono的linker  https://github.com/mono/linker,目前还是预览版本 ...

  4. BeautifulSoup练习第一节

    一.pip install beautilfulsoup4 二.主要使用html.parser这个python标准库 三.打印首页博客的时间.打印摘要 # coding:utf-8from bs4 i ...

  5. 初遇.net

    初遇.net 为了自己的理想我选择了.net课程进行自我提升,想想以后能成为一位程序猿不由得有点兴奋呢,还有另一件高兴的事是我认识了十几位来自不同区县的老师同学,都说人脉就是财富,是不是我的财富有多了 ...

  6. [转载]在instagram上面如何利用电脑来上传图片

    原文地址:在instagram上面如何利用电脑来上传图片作者:小北的梦呓 我们都知道instagram是一个手机版的app,instagram官方不支持通过电脑来上传图片,而利用手机又很麻烦,那么如果 ...

  7. Oracle数据库中直方图对执行计划的影响

    在Oracle数据库中,CBO会默认目标列的数据在其最小值low_value和最大值high_value之间均匀分布,并按照均匀分布原则,来计算目标列 施加查询条件后的可选择率以及结果集的cardin ...

  8. 团队作业8——第二次项目冲刺(Beta阶段)--5.23 third day

    团队作业8--第二次项目冲刺(Beta阶段)--5.23 third day Day three: 会议照片 项目进展 今天是beta冲刺的第三天,组长回到了队伍当中,正式开始改进alpha中存在的功 ...

  9. Swing-JTable的渲染器与编辑器使用demo

    JTable的内容.外观.事件响应在很大程度上是由渲染器与编辑器控制的.具体说来,渲染器负责单元格的外观比如前景色.背景色,以及单元格提示:编辑器负责单元格的内容和事件响应.编辑器默认为文本框形式,也 ...

  10. 201521123052《Java程序设计》第6周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...