AR全新教程專欄--【ARCore】幫助開發者瞭解如何使用ARCore在Android平臺構建AR應用。
關於ARCore
ARCore 是 Google 的增強現實體驗構建平臺。ARCore 利用不同的 API 讓用戶的手機能夠感知其環境、理解現實世界並與信息進行交互。 ARCore 使用三個主要功能將虛擬內容與通過手機攝像頭看到的現實世界整合:
-
運動跟蹤:讓手機可以理解和跟蹤它相對於現實世界的位置。
-
環境理解:讓手機可以檢測各類表面(例如地面、咖啡桌或牆壁等水平、垂直和傾斜表面)的大小和位置。
-
光照估計:手機可以估測環境當前的光照條件。
支持的設備:ARCore 可以在運行 Android 7.0 (Nougat) 及更高版本系統的手機上。
-
Android 7.0 或更高版本 (個別型號需要更高的版本)
-
運行在搭載 Google Play 應用商店的設備上
-
Google Play 應用商店需要網絡鏈接才能更新 ARCore
在中國,設備不搭載 Google 應用商店。 但可以從以下應用商店中選擇其一來安裝 ARCore:
-
Xiaomi app store (小米應用商店)
-
Huawei Apps Gallery (華爲應用商店)
-
OPPO APP Market (OPPO 軟件商店)
-
Samsung Galaxy Apps (三星應用市場)
-
V-Appstore (vivo應用商店)
對於支持的具體手機機型:https://developers.google.com/ar/discover/supported-devices
工作原理
從本質上講,ARCore 在做兩件事:在移動設備移動時跟蹤它的位置和構建自己對現實世界的理解。
ARCore 的運動跟蹤技術使用手機攝像頭標識興趣點(稱爲特徵點),並跟蹤這些點隨着時間變化的移動。將這些點的移動與手機慣性傳感器的讀數組合,ARCore 可以在手機移動時確定它的位置和屏幕方向。
除了標識關鍵點外,ARCore 還會檢測平坦的表面(例如桌子或地面),並估測周圍區域的平均光照強度。這些功能共同讓 ARCore 可以構建自己對周圍世界的理解。
藉助 ARCore 對現實世界的理解,你能夠以一種與現實世界無縫整合的方式添加物體、註釋或其他信息。 比如可以將一隻打盹的小貓放在咖啡桌的一角,或者利用藝術家的生平信息爲一幅畫添加註釋。 運動跟蹤意味着你可以移動和從任意角度查看這些物體,即使你轉身離開房間,當你回來後,小貓或註釋還會在你添加的地方。
1. 運動跟蹤:當你的手機在現實世界中移動時,ARCore 會通過一個名爲並行測距與映射(或 COM)的過程來理解手機相對於周圍世界的位置。ARCore 會檢測捕獲攝像頭圖像中的視覺差異特徵(稱爲特徵點),並使用這些點來計算其位置變化。這些視覺信息將與設備 IMU 的慣性測量結果結合,一起用於估測攝像頭隨着時間推移而相對於周圍世界的姿態(位置和方向)。
通過將渲染 3D 內容的虛擬攝像頭的姿態與 ARCore 提供的設備攝像頭的姿態對齊,開發者能夠從正確的透視角度渲染虛擬內容。渲染的虛擬圖像可以疊加到從設備攝像頭獲取的圖像上,讓虛擬內容看起來就像現實世界的一部分一樣。
2. 環境理解:ARCore 會通過檢測特徵點和平面來不斷改進它對現實世界環境的理解。ARCore 可以查找看起來位於常見水平或垂直表面(例如桌子或牆)上的成簇特徵點,並讓這些表面可以由你的應用用作平面。ARCore 也可以確定每個平面的邊界,並將該信息提供給您的應用。可以使用此信息將虛擬物體置於平坦的表面上。由於 ARCore 使用特徵點來檢測平面,因此可能無法正確檢測像白牆一樣沒有紋理的平坦表面。
3. 光估測:ARCore 可以檢測其環境光線的相關信息,併爲你提供給定攝像頭圖像的平均光強度和色彩校正。此信息讓你能夠使用與周圍環境相同的光照來照亮你的虛擬物體,提升它們的真實感。
Google提供了可從多個開發平臺(Android [ Java ],Web [ JavaScript ],Unreal [ C ++ ]和Unity [ C# ])訪問的ARCore ,從而爲開發人員提供了足夠的靈活性和選項,可以在各種平臺上構建應用程序。
在本文中,我們將重點介紹如何設置Android開發工具併爲Android構建ARCore應用程序。
Step 1:安裝Android Studio
Android Studio是用於編碼和部署Android應用程序的開發環境。因此,它包含構建和將應用程序部署到Android設備所需的核心工具集。畢竟,ARCore需要安裝到物理設備上才能進行測試:
1. 訪問https://developer.android.com/studio。
2. 單擊綠色的“ 下載ANDROID STUDIO”按鈕。
3. 同意條款和條件並按照說明進行下載。
4. 文件下載完成後,爲你的系統運行安裝程序。
5. 請按照安裝對話框上的說明進行操作。如果要在Windows上進行安裝,請確保設置了一個易於記憶的安裝路徑,以後可以輕鬆找到它,如以下示例所示
6. 單擊其餘對話框以完成安裝。
7. 安裝完成後,可以選擇啓動程序。確保選擇了啓動Android Studio的選項,然後單擊 Finish。
Android Studio內嵌OpenJDK,意味着我們至少可以省略在Windows上安裝Java的步驟。
我們已經安裝了Android Studio,但還沒有完成。我們仍然需要安裝對於構建和部署必不可少的SDK工具。如下所示:
1. 如果以前從未安裝過Android SDK,則在Android Studio首次啓動時會提示你安裝SDK,如下所示:
2. 選擇SDK組件,並確保再次將安裝路徑設置爲衆所周知的位置
Step 2:安裝ARCore
當然,爲了使用或構建任何ARCore應用程序,我們將需要爲所選平臺安裝SDK。按照給定的說明安裝ARCore SDK:
我們將使用Git直接從源代碼中提取我們需要的代碼。可以在https://git-scm.com/book/en/v2/Getting-Started-Installing-Git上了解有關Git以及如何在平臺上安裝Git的更多信息, 或使用Google搜索:開始安裝Git。確保在Windows上安裝時,選擇默認值,然後讓安裝程序設置PATH 環境變量。
1. 打開命令提示符或Windows Shell,然後導航到Android(C:Android在Windows上)安裝文件夾。
2. 輸入以下命令:
git clone https://github.com/google-ar/arcore-android-sdk.git
3. 這將下載ARCore SDK並將其安裝到名爲的新文件夾中 arcore-android-sdk,如下圖所示:
Step 3:在手機上安裝ARCore服務
現在,在我們的開發環境中安裝了ARCore SDK之後,我們就可以在測試設備上安裝ARCore服務了。使用以下步驟在你的設備上安裝ARCore服務:
1. 通過執行以下操作,獲取移動設備並啓用開發人員和調試選項:
(1)打開設置app
(2)選擇系統
(3)滾動到底部,選擇關於手機
(4)再次滾動到底部,點擊Build number seven times
(5)回到前面的屏幕,在底部附近選擇Developer options
(6)選擇USB調試
2.https://github.com/google-ar/arcore-android-sdk/releases/download/sdk-preview/arcore-preview.apk
將ARCore服務APK下載到Android安裝文件夾
3. 用USB連接你的移動設備。如果這是你的第一次連接,則可能需要等待幾分鐘才能安裝驅動程序。
4. 返回命令提示符或Windows Shell並運行以下命令:
adb install -r -d arcore-preview.apk
//ON WINDOWS USE:
sdkplatform-toolsadb install -r -d arcore-preview.apk
Step 4:構建和部署
既然我們已經完成了上述所有繁瑣的安裝工作,現在就可以構建一個示例應用程序並將其部署到你的Android設備上了。讓我們回到Android Studio,按照以下步驟開始:
1. 瀏覽並選擇Androidarcore-android-sdksamplesjava_arcore_hello_ar文件夾,如下所示:
2. 單擊 OK。如果這是你第一次運行此項目,則將遇到一些依賴項錯誤,例如此處的錯誤:
3. 爲了解決錯誤,只需單擊錯誤消息底部的鏈接即可。這將打開一個對話框,提示你接受然後下載所需的依賴項。繼續單擊鏈接,直到看不到其他錯誤爲止。
4. 確保你的移動設備已連接,然後從菜單中選擇運行 。這應該會在你的設備上啓動該應用程序,但是你可能仍需要解決一些依賴性錯誤。只要記住單擊鏈接即可解決錯誤。
5. demo運行效果如下圖:
Step 5:關於代碼
現在,讓我們通過研究源代碼來仔細查看應用程序的主要部分。請按照給定的步驟在Android Studio中打開應用程序的代碼:
1. 在“ 項目”窗口中,找到並雙擊HelloArActivity,如圖所示:
2. 加載源代碼後,滾動代碼至以下部分:
private void showLoadingMessage() {
runOnUiThread(new Runnable() {
@Override
public void run() {
mLoadingMessageSnackbar = Snackbar.make(
HelloArActivity.this.findViewById(android.R.id.content),
"Searching for surfaces...",
Snackbar.LENGTH_INDEFINITE);
mLoadingMessageSnackbar.getView().setBackgroundColor(0xbf323232);
mLoadingMessageSnackbar.show();
}
});
}
3. 請注意文本"Searching for surfaces.."。選擇此文本並將其更改爲"Searching for ARCore surfaces.."。該showLoadingMessage功能是顯示加載消息的助手。在內部,此函數調用runOnUIThread,依次創建的新實例,Runnable然後添加內部run函數。我們這樣做是爲了避免UI上的線程阻塞,這是主要的禁止。該run函數內部是設置消息傳遞Snackbar並顯示消息的位置。
4. 點擊運行,確保設備上改信息已更改。
下一部分我們通過Unity來構建一個ARCore應用!
關於更多機器學習、人工智能、增強現實資源和技術乾貨,可以關注公衆號:AIRX社區,共同學習,一起進步!