AR手势识别交互,让应用更加“得心应手”

ar,手势,识别,交互,应用,更加,得心应手 · 浏览次数 : 494

小编点评

**应用如何实现更自然的人机交互呢?** 华为 HMS Core AR Engine 提供多种特定手势的识别功能,用于实现更自然的人机交互。以下是应用如何实现更自然的人机交互的一些具体方式: 1. **手势识别:**通过摄像头识别用户手势,并将识别结果与手势类别结果和坐标信息输出。 2. **手部跟踪:**利用手部骨骼识别技术,将虚拟物体叠加到用户的手部位置,并根据不同的手势变化来激活某些状态的切换。 3. **虚拟物体叠加:**通过手势识别,开发者可以将虚拟物体叠加到任何想要位置,例如手指尖、手掌心等。 4. **手部骨骼驱动:**利用手部骨骼,能驱动虚拟手做出更为丰富和精细的动作,给开发者们的AR应用提供增强的交互功能和难以置信的新奇玩法。 **其他技术:** * **人脸识别:**与手势识别相结合,可以实现更自然的人机交互。 * **人体跟踪:**可以追踪用户的身体部位,为虚拟物体提供更自然的交互体验。 **集成步骤:** 1. 注册成为华为开发者并完成实名认证。 2. 下载 AR Engine 服务端 APK。 3. 在 Android Studio 中配置 HMS Core SDK。 4. 添加依赖并配置 HMS Core SDK。 5. 初始化 AR场景并设置渲染器。

正文

现如今, 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手势识别交互,让应用更加“得心应手”相似的内容:

AR手势识别交互,让应用更加“得心应手”

现如今, AR技术不断发展,人们不再满足于运用键盘、鼠标等简单器械来实现传统的人机交互模式。随着用户接触机器的多样化,繁琐的操作不但对一些用户有门槛,而且还增加其学习成本;如果能用自然且符合日常生活习惯的人机交互模式,不仅更好上手,也能让开发者们在应用内开发更多玩法。比如在视频直播或者拍照过程中,一

AR人体姿态识别,实现无边界的人机交互

近年来,AR不断发展,作为一种增强现实技术,给用户带来了虚拟和现实世界的融合体验。但用户已经不满足于单纯地将某件虚拟物品放在现实场景中来感受AR技术,更想用身体姿势来触发某个指令,达到更具真实感的人机交互功能。 比如在AR体感游戏中,用户不必点击按键进行频繁操作,通过某个姿势即可触发;在拍摄短视频时

AR空间音频能力,打造沉浸式声音体验

随着元宇宙的兴起,3D虚拟现实广泛引用,让数字化信息和现实世界融合,目前大家的目光主要聚焦于视觉交互层面,为了在虚拟环境中更好的再现真实世界的三维空间体验,引入听觉层面必不可少,空间音频孕育而生。 空间音频是一种音频体验,会让用户更容易体验到声音的立体感和深度,将环绕声更准确地定位在合适的方位,让用

AR Engine光照估计能力,让虚拟物体在现实世界更具真实感

AR是一项现实增强技术,即在视觉层面上实现虚拟物体和现实世界的深度融合,打造沉浸式AR交互体验。而想要增强虚拟物体与现实世界的融合效果,光照估计则是关键能力之一。 人们所看到的世界外观,都是由光和物质相互作用而决定的,当光源照射到物体上时,光线通过被吸收、反射和透射等方式,传递给人们物体的颜色、亮度

AR Engine毫秒级平面检测,带来更准确的呈现效果

近年来,AR版块成为时下大热,这是一种将现实环境中不存在的虚拟物体融合到真实环境里的技术,用户借助显示设备可以拥有真实的感官体验。AR的应用场景十分广泛,涉及娱乐、社交、广告、购物、教育等领域:AR可以让游戏更具互动性;商品通过AR展示更真实;使用AR进行教育教学让抽象事物更形象等,可以说AR技术已

如何在现实场景中随心放置AR虚拟对象?

随着AR的发展和电子设备的普及,人们在生活中使用AR技术的门槛降低,比如对于不方便测量的物体使用AR测量,方便又准确;遇到陌生的路段使用AR导航,清楚又便捷;网购时拿不准的物品使用AR购物,体验更逼真。 想要让虚拟物体和现实世界相融合,重要的一步就是将虚拟对象准确放置在现实场景中,当用户触摸电子屏幕

ARKit的理解与使用

AR概述 AR的意义:让虚拟世界套与现实世界建立联系,并可以进行互动。 AR的技术实现:通过实时地计算摄影机输出影像的位置及角度,并在内部通过算法识别将场景中的事物,然后在内部模拟的三维坐标系中给识别到的事物建立坐标,然后在特定的坐标上添加相应的图像、视频、3D模型,最终通过手机屏幕合成一个AR效果

如何让虚拟角色自然融入现实?

随着AR的发展,虚拟角色被广泛应用在游戏、直播、社交等App中。例如在直播App里,商家可以自由打造虚拟主播的形象,通过AR算法可以让虚拟形象在介绍时做到不遮挡实物商品,提升直播真实性和趣味性。那么,如何让虚拟角色自然融入现实,实现与用户的真实交互呢? 华为HMS Core AR Engine提供单

[转帖]50年来Intel CPU变化有多大?频率从0.75MHz提升到5.2GHz

https://m.baidu.com/bh/m/detail/ar_9297450181050583423?data_from=lemon 今天(11月15日)是Intel推出4004处理器50周年的日子,当初为日本计算器客户开发的芯片成为全球首个微处理器,并且改变了Intel的发展,从当初的内存

在原生APP中集成Unity容器

随着技术的发展,越来越多的APP期望拥有3D,AR的能力。要达到这个目标可以选择使用原生开发,也可以使用Unity成熟的3D开发技术链,通过嵌入的方式将Unity容器嵌入到APP中。这里介绍的是通过嵌入Unity容器的方式来实现APP的3D,AR能力的。 Unity集成到iOS应用的本质是将Unit