用AR Engine手部骨骼跟踪能力实现虚拟手表试戴

AR技术的落地应用,推动着电商领域的不断升级 , 通过增强现实为用户带来了虚拟与现实结合的AR购物体验 。如AR试衣、AR试鞋、AR试妆等功能的出现让用户在手机上就能体验产品的佩戴效果,可以让用户更直观、更真实的了解产品信息,提升消费者的购物愉悦感,帮助电商应用提高购物转化率 。华为AR Engine也为AR购物提供了实现方案,使用手部跟踪能力即可实现虚拟手表试戴 。
效果展示

用AR Engine手部骨骼跟踪能力实现虚拟手表试戴

文章插图
实现方法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仓地址 。
【用AR Engine手部骨骼跟踪能力实现虚拟手表试戴】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 , 如主动跳转应用市?。肭蟀沧癆R 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,…);}}

推荐阅读