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模型的颜色。可以发挥想象空间。
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。
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为例,介绍一下vuforia的简单实现原理。
在VuforiaSamples/app/ImageTargets目录下有两个类ImageTargets(一个Activity)和ImageTargetRenderer(3D水壶的渲染类)。
我们看看ImageTargets做了些什么?
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); }
自此,整个工作流程就打通了,即:
作为一个有别于其他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识别物并识别的功能,如下图: