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对应的最大值。
开发筹备
- 在开发利用前须要在华为开发者联盟网站上注册成为开发者并实现实名认证,具体方法请参见帐号注册认证。
- 华为提供了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 最新技术资讯~