Vuforia的Samples详细解析(Android)

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做了些什么?

@Override
protected 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识别物并识别的功能,如下图:


你可能感兴趣的:(Vuforia的Samples详细解析(Android))