AR人體姿態識別,實現無邊界的人機交互

近年來 , AR不斷發展,作為一種增強現實技術,給用戶帶來了虛擬和現實世界的融合體驗 。但用戶已經不滿足于單純地將某件虛擬物品放在現實場景中來感受AR技術,更想用身體姿勢來觸發某個指令,達到更具真實感的人機交互功能 。
比如在AR體感游戲中,用戶不必點擊按鍵進行頻繁操作,通過某個姿勢即可觸發;在拍攝短視頻時,用戶無需接觸屏幕,擺出不同的姿勢便可觸發某些特定效果;健身App中,教練進行健身教學時,用戶可以擺出相應姿勢跟練 , 由系統識別姿勢是否標準 。
那么 , 如何用特定的人體姿勢來識別指令進行人機交互呢?
華為HMS Core AR Engine服務給出了解決方案,其中人體姿態識別服務提供了單人身體姿態識別能力,識別六種靜態身體姿勢并輸出識別結果,支持前后攝像機切換,實現虛擬世界與現實世界的融合 。

AR人體姿態識別,實現無邊界的人機交互

文章插圖
開發者伙伴可將人體姿態識別能力運用在需要識別動作并觸發某些事件的應用場景中,比如交互界面控制、游戲操作動作識別等觸發類交互行為,是體感應用的基礎核心功能,為開發者AR應用提供較遠距離遠程控制和協作能力,豐富應用交互體驗 。
下面是開發者應用集成AR Engine人體姿態識別能力的具體步驟 。
開發步驟開發環境要求:
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對應的最大值 。
開發準備
  1. 在開發應用前需要在華為開發者聯盟網站上注冊成為開發者并完成實名認證,具體方法請參見帳號注冊認證 。
  2. 華為提供了Maven倉集成方式的AR Engine SDK包,在開始開發前 , 需要將AR Engine SDK集成到您的開發環境中 。
  3. Android Studio的代碼庫配置在Gradle插件7.0以下版本、7.0版本和7.1及以上版本有所不同 。請根據您當前的Gradle插件版本 , 選擇對應的配置過程 。
  4. 以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/" }}}}
  1. 添加依賴 在“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) 。
3.調用ARBodyTrackingConfig接口,初始化人體跟蹤場景 。
mArSession = new ARSession(context)ARBodyTrackingConfig config = new ARHandTrackingConfig(mArSession);Config.setEnableItem(ARConfigBase.ENABLE_DEPTH | ARConfigBase.ENABLE.MASK);配置session信息mArSession.configure(config);4.初始化BodyRelatedDisplay接口,用于渲染主體AR類型相關數據 。
Public interface BodyRelatedDisplay{Void init();Void onDrawFrame(Collection<ARBody> bodies,float[] projectionMatrix);}
  1. 初始化BodyRenderManager類,此類渲染AREngine獲取的個人數據 。
Public class BodyRenderManager implements GLSurfaceView.Renderer{//實現onDrawFrame方法Public void onDrawFrame(){ARFrame frame = mSession.update();ARCamera camera = Frame.getCramera();//獲取AR相機的投影矩陣 。Camera.getProjectionMatrix();//獲取所有指定類型的可跟蹤對像集合,傳入ARBody.class, 用于人體骨骼跟蹤時返回跟蹤結果Collection<ARBody> bodies = mSession.getAllTrackbles(ARBody.class);}}

推薦閱讀