关于android:AR手势识别交互让应用更加得心应手

12次阅读

共计 3829 个字符,预计需要花费 10 分钟才能阅读完成。

现如今,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 最新技术资讯~

正文完
 0