用AR Engine手部骨骼跟蹤能力實現虛擬手錶試戴

来源:https://www.cnblogs.com/hmscore/archive/2022/09/28/16736815.html
-Advertisement-
Play Games

AR技術的落地應用,推動著電商領域的不斷升級,通過增強現實為用戶帶來了虛擬與現實結合的AR購物體驗。如AR試衣、AR試鞋、AR試妝等功能的出現讓用戶在手機上就能體驗產品的佩戴效果,可以讓用戶更直觀、更真實的瞭解產品信息,提升消費者的購物愉悅感,幫助電商應用提高購物轉化率。華為AR Engine也為A ...


AR技術的落地應用,推動著電商領域的不斷升級,通過增強現實為用戶帶來了虛擬與現實結合的AR購物體驗。如AR試衣、AR試鞋、AR試妝等功能的出現讓用戶在手機上就能體驗產品的佩戴效果,可以讓用戶更直觀、更真實的瞭解產品信息,提升消費者的購物愉悅感,幫助電商應用提高購物轉化率。華為AR Engine也為AR購物提供了實現方案,使用手部跟蹤能力即可實現虛擬手錶試戴。

效果展示

實現方法

AR Engine提供手部骨骼跟蹤能力,可以識別跟蹤21個手部關節點的位置和姿態,形成手部骨骼模型。通過手勢識別能力,可以給AR應用提供交互功能並實現一些趣味玩法,比如可以將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對應的最大值。

開發準備

  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)。

調用ARHandTrackingConfig介面,初始化手部識別。

mArSession = new ARSession(context);
ARHandTrackingConfig config = new ARHandTrackingconfig(mArSession);
  1. 獲取到ARhandTrackingconfig後,可以設置使用相機的前置或者後置等等一些可選的方法:
Config.setCameraLensFacing(ARConfigBase.CameraLensFacing.FRONT);
  1. 你需要把你獲取到的手部識別獲取到的config配置到ArSession中,然後啟動手部識別場景:
mArSession.configure(config);
mArSession.resume();
  1. 初始化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,…);

}
}
  1. 初始化HandRenderManager類,此類是來渲染從HUAWEI AREngine獲取的數據
Public class HandRenderManager implements GLSurfaceView.Renderer{
	
	//設置ARSession對象,用於獲取onDrawFrame方法中的最新數據。
	Public void setArSession(){
	}
}
  1. 在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);

具體實現可參考示例代碼

瞭解更多詳情>>

訪問華為開發者聯盟官網
獲取開髮指導文檔
華為移動服務開源倉庫地址:GitHubGitee

關註我們,第一時間瞭解 HMS Core 最新技術資訊~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Haproxy haproxy簡介 HAProxy是一個使用C語言編寫的自由及開放源代碼軟體,其提供高可用性、負載均衡,以及基於TCP和HTTP的應用程式代理。 HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行在當前的硬體上,完全可以支持數以 ...
  • 一. 題目: 給如下兩個表,寫一個查詢語句,求出在每一個工資發放日,每個部門的平均工資與公司的平均工資的比較結果 (高 / 低 / 相同)。 工資表:salary | id | employee_id | amount | pay_date | | | | | | | 1 | 1 | 9000 | ...
  • 設置全局 set global collation_connection = utf8mb4_general_ci 設置會話級別 1.配置文件方式,給每個新的連接配置 [mysqld] init-connect='SET NAMES utf8mb4 COLLATE utf8mb4_general_c ...
  • 今天我們來和大家聊一聊一個新話題,一個對於企業業務發展十分關鍵的東西——指標。 指標建設是衡量企業業務效果的主要依據,本文結合自身實踐經驗和大家分享指標的設計與加工過程,講述其基礎概念和設計加工方法,以及設計加工過程中的註意點,希望對感興趣的同學有所幫助。 一、指標建設的必要性 1、什麼是指標 指標 ...
  • 作為國民經濟的命脈和樞紐,金融行業對底層資料庫的能力要求正在不斷提高。在眾多要求中,數據一致性無疑是重中之重,即數據不能出錯,最好還能提高併發效率。 TDSQL採用MC(輕量級GTM)+全局MVCC的全局讀一致性方案。如果只使用全局事務管理器GTM,除需維護全局序列外,還需要維護全局的事務衝突,這個 ...
  • 分析:給 reader 表添加數據. INSERT INTO:插入數據,插入數據的時候會檢查主鍵或者唯一索引,如果出現重覆就會報錯; 語法:INSERT INTO table_name VALUES (value1,value2,value3,...); --這種形式無需指定要插入數據的列名,只需提 ...
  • 整理下近期被 Apple 殘忍虐待的成果。 ps: 可以提供一個視頻鏈接,建議用微軟的OneDrive 。審核員方便點。國內那些個地址都需要登錄,需要登錄才能看視頻的場景,同樣會被拒 Guideline 1.1 - Safety - Objectionable Content Guideline 1 ...
  • 眾所周知,在開發蘋果應用時需要使用簽名(證書)才能進行打包安裝蘋果IPA,作為剛接觸ios開發的同學,只是學習ios app開發內測,並沒有上架appstore需求,對於蘋果開發者賬號認證需要支付688,真的是極大的浪費,使用appuploader,只需要註冊蘋果普通的賬號,不需要688認證,就可以 ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...