現如今, AR技術不斷發展,人們不再滿足于運用鍵盤、滑鼠等簡單器械來實作傳統的人機互動模式,隨著用戶接觸機器的多樣化,繁瑣的操作不但對一些用戶有門檻,而且還增加其學習成本;如果能用自然且符合日常生活習慣的人機互動模式,不僅更好上手,也能讓開發者們在應用內開發更多玩法,比如在視頻直播或者拍照程序中,一個手勢就能增加相應的貼紙或特效,豐富互動體驗;面對智能家電等硬體設備時,通過不同的手勢可以控制對應的功能,
那么,應用如何才能實作更自然的人機和互動呢?
華為HMS Core AR Engine提供多種特定手勢的識別,輸出識別到的手勢類別結果并給出手掌檢測框螢屏坐標,左手和右手均可支持,當影像中出現多只手時,只反饋單手(最清晰且置信度最高)識別結果和坐標資訊,支持前后置相機切換,
通過手勢識別能力,可將虛擬物體疊加到人的手部位置,并根據不同的手勢變化來激活某些狀態的切換,給開發者的AR應用提供基礎的互動功能,
不僅如此,AR Engine的手部跟蹤功能能識別和跟蹤21個手部關節點的位置和姿態,形成手部骨骼模型,并可分辨左右手,同時提供單手關節點和骨骼識別能力,輸出手指端點、手部骨骼等手部高級特征,
通過手部骨骼識別能力,開發者們可將虛擬物體疊加到更為精確的手部位置,例如手指尖、手掌心等;利用手部骨骼,能驅動虛擬手做出更為豐富和精細的動作,給開發者們的AR應用提供增強的互動功能和難以置信的新奇玩法,
集成步驟
開發環境要求:
JDK 1.8.211及以上,
安裝Android Studio 3.0及以上:
minSdkVersion 26及以上
targetSdkVersion 29(推薦)
compileSdkVersion 29(推薦)
Gradle 6.1.1及以上(推薦)
在華為終端設備上的應用市場下載AR Engine服務端APK(需在華為應用市場,搜索“華為AR Engine”)并安裝到終端設備,
測驗應用的設備:參見AREngine特性軟硬體依賴表,如果同時使用多個HMS Core的服務,則需要使用各個Kit對應的最大值,
開發準備
-
在開發應用前需要在華為開發者聯盟網站上注冊成為開發者并完成實名認證,具體方法請參見帳號注冊認證,
-
華為提供了Maven倉集成方式的AR Engine SDK包,在開始開發前,需要將AR Engine SDK集成到您的開發環境中,
-
Android Studio的代碼庫配置在Gradle插件7.0以下版本、7.0版本和7.1及以上版本有所不同,請根據您當前的Gradle插件版本,選擇對應的配置程序,
-
以7.0為例:
打開Android Studio專案級“build.gradle”檔案,添加Maven代碼庫,
在“buildscript > repositories”中配置HMS Core SDK的Maven倉地址,
buildscript {
repositories {
google()
jcenter()
maven {url "https://developer.huawei.com/repo/" }
}
}
打開專案級“settings.gradle”檔案,配置HMS Core SDK的Maven倉地址,
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
repositories {
google()
jcenter()
maven {url "https://developer.huawei.com/repo/" }
}
}
}
- 添加依賴 在“dependencies”中添加如下編譯依賴:
dependencies {
implementation 'com.huawei.hms:arenginesdk:{version}
}
應用開發
1.運行前驗證:檢查當前設備是否安裝了AR Engine,若已經安裝則正常運行,若沒有安裝,App應采用合適的方式提醒用戶安裝AR Engine,如主動跳轉應用市場,請求安裝AR Engine,具體實作代碼如下:
boolean isInstallArEngineApk =AREnginesApk.isAREngineApkReady(this);
if (!isInstallArEngineApk) {
// ConnectAppMarketActivity.class為跳轉應用市場的Activity,
startActivity(new Intent(this, com.huawei.arengine.demos.common.ConnectAppMarketActivity.class));
isRemindInstall = true;
}
2.初始化AR場景:AREngine提供5種場景,包括運動跟蹤(ARWorldTrackingConfig)、人臉跟蹤(ARFaceTrackingConfig)、手部識別(ARHandTrackingConfig)、人體跟蹤(ARBodyTrackingConfig)和影像識別(ARImageTrackingConfig),
呼叫ARHandTrackingConfig介面,初始化手部識別,
mArSession = new ARSession(context);
ARHandTrackingConfig config = new ARHandTrackingconfig(mArSession);
- 獲取到ARhandTrackingconfig后,可以設定使用相機的前置或者后置等等一些可選的方法:
Config.setCameraLensFacing(ARConfigBase.CameraLensFacing.FRONT);
- 你需要把你獲取到的手部識別獲取到的config配置到ArSession中,然后啟動手部識別場景:
mArSession.configure(config);
mArSession.resume();
- 初始化HandSkeletonLineDisplay類,此類是根據手骨架點的坐標來繪制手骨架線:
Class HandSkeletonLineDisplay implements HandRelatedDisplay{
//此類需要幾個方法
//初始化方法
public void init(){
}
//繪制手骨架點的方法,這里需要傳入ARHand物件,用來獲取資料
public void onDrawFrame(Collection<ARHand> hands,){
//呼叫getHandskeletonArray()方法用來獲取手部關節點坐標資料
Float[] handSkeletons = hand.getHandskeletonArray();
//把handSkeletons傳入到實時更新資料方法中
updateHandSkeletonsData(handSkeletons);
}
//更新骨架點的連接資料,在更新任何幀的時候呼叫此方法
public void updateHandSkeletonLinesData(){
//用來創建并初始化緩沖區物件的資料存盤
GLES20.glBufferData(…,mVboSize,…);
//用來更新緩沖區物件中的資料
GLES20.glBufferSubData(…,mPointsNum,…);
}
}
- 初始化HandRenderManager類,此類是來渲染從HUAWEI AREngine獲取的資料,
Public class HandRenderManager implements GLSurfaceView.Renderer{
//設定ARSession物件,用于獲取onDrawFrame方法中的最新資料,
Public void setArSession(){
}
}
- 在HandRenderManager類中,初始化onDrawFrame()方法:
Public void onDrawFrame(){
//在這個方法中呼叫了setCameraTextureName(),update()等方法用來更新ArEngine的計算結果
//應用在獲取到最新資料時來呼叫此介面,
mSession.setCameraTextureName();
ARFrame arFrame = mSession.update();
ARCamera arCamera = arFrame.getCamera();
//獲取人體手部跟蹤時回傳的跟蹤結果
Collection<ARHand> hands = mSession.getAllTrackables(ARHand.class);
//把獲取到的hands物件回圈傳入更新手勢識別資訊方法中,進行處理
For(ARHand hand : hands){
updateMessageData(hand);
}
}
8.最后在展示效果的HandActivity頁面,給SurfaceView 設定渲染器,
mSurfaceView.setRenderer(mHandRenderManager);
設定渲染模式
mSurfaceView.setRenderMode(GLEurfaceView.RENDERMODE_CONTINUOUSLY);
具體實作可參考示例代碼,
了解更多詳情>>
訪問華為開發者聯盟官網
獲取開發指導檔案
華為移動服務開源倉庫地址:GitHub、Gitee
關注我們,第一時間了解 HMS Core 最新技術資訊~
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/538272.html
標籤:其他
上一篇:Android開發之執行緒間通信
下一篇:Android開發之執行緒間通信
