unity+vuforia(AR)(Cloud Recognition)

来源:互联网 发布:刷流量软件 编辑:程序博客网 时间:2024/05/16 02:30

vuforia的其中一个重要特性,就是云端识别。识别图可以不用封存在应用中,而是保存在高通的云端,也为自己的应用节省了图片的容量了,也能方便自己增加识别图而不用随时更改应用。那就开始来尝试下吧。

首先得在https://developer.vuforia.com有自己的开发者账号,然后到Resource下的Sample例子下载Cloud Recognition开发包,那是一个集合,解压出来就能看到了,然后import到unity中。Target Manager下选择CloudDatabases自己创建数据库名,然后添加识别图

name自己取,尺寸宽度就写识别图的宽度就好了,第三个就是上传识别图,第四个上传要求是txt文件(这个txt文件内容可以自己按需求写,metadata意思是元数据,当识别成功后可以获取到对应识别图的元数据,你可以设置json格式的一些数据,或者你需要的任何字符),识别图达到三星以上比较好。

接下来到unity界面

把ARCamera,CloudRecognition,ImageTarget拖到Hierarchy界面,将想出现的3D模型拖到ImageTarget下,这里显示的unitychan

选择CloudRecognition,右边要填写两个key,可以在开发者网站上云数据库那找到,注意要填写的是Client的key,这样才可以搜索你的云数据库。然后要把cloudRecoEventHandler文件拖入,然后把ImageTarget拖到这个文件出来的空格中,即ImageTargetTemplate空中

对了,ImageTarget看不清,不方便摆放模型,可以点击ImageTarget右边这里选择个图片,如下图

最后导出android程序就可以了,扫描下图片就可以显示出模型了。跟基础的区别是识别图没存在应用里,而是高通的云数据库中。metadata应该主要用以区别是扫中哪个图片吧,我自己理解的,还望求教。

最后还有一个小问题需要提一下,用手机扫描的时候,我们可能会发现摄像头一直没法对焦,影像模糊,怎么办呢?我们可以到ARCamera下的WebCamBehaviour中加上以下代码:

bool focusModeSet = CameraDevice.Instance.SetFocusMode (CameraDevice.FocusMode.FOCUS_MODE_CONTINUOUSAUTO);if (!focusModeSet) {      Debug.Log ("Failed to set focus mode (unsupported mode).");}

如果没有start方法,就用start方法把上面的代码包住。如果有就写start方法里面就好了。具体的解释详见http://bbs.csdn.net/topics/390884037,感谢liang_704959721进行翻译。

对于cloudRecoEventHandler这个文件,我们也可以自定义,但一定要记得继承ICloudRecoEventHandler,而且要重写下面的5个方法:

    /// <summary>    /// called when the CloudRecoBehaviour has finished initializing    /// </summary>    void OnInitialized();     /// <summary>    /// called when an error is reported during initialization    /// </summary>    void OnInitError(TargetFinder.InitState initError);     /// <summary>    /// called when an error is reported while updating    /// </summary>    void OnUpdateError(TargetFinder.UpdateState updateError);     /// <summary>    /// called when the CloudRecoBehaviour starts or stops scanning    /// </summary>    void OnStateChanged(bool scanning);     /// <summary>    /// called when a new search result is found    /// </summary>    void OnNewSearchResult(TargetFinder.TargetSearchResult targetSearchResult);
具体多看看官方给的例子吧委屈

0 0
原创粉丝点击