写点什么

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

作者:HMS Core
  • 2023-02-06
    贵州
  • 本文字数:2409 字

    阅读完需:约 8 分钟

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


为了让人们产生强烈的视觉真实感,AR 首先要解决的问题就是如何将虚拟对象准确地融合到现实世界中,即让虚拟对象以正确的姿态显示在真实场景的正确位置上。一些 AR 方案完成环境识别与摄像机位姿计算之后,没有进行平面检测就直接叠加虚拟对象显示,导致虚拟对象与真实环境没有很好的贴合度,用户容易产生视觉错位,影响虚拟对象在现实中的呈现效果。因此,如何在不同的真实环境中准确检测出水平或垂直平面,与放置虚拟对象位置的平面保持一致,是用户与 AR 进行交互的重要一步。


华为 HMS Core AR Engine跟踪设备周围的光照、平面、图像、物体、环境表面等环境信息,辅助开发者们的应用实现虚拟物体以场景化的方式逼真地融入现实物理世界。其中平面检测能力可识别到水平和垂直平面(地面或墙面)上的成群特征点,并可识别到平面的边界,开发者们的应用可使用这些平面来放置需要的虚拟物体。

Demo

功能特点

支持识别水平平面、垂直平面识别


准确度 2.5cm@1m


识别正常纹理速度<1s


支持多边形拟合和平面合并

开发步骤

开发环境要求:

JDK 1.8.211 及以上。


安装 Android Studio 3.0 及以上:


minSdkVersion 26 及以上


targetSdkVersion 29(推荐)


compileSdkVersion 29(推荐)


Gradle 6.1.1 及以上(推荐)


在华为终端设备上的应用市场下载 AR Engine 服务端 APK(需在华为应用市场,搜索“华为 AR Engine”)并安装到终端设备。


测试应用的设备:参见AREngine特性软硬件依赖表中环境 Mesh 支持设备列表。如果同时使用多个 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. 首先创建 WorldActivity,这个 Activity 介绍如何使用 HUAWEI AR Engine 的世界 AR 场景。


Public class WorldActivity extends BaseActivity{Protected void onCreate(Bundle saveInstanceState){   初始化DisplayRotationManager   mDisplayRotationManager = new DisplayRotationManager(this);   初始化WorldRenderManager     mWorldRenderManager = new WorldRenderManager(this,this);}  //写一个手势处理器  Private void initGestureDetector(){mGestureDetector = new GestureDetector(this,new GestureDetector.SimpleOnGestureListener()){    }  }  mSurfaceView.setOnTouchListener(new View.OnTouchListener()){    public Boolean onTouch(View v,MotionEvent event){      return mGestureDetector.onTouchEvent(event);    }  }  //在onResume生命周期中创建ARWorldTrackingConfig  protected void onResume(){    mArSession = new ARSession(this.getApplicationContext());    mConfig = new ARWorldTrackingConfig(mArSession);}//创建刷新配置类private void refreshConfig(int lightingMode){  //设置对焦  mConfig.setFocusMode(ARConfigBase.FocusMode.AUTO_FOCUS);  mArSession.configure(mConfig);}}
复制代码


  1. 创建 WorldRenderManager 类,该类提供与世界场景相关的渲染管理,包括标签渲染和虚拟对象渲染管理。


public class WorldRenderManager implements GLSurfaceView.Renderr{  //需要创建一个绘制框架的类  Public void onDrawFrame(GL10 unused){    //设置可用于存储相机预览流数据的openGL textureIdmSession.setCameraTextureName(mTextureDisplay.getExternalTextureId());//更新AR Engine的计算结果,应用应在需要获取最新的数据时调用此接口ARFrame arFrame = mSession.update();//获取当前帧的相机参数。ARCamera arCamera = arFrame.getCamera();//返回一个坐标运算相关的投影矩阵,可用于相机坐标系到裁剪坐标系转换。arCamera.getProjectionMatrix(projectionMatrix, PROJ_MATRIX_OFFSET, PROJ_MATRIX_NEAR, PROJ_MATRIX_FAR);Session.getAllTrackables(ARPlane.class)…..  }}
复制代码


  1. 创建 VirtualObject 类,该类提供虚拟对象的属性以及与虚拟对象渲染相关的必要方法。


Public class VirtualObject{}
复制代码


  1. 创建 ObjectDisplay 类,根据指定的参数绘制虚拟对象。


Public class ObjectDisplay{}
复制代码


了解更多详情>>


访问华为开发者联盟官网


获取开发指导文档


华为移动服务开源仓库地址:GitHubGitee


关注我们,第一时间了解 HMS Core 最新技术资讯~

用户头像

HMS Core

关注

HMS Core技术团队。 2022-06-16 加入

分享最新的技术干货,带来最全的能力应用场景,更新热门开发者圈子活动。与开发者一起,同成长,共精彩。

评论

发布
暂无评论
AR Engine毫秒级平面检测,带来更准确的呈现效果_HMS Core_HMS Core_InfoQ写作社区