现如今, AR技术不断发展,人们不再满足于运用键盘、鼠标等简单器械来实现传统的人机交互模式。随着用户接触机器的多样化,繁琐的操作不但对一些用户有门槛,而且还增加其学习成本;如果能用自然且符合日常生活习惯的人机交互模式,不仅更好上手,也能让开发者们在应用内开发更多玩法。比如在视频直播或者拍照过程中,一个手势就能增加相应的贴纸或特效,丰富交互体验;面对智能家电等硬件设备时,通过不同的手势可以控制对应的功能。

那么,应用如何才能实现更自然的人机和交互呢?

华为HMS Core AR Engine提供多种特定手势的识别,输出识别到的手势类别结果并给出手掌检测框屏幕坐标,左手和右手均可支持。当图像中出现多只手时,只反馈单手(最清晰且置信度最高)识别结果和坐标信息。支持前后置相机切换。

通过手势识别能力,可将虚拟物体叠加到人的手部位置,并根据不同的手势变化来激活某些状态的切换,给开发者的AR应用提供基础的交互功能。

不仅如此,AR Engine的手部跟踪功能能识别和跟踪21个手部关节点的位置和姿态,形成手部骨骼模型,并可分辨左右手,同时提供单手关节点和骨骼识别能力,输出手指端点、手部骨骼等手部高级特征。

通过手部骨骼识别能力,开发者们可将虚拟物体叠加到更为精确的手部位置,例如手指尖、手掌心等;利用手部骨骼,能驱动虚拟手做出更为丰富和精细的动作,给开发者们的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 最新技术资讯~

AR手势识别交互,让应用更加“得心应手”的更多相关文章

  1. Pokémon Go呼应设计:让全世界玩家疯狂沉迷

    引言:什么样的呼应设计会让移动游戏玩家沉迷?那必须为玩家构建一个属于玩家本人或者被玩家认可的虚拟环境,或者说是被玩家认可的虚拟世界.在移动游戏时代,想要做到这一点并不容易.但Pokémon Go却做到 ...

  2. Pok&#233;mon Go呼应设计:让全世界玩家疯狂沉迷

    引言:什么样的呼应设计会让移动游戏玩家沉迷?那必须为玩家构建一个属于玩家本人或者被玩家认可的虚拟环境.或者说是被玩家认可的虚拟世界.在移动游戏时代.想要做到这一点并不easy.但Pokémon Go却 ...

  3. 3D视觉基础(基本原理及3D传感器基本参数)

    本人所在行业属于3D视觉方向,因此最近也是学习了很多3D视觉的知识,这次专门总结一下. 传统工业机器视觉中,2D指的是X方向加Y方向,那么3D视觉自然就是加了一个Z方向.目前我接触到的公司产品是3D激 ...

  4. HMS Core AR Engine 2D图片/3D物体跟踪技术 助力打造更智能AR交互体验

    AR技术已经被广泛应用于营销.教育.游戏.展览等场景.通过2D图像跟踪技术和3D物体跟踪技术,用户只需使用一台手机进行拍摄,即可实现海报.卡牌等平面物体以及文物.手办等立体物体的AR效果.尽管近年来2 ...

  5. VR与AR的发展趋势分析

    概要 你是否想象过与神秘的深海生物近距离接触?你是否梦想过穿戴钢铁侠那样的超先进科技装备成为超级英雄?你又是否幻想过与梦中的女神面对面的交流?这些可能在以前都只能是存在于脑海中的幻想,可是在如今有一项 ...

  6. 虚拟现实,增强现实,VR,AR

    现在的热点不止VR,还有AR和披着MR.HR.CR外衣的各种高级AR们,所以比较着一起说.以下知乎上一网友观点,放几条结论:1.近期(未来两三年)看,VR能火,AR尚待成熟: 2.VR设备中,插片式是 ...

  7. AR中的SLAM(二)

    写在前面 本文想讨论一下AR的架构和SLAM在其中的作用. AR AR的框架可以简单划分为感知和交互两部分. 感知部分主要负责信息的收集和处理.信息主要通过不同的传感器收集,包括图像.设备加速度.距离 ...

  8. AR中的SLAM(一)

    写在前面 本系列打算讲讲个人对AR行业和AR中的SLAM算法的一点浅显的看法.才疏学浅,文中必然有很多疏漏和不足,还望能和大家多多讨论.今天先讲讲我对AR的一些认识. AR的一点理解 AR是什么 AR ...

  9. 爆款AR游戏如何打造?网易杨鹏以《悠梦》为例详解前沿技术

    本文来自网易云社区. 7月31日,2018云创大会游戏论坛在杭州国际博览中心103B圆满举行.本场游戏论坛聚焦探讨了可能对游戏行业发展有重大推动的新技术.新实践,如AR.区块链.安全.大数据等. 网易 ...

  10. 对话|首席研究员童欣:从长远看,AR的应用范围远比VR广泛

    ​童欣博士现任微软亚洲研究院网络图形组首席研究员.1993年毕业于浙江大学计算机系,获工学学士学位:1996年获浙江大学计算机系硕士学位:1999年获清华大学计算机系博士学位,同年加入微软亚洲研究院. ...

随机推荐

  1. docker_NG部署前端总结

    Dockerfile 写法 FROM nginx MAINTAINER gradyjiang "jiangzhongjin@hotmail.com" ENV LANG C.UTF- ...

  2. GreatSQL vs MySQL性能测试来了,速围观~

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 1.结论先行 无论ibp(innodb_buffer ...

  3. 微信小程序-坑,wxml里wx:if 判断 数字 是否在一个数组中。

    <view wx:if="{{item.index}} in {{vote_list}}"> 已赞 <image src="/static/zan_y. ...

  4. 【项目实战】Kaggle泰坦尼克号的幸存者预测

    前言 这是学习视频中留下来的一个作业,我决定根据大佬的步骤来一步一步完成整个项目,项目的下载地址如下:https://www.kaggle.com/c/titanic/data 大佬的传送门:http ...

  5. Kubernetes DevOps: Jenkins Pipeline (流水线)

    要实现在 Jenkins 中的构建工作,可以有多种方式,我们这里采用比较常用的 Pipeline 这种方式.Pipeline,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于 ...

  6. 类似-Xms、-Xmn这些参数的含义

    答: 堆内存分配: JVM初始分配的内存由-Xms指定,默认是物理内存的1/64 JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4 默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的 ...

  7. Fluentd部署详解

    Fluentd系统配置项 https://www.cnblogs.com/sanduzxcvbnm/p/13920972.html Fluentd自身日志 https://www.cnblogs.co ...

  8. 1- Mac和Linux远程连接服务器异常修复(WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!)

    p.p1 { margin: 0; font: 11px Menlo; color: rgba(0, 0, 0, 1) } span.s1 { font-variant-ligatures: no-c ...

  9. 在项目中自定义集成IdentityService4

    OAuth2.0协议 在开始之前呢,需要我们对一些认证授权协议有一定的了解. OAuth 2.0 的一个简单解释 http://www.ruanyifeng.com/blog/2019/04/oaut ...

  10. 改善C#程序的方法-2 使用TryParse

    一 使用TryParse,而不是Parse 除string外的所有基元类型,都有两个将string类型转型为其本身类型的方法:Parse 和 TryParse. 以double类型为例,这两个方法最简 ...