Vuforia的Samples详细解析(Android)

本文大致介绍Vuforia的Samples内容,帮助大家快速理解和掌握Vuforia的功能。

Core Feature介绍

Vuforia的Core Features包含以下核心特性:

  • Image Targets 特定的图片识别功能

  • VuMark 类似二维码识别的VuMark识别功能

  • Object Recognition 立体物体的识别(制作立体物体识别database,可360度全方位识别)

  • Cylinder Targets 圆柱体的识别

  • Multi Targets 多目标的识别(即对一个立方体各个面都可以识别,并且识别结果一致)

  • User Defined Targets 用户自定义目标识别(即拍摄任意图片作为识别目标)

  • Cloud Recognition 云识别,即将识别物放到vuforia后台,并通过网络交互确认识别的功能

  • Text Recognition 文字识别功能

  • Virtual Buttons 虚拟按钮的功能,一种AR交互,覆盖图片中的按钮,能影响3D模型的颜色。可以发挥想象空间。

Sample 解析

下载和配置

1.在https://developer.vuforia.com/downloads/sdk界面中下载vuforia-sdk-android-6-2-10.zip

2.在https://developer.vuforia.com/downloads/samples下载Core Features下的vuforia-samples-core-android-6-2-10.zip

3.将上述两个压缩包解压,并将samples文件夹放到sdk文件夹下的sample目录下,即可用Android Studio 打开此目录并顺利完成Gradle的bulid工作

4.运行时需要在sample中设置自己的key

注册了Vuforia后,在Develop版块的License Manager里通过Add License Key创建你的key

在SampleApplicationSession类中找到Vuforia.setInitParameters(mActivity, mVuforiaFlags, "the key");代码设置key。

Sample内容解读

java

├SampleApplication

│├SampleApplicationSession 控制AR功能生命周期的实现类,(开始,暂停,停止,销毁)

│├SampleApplicationControl SampleApplicationSession的回调类,返回当前AR的生命周期状态

│├SampleAppRenderer 3D模型的渲染器

│├SampleAppRendererControl 3D模型的渲染器的回调类

│└SampleApplicationException Sample异常封装类

└VuforiaSamples Core Features对应的各个简单实现

asset 使用的资源,包括被识别物的.dat和.xml文件和识别后的生成的3D模型渲染文件(如TextureTeapotBlue.png,TextureTeapotRed.png)

ImageTargets实例解析

下面,我们以ImageTargets为例,介绍一下vuforia的简单实现原理。

在VuforiaSamples/app/ImageTargets目录下有两个类ImageTargets(一个Activity)和ImageTargetRenderer(3D水壶的渲染类)。

我们看看ImageTargets做了些什么?

@Overrideprotected void onCreate(Bundle savedInstanceState){    Log.d(LOGTAG, "onCreate");    super.onCreate(savedInstanceState);        //创建SampleApplicationSession    vuforiaAppSession = new SampleApplicationSession(this);        startLoadingAnimation();        //设置被识别标识物信息    mDatasetStrings.add("StonesAndChips.xml");    mDatasetStrings.add("Tarmac.xml");        //初始化AR    vuforiaAppSession        .initAR(this, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);        mGestureDetector = new GestureDetector(this, new GestureListener());            mTextures = new Vector<Texture>();    //设置3D模型渲染资源    loadTextures();        mIsDroidDevice = android.os.Build.MODEL.toLowerCase().startsWith(        "droid");    }

其核心内容是onCreate()里的三个操作:

1.启动AR功能

2.设置被识别物

3.设置识别后的需要渲染的3D模型资源

而在AR初始化完成后(onInitARDone方法中)做了一件重要的事:

// Initializes AR application components.private void initApplicationAR(){    // Create OpenGL ES view:    int depthSize = 16;    int stencilSize = 0;    boolean translucent = Vuforia.requiresAlpha();        mGlView = new SampleApplicationGLView(this);    mGlView.init(translucent, depthSize, stencilSize);    //初始化渲染器,输入渲染模型信息,并关联GLView    mRenderer = new ImageTargetRenderer(this, vuforiaAppSession);    mRenderer.setTextures(mTextures);    mGlView.setRenderer(mRenderer);}

自此,整个工作流程就打通了,即:

被识别物通过AR进行识别,识别的结果告知给Renderer(渲染器)。Renderer根据识别结果渲染出对应的3D模型。

ObjectRecognition实例解析

作为一个有别于其他Sample针对图片的识别,ObjectRecognition,立体物体的全方位识别,在这里做下重点介绍。

首先是制作立体物可识别库

你需要准备几个工具:

1.Vuforia Object Scanner 用于扫描并生成识别物数据的apk工具 下载地址:https://developer.vuforia.com/downloads/tool

2.打印一张用于定位目标物体的背景贴纸

接下来是制作过程:

1.将你想要制作的3D识别物放置在如上背景纸的右上方的区域

2.打开Vuforia Object Scanner,将摄像头对着3D物体进行全方位的扫描,如下图:

透明网格表示待扫描区域,绿色网格表示这个角度的数据已扫描完毕。你可以手动调整摄像头角度和远近将透明网格变成绿色网格。当所有网格都是绿色后,表示3D物体信息录入完整。

按下结束按钮,输入自定义名称保存数据后,你可以通过Scanner的测试按钮测试数据的可用性。

打开测试扫描器,任意角度对准3D识别物,如果出现一个绿色3D矩形,表示数据可用。如图:

接下来是上传数据到Vuforia云服务端。

通过adb将Scanner生成的在 /sdcard/VuforiaObjectScanner/ObjectReco文件夹下的*.od文件导出。

登录Vuforia网站,在Develop版块中找到Target Manager,并创建一个Type为Device的database.

点击进入你创建的database,点击Add Target,选择3D Object,上传*.od文件,编辑好名称即可添加,如下图:

最后是使用。Download Database中选择Android Studio,下载获得.dat和.xml文件。将此两个文件放到Sample里的/assets/ObjectRecognition目录下。

在ObjectTargets.java类中doLoadTrackersData方法里

        if (!mCurrentDataset.load("ObjectRecognition/objectTarget.xml",            STORAGE_TYPE.STORAGE_APPRESOURCE))            return false;

替换objectTarget.xml为你创造的.xml名称。编辑运行,即实现了创建自定义3D识别物并识别的功能,如下图:


更多相关文章

  1. Android各个版本的区别
  2. Android指纹识别,2017/3/12 03
  3. 关于直接在View中实现Gesture的功能
  4. Android(安卓)快速开发框架:推荐10个框架
  5. Manifest.permission 这个类定义了android全部的权限共106个
  6. Android的手势操作识别
  7. Android(安卓)Studio 超级全常用快捷
  8. 【Android】getDimension,getDimensionPixelOffset和getDimensio
  9. Android(安卓)EditText部分特殊功能

随机推荐

  1. HelloWorld及Android项目结构介绍-JavaGG
  2. 在Android设备上搭建Web服务器的方法
  3. Android(安卓)Camera模块分析
  4. Android应用开发资源
  5. Android(安卓)Service
  6. Android(安卓)4.0硬件加速及绘制技巧
  7. 详解 Android(安卓)是如何启动的
  8. Android源码分析:HeaderViewListAdapter
  9. Android最佳实践之:代码性能优化——Stric
  10. Android源码分析:TabHost