一、介紹
衆所周知,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<Void, Integer, Boolean>
{
// Initialize with invalid value:
private int mProgressValue = -1;
private final WeakReference<SampleApplicationSession> 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
本文未完待續....