ImageTarget 顾名思义,就是图像识别,本文记录下作者最近学习 vuforia 中的 imageTarget 笔记与心得。
vuforia guide:
vuforia sample - 选择 Core Features 下载,导入 ImageTarget.unitypackage:
vuforia 基础知识:
Vuforia 6.0.112
Unity 5.3.6f1 x64 (Android 平台)
Windows 7 x64
下面列举下本文中所列出的几个名词,可能每个人对这些英文的理解不一样,这些解释仅仅代表个人观点。
Database(数据集、图集):大体都是指多张图片组合在一起的那个东西
ImageTarget(识别图):具体的某张识别图像
1、从 Demo 中可以看出,当有多个 ImageTarget 时,每个 ImageTarget 之间是有间距的,可以简单理解为每个 ImageTarget 的坐标值不一样【(x,z)平面】,如下所示:
2、Demo 中把需要识别的图,全部以 ImageTarget 的形式,放置在场景中
3、Word Center Mode 默认的模式选择的是 FirstTarget
4、如果需要同时识别多个 ImageTarget,需要设置最大识别数量
FirstTarget
相机在运动,第一个 Found 的 ImageTarget 坐标不动,其它 ImageTarget 会轻微地运动
Camera
ImageTarget 在运动,相机不动
1、上传识别图到管理后台(单张图像不超过 2mb 大小,如果是灰度图,建议使用 jpg 格式),管理后台会智能地标注出图像的识别点(如何让图像更具可识别性?有针对图像的设计指南)
2、下载识别图 package,导入到 Unity 中,package 中包括数据集 (xxx.data),xml(xxx.xml),识别图 (xxx_scale.jpg,xxx_scale.png)
3、根据 Demo 的示例创建一个新场景,里面有 ARCamera,ImageTarget,在 ImageTarget 的属性面板选择 database 和识别图 (ImageTarget)
4、运行程序,当摄像头识别到步骤 3 的选定的识别图之后,就会触发 OnFound 事件,而当识别图移开或者被遮挡,会触发 OnLost 事件
具体的业务逻辑,在 OnFound 和 OnLost 中进行处理
- void OnFound(string trackableName) {
- //TODO 识别成功的逻辑处理,参数trackableName就是xml中的name
- }
- void OnLost(string trackableName) {
- //TODO 丢失的逻辑处理,参数trackableName就是xml中的name
- }
下载的 package 中的 xml 内容如下
- <?xml version="1.0" encoding="UTF-8" ?>
- <QCARConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="qcar_config.xsd">
- <Tracking>
- <ImageTarget name="798_01" size="1.000000 1.434034" />
- <ImageTarget name="799_01" size="1.000000 1.434034" />
- </Tracking>
- </QCARConfig>
分析:这里面的内容就是我们上传的识别图的图片名,长宽的比例。
默认这份 xml 是放在 StreamAssets\database\database.xml,当然如果不需要那么多的识别图,而又不想在管理中删除多余的识别图,那么有个简单的方法,删除 xml 中的几行数据,就会删除相应的识别图了。
登录 vuforia 的管理后台
选择 TargetManager - 选择具体的 Database - 具体的 Image - Show Feature 可以看到识别图的识图点
Tips
同一张识别图,彩图和灰白图的识别点是一样的,如下所示我上传的是张彩色的图,但 Show Features 显示的是张灰白图。
假设共有 20 张图像,当用户扫描其中任意一张图,都可以成功被识别,再比如图集中有 500 张图像,当扫描任意张图像时都可以被成功识别
通过上面的操作步骤,我们知道只有在场景中存在的 ImageTarget,在摄像头扫描到时,才可以触发识别成功事件。
那么我们需要做的就是:把 database 中的识别图全部实例成 ImageTarget,可能你会想,那就把 ImageTarget 的 prefab 实例化 20 或 500 个,每个实例的 ImageTarget 不同呗。
思想是这样的,但还有更简捷的方法。
在 ARCamera 的 Database Load Behaviour 中勾选了需要的 database 之后,运行就会把 database 中所有的 imagetarget 都生成出来,并自动已选择好了不同的 ImageTarget
通过上面的实践,我们知道既然 Vuforia 会自动把所有的 ImageTarget 都生成出来,那么我们就可以更加方便了
下面这段代码可以获取所有的识别对象
- IEnumerable < TrackableBehaviour > trackableBehaviours = TrackerManager.Instance.GetStateManager().GetTrackableBehaviours();
Tips
1、经测试多图识别中,在丢失之后最好重设下 ImageTarget 的位置到初始值,否则可能出现奇怪现象。
2、可以获取 ImagetTargetBehaviour 的 Size,设置每个 ImageTarget 的位置
测试代码:
来源: http://www.cnblogs.com/zhaoqingqing/p/6123860.html