关于android: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);

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

理解更多详情>>

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

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理