乐趣区

关于android:用AR-Engine手部骨骼跟踪能力实现虚拟手表试戴

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

具体实现可参考示例代码。

理解更多详情 >>

拜访华为开发者联盟官网
获取开发领导文档
华为挪动服务开源仓库地址:GitHub、Gitee

关注咱们,第一工夫理解 HMS Core 最新技术资讯~

退出移动版