一、介绍
众所周知,vuforia可以用在安卓设备上使用AR,但是开启的都是设备的前置或后置的摄像头,在需要外接USB摄像头这块,vuforia没有给出直接的调用模块,但是官网给出了一个制作调用USB摄像头使用AR功能的介绍,网址Vuforia使用UVC Camera的官网介绍。这个网站上的介绍的非常大概,是在懂得一定技术基础上才能使用成功,本文旨在以该介绍为基础,进行完整的梳理,最后会将测试成功的APK放在文章末尾供你调试使用。效果图如图1.1所示:
二、PC中配置编译UVCDriver的环境
为啥要将环境的配置单独进行讲解,因为这一步实在是太重要了,而且坑还特别多,操作繁琐,实现这一步我是拿出了穿针线一样的仔细和认真的姿态。按照vuforia官网的配置要求进行,如图2.1所示:有些受国内网络限制下载不了的,我最后会将所有的配置环境工具都统一打包到网盘里面。
2.1、PC电脑:64位的Windows操作系统;
2.2、安装Python2或者以上的版本,不懂详细安装过程的可以在网上自行搜索下,这一步安装过程比较常规,安装完了运行cmd命令,测试是否安装成功,如图2.2所示我安装的是python2.7版本;
2.3、Bash或者叫GitBash安装,官网下载地址:Git下载地址,下载中一定要注意下载属于你的电脑操作系统位数的哪一个Windows Setup。
详细的下载和安装过程可以参考gitBash下载和安装。我安装的Bash版本为“Git-2.24.1.2-64-bit”;
2.4、CMake:这个下载需要,下载不了的可以使用我文章末尾提供的网盘里面的,我使用的是cmake_3.15.5_win64_x64版本的,安装过程就默认安装即可,安装完了需要配置一下系统变量,在系统变量的path中添加你安装后的CMake的bin文件夹的路径,如图2.3所示
如我的cmke的bin文件路径为”D:\Program Files\CMake\bin“。配置完了运行cmd命令”cmake --version“如果出现如图2.4所示的结果即表示配置完成:
2.5、Ninja的配置:下在官网下载Ninja,Ninja下载地址,下载完了之后不需要点击进行安装,将解压后的ninja.exe文件放在一个文件夹下面,如我的电脑中为”E:\NEDARNC\Tools\ninja“,然后在系统的环境变量的系统变量Path中添加该路径,如图2.5所示
然后,运行cmd命令“ninja --help"显示的结果如图2.6所示表示配置成功。
2.6、Android NDK 13b:这个可以直接在官网下载NDK13下载地址,记住一定要使用13这个版本的NDK,我使用16版本的NDK的时候就是编译不了。下载完后在系统变量中添加”ANDROID_NDK_HOME“,值为NDK13的路径,如图2.7所示为在系统变量中的操作,再将变量
”ANDROID_NDK_HOME“添加到系统变量Path中,如图2.8所示:
然后,cmd命令运行ndk-build命令,得到如图2.9所示的结果即表示路径配置成功;
2.7、git安装:为了将所需要的驱动和SDK从git上直接克隆到工程中,如果不是很熟悉怎么使用可以不安装,对后续的编译没有什么影响,我这里没有安装git;
2.8、Android SDK 22:一定要这个22的版本,如图2.10使用Android SDK Manager下载22的API:
下载完了之后去Android SDK的文件中找到这个下载好的22的api如图2.11所示
然后将整个platforms文件夹复制到platform-tools中,之所以需要这样也是因为后续我在编译的时候老是提示我找不到这个22版本的api,可是明明我已经下载好了,最后在尝试复制到platform-tools中就成功了。具体原因还未知,如有大佬知道的欢迎留言指正。
然后再在系统变量中配置Android SDK的路径,首先,需要在系统变量中新建“ANDROID_HOME”变量,值即为Android SDK中platform-toos的路径,如我的电脑中为“E:\NEDARNC\Tools\Andriod\AndroidSDK\platform-tools”,然后再将“ANDROID_HOME”变量添加到系统变量Path中,如图2.12所示
三、编译过程
3.1、下载编译所需文件:
1)、vuforia文件如图3.1所示,分别为vuforia的安卓SDK“vuforia-sdk-android-8-6-7_0.zip”、vuforia在安卓中的uvc驱动
”vuforia-driver-sample-uvcdriver-android-8-6-7.zip“和vuforia在安卓中的案例”vuforia-samples-core-android-8-6-7.zip“
2)、另外,还有一个vuforia克隆的UVCCamera的安卓源代码Vuforia克隆的UVCCamear源码,如果不是很方向可以下载这个作者的源代码UVCCamera作者源码;
3.2、解压文件:第一步将vuforia SDK解压到一个文件中,在SDK的samples文件中新建一个UVCDriver文件夹;第二步将Vuforia UVC Driver程序解压到SDK中的”samples\UVCDriver“文件中;结果如图3.2所示
第三步在samples中新建一个文件夹,命名为”VuforiaSamples-8-6-7“,将vuforia的安卓的压缩包解压到”samples\VuforiaSamples-8-6-7"文件中;如图3.3所示,其实这个案例工程可以随便解压到任何文件夹,我这里是为了方便就放在SDK文件夹里;
第四步将UVCCamera的源安卓工程文化解压到UVCDriver中,并且重命名为“UVCCamera",如图3.4所示:
3.3、开始编译:
1)、NDK编译:运行cmd命令,将目录导入到UVCCamrea的libuvccamera\src\main\jni中,然后运行"ndk-build"命令如图3.5所示:
图中的编译结果是我已经进行的第二次编译成功示意图,第一次编译的过程会比较长。
2)python命令的运行:然后将cmd的运行路径导到SDK的UVCDriver的路径中,运行cmd命令”python build.py",结果如图3.6所示:
这一步结束时候会在UVCDirver/build/bin/Android文件中生成我们最终所需的文件,如图3.7所示:
3.4、配置vuforia的安卓案例
1)、使用Android Studio打开解压后的vuforia安卓工程,在build.gradle中添加jni文件的路径和依赖项,如图3.8所示:
android {
sourceSets.main {
jniLibs.srcDirs += '[你的SDK路径]/UVCDriver/build/bin/Android/'
}
}
...
dependencies {
implementation files("[你的SDK文件路径]/UVCDriver/build/bin/Android/UVCDriver.jar")
}
...
2)、添加vuforia的key:在“SampleApplicationSession”类的“InitVuforiaTask”方法中添加运行Vufoira所需要的Key,如图3.9所示为key在你申请的账号所在的位置:
并且将"Vuforia.setInitParameters"方法也添加到““InitVuforiaTask方法中,代码示例如:
private static class InitVuforiaTask extends AsyncTask
{
// Initialize with invalid value:
private int mProgressValue = -1;
private final WeakReference appSessionRef;
InitVuforiaTask(SampleApplicationSession session)
{
appSessionRef = new WeakReference<>(session);
}
protected Boolean doInBackground(Void... params)
{
SampleApplicationSession session = appSessionRef.get();
// Prevent the onDestroy() method to overlap with initialization:
synchronized (session.mLifecycleLock)
{
Vuforia.setDriverLibrary("libUVCDriver.so");
// Configure Vuforia Engine
// Note: license key goes in the third parameter
String tempKey="你的Vuforia的key";
Vuforia.setInitParameters(session.mActivityRef.get(), session.mVuforiaFlags, tempKey);
3)、调用USB摄像头的请求:在”AboutScreen"类的onCreate方法末尾中添加代码:这段代码采用一个单独的线程来请求,这样可以保障
new Thread(){
@Override
public void run() {
USBController.requestUSBPermission(AboutScreen.this);
}
}.start();
在请求的时候主线程不至于等待而被挂起甚至直接死掉;
4)、直接运行,在进入到ImageTarget的About的界面中会弹出USB摄像头的请求提示,如图3.10所示:请求一次之后再使用就不需要再请
求了,直接就能使用。目前只测试使用了ImageTarget的案例。
四、附件及下载
1、编译工具Git-2.24.1.2-64-bit、ninja和cmake_3.15.5_win64_x64下载:
百度网盘链接:https://pan.baidu.com/s/1j2Md18PdmHCrtrR-CyheEg 提取码:n7j2
2、测试APK下载地址:百度网盘链接:https://pan.baidu.com/s/1ilbdd4aYEgZaInyh3CdI4Q 提取码:b385
本文未完待续....