视+ 收藏本版 +发表新主题
查看: 56444|回复: 4
打印 上一主题 下一主题

[分享] EasyAR 【UNITY3D】官方样例简单图片识别---识别图和模型

[复制链接]

[分享] EasyAR 【UNITY3D】官方样例简单图片识别---识别图和模型

204有个大坑 发表于 2016-1-5 11:42:04 浏览:  56444 回复:  4 只看该作者 复制链接
本帖最后由 204有个大坑 于 2016-1-19 14:08 编辑

上一篇说了运行官方样例,这篇简单说说识别图和模型
首先,看看官方的这个样例




简直不能更简单了。
1.换识别图你可以这样简单粗暴:找到看着不顺眼的直接换成自己的图片,当然名字还是原来的名字。
2.换模型,就不能简单粗暴了,看看代码,也是一目了然啊

首先,看的是这个HelloARTarget.cs

这里给出了1、2、3、4 四种识别图初始化的方法 在Start函数里,研究一下,也用不了多久啊




四种方法想换啥换啥,想怎么换就怎么换。
然后说一下,另一个脚本EasyImageTargetBehaviour.cs
这个就更简单了啊


四个关键方法,ITargetEventHandler.OnTargetFound、ITargetEventHandler.OnTargetLost、ITargetEventHandler.OnTargetLoad、ITargetEventHandler.OnTargetUnload

算了,就写这么多吧。无聊随便写写。
2016年1月19日补充:
最近又有很多人问起这个图片识别,然后出模型的问题。我忽然觉得这篇发布得有点草率。对于已经熟悉的人说,确实是简单得不能再简单,我想既然还有人问起,那就应该是还没有熟悉。在这里再把一些更详细的细节说一下,希望能帮到更多的新手吧。
说说加载识别图的方法前面说的”四种“方法,其实不是很准确,总的来说加载识别图应该分为两大类:一种是直接加载图片,另一种是通过json文件进行加载。
或者说是,一种手动,另一种通过代码。


一、手动直接加载识别图的步骤,及应该注意的一些细节
1.识别图要放在StreamingAssets目录下,



Path 参数就填识别图的名称,包括后缀名。如果识别图有上一层文件目录,也要加上。name的话,不一定要求一样。
其他参数照默认的就行。
重要的是 Storage 这个,因为这个方法是直接加载StreamingAssets的识别图,所以要选Assets.关于Storage参数,官方手册有说明,我没有去深究,大家自行去理解,也欢迎补充。
http://www.easyar.cn/view/docs/R ... ty-StorageType.html

2.手动直接加载json文件的步骤和注意事项,与步骤1相似。只是json文件的写法要注意格式,官方文档有说明,
http://www.easyar.cn/view/docs/G ... rget-Configure.html
值得注意的是,写文档保存的时候注意编码格式为
UTF-8,(后面不带BOM)的。否则会加载不了。
跟直接加载图片一样,创建好的json文件放在StreamingAssets目录下。Path 参数就填文件名称包含后缀。如果有上一层文件目录,也要加上。name的话,不一定要求一样。
其他参数照默认的就行,Storage  也是选Assets.

二,通过代码加载识别图,也就是前面说的“四种”方式了。
先看第一种,第一种理解了,其他的也很容易明白,也就不多说了。官方示例是这样的:

//创建target的方法。
        void CreatTarget(string targetName, out EasyImageTargetBehaviour targetBehaviour)
        {
            GameObject Target = new GameObject(targetName);
            Target.transform.localPosition = Vector3.zero;
            targetBehaviour = Target.AddComponent<EasyImageTargetBehaviour>();
        }

思路也很简单:
1.创建一个GameObject,
2.并添加组件EasyImageTargetBehaviour。
3.把添加了EasyImageTargetBehaviour组件的gameobject 绑定到EasyAR上,这样摄像机可以识别。
4.设置。
代码中体现为:
1和2,就是CreatTarget的整个方法,返回是void,但是参数里面有 out,out的用法大家自行去找资料吧,我理解也不是很深,    避免误人子弟。
3则体现在targetBehaviour.Bind(tracker);这个传入的tracker,是通过这个得到的
   TrackerBehaviour tracker = FindObjectOfType<TrackerBehaviour>();
   我们回到Unity里面发现,EasyAR这个预设绑定了这个脚本,所以说 绑定到EasyAR上。
4 设置 targetBehaviour.SetupWithImage("sightplus/argame01.jpg", StorageType.Assets, "argame01", new Vector2());跟手动设     置的向对应,主要是路径和类型。

代码中的后面两行,是实例化模型。这个没什么说的。
加载识别图说完了,这时候跑起来应该没问题了。能启动相机,能识别图片了。


说说识别显示模型。
刚刚前面说了,创建target的时候,添加了一个组件EasyImageTargetBehaviour 可还记得?
是的,打开这个脚本 发现它继承ImageTargetBehaviour, ITargetEventHandler这两个:
public class EasyImageTargetBehaviour : ImageTargetBehaviour, ITargetEventHandler
这个脚本还重写了这四个方法:
ITargetEventHandler.OnTargetFound,ITargetEventHandler.OnTargetLost,ITargetEventHandler.OnTargetLoad,ITargetEventHandler.OnTargetUnload
看方法名就知道了。这就是识别、丢失、加载、释放对应的事件触发了。

总结:



总的来说,图片识别还是很简单的,步骤也简单:
1.导入EasyARSDK,将预设EasyAR拖到场景中(原有的Main Camrea需删掉),将ImageTarget也拖到场景中
2.初始化EasyAR,需要到官网注册获取Key,详细请看前一篇。
3.加载识别图。
4.识别的回调,再根据自己项目的需求,在四个回调事件中处理就可以了。

以上是个人理解,欢迎指教和探讨。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
分享至:
| 人收藏
回复

使用道具 举报

该用户从未签到

沙发
204有个大坑
 楼主|
发表于 2016-1-5 11:43:17 只看该作者
也不知道为啥,最后这张图.....
回复 支持 反对

使用道具 举报

该用户从未签到

板凳
204有个大坑
 楼主|
发表于 2016-1-19 14:19:17 只看该作者
204有个大坑 发表于 2016-1-5 11:43
也不知道为啥,最后这张图.....

发帖,还真不是件简单的事情啊
回复 支持 反对

使用道具 举报

该用户从未签到

地板
Eliam 发表于 2016-3-30 15:43:09 只看该作者
AR增强现实技术介绍——上海众迅文化传播有限公司
增强现实Augmented Reality,简称 AR。是一种实时地计算摄影机影像的位置及角度并加上相应图像的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动。随着随身电子产品运算能力的提升,增强现实的用途已经越来越广。
现在我们可以通过手机/PAD:在平面媒介上呈现建筑规划、呈现立体虚拟空间、现场体验产品效果、360〬感受完美产品、让立体宠物互动、体验虚拟互动游戏、轻松实现试衣变装
现在我们可以通过手机/PAD创造肉眼看不到的一切

ABOUT US
上海众迅文化传播有限公司长期致力于研发AR增强现实技术,链接虚拟与现实,让智能手机与设备轻松“认识、探索”身边事物,让你更智慧。领先的大规模图像数据识别云平台,支持千万级别以上数据的即时搜索,为合作伙伴提供可定制的识别算法与接口。完美的增强现实互动技术,融合技术与艺术,“即见即得”的沉浸式体验,为品牌提供创新、立体的互动营销方式

上海众迅文化传播有限公司
Shanghai Massthink Culture Communication Co., Ltd. 
电话/Tel: +86 21 6250 9116
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2013-2017 ARinChina-增强现实中国技术论坛   All Rights Reserved.