当前位置: 首页 > news >正文

鸿蒙开发-想做AR应用?AR Engine从零开始

想做一个 AR 应用?先搞懂 AR Engine 的基本能力

你有没有玩过那种"把虚拟家具放到真实房间里"的 APP?或者那种"对着杂志封面弹出 3D 动画"的效果?这些都叫 AR——增强现实(Augmented Reality),就是在真实世界的画面上叠加虚拟内容。

在 HarmonyOS 里,AR 能力由AR Engine提供。今天我们来看看它的基本用法:怎么初始化 AR 会话、怎么做平面识别、怎么管理 AR 场景。

下面是 AR 应用的完整生命周期流程:

不支持

支持

权限拒绝

权限授予

失败

成功

检查设备是否支持 AR

提示用户

申请相机/陀螺仪/加速度计权限

提示需要权限

创建 ARViewContext

context.init 初始化

处理错误码

使用 ARView 组件显示画面

页面切换时 pause/resume

页面销毁时 context.destroy

AR Engine 能做什么?

AR Engine 提供了多种 AR 特性,通过ARFeatureType枚举来选择:

特性说明典型用途
SLAM运动跟踪 + 平面识别把虚拟物体放在地上
DEPTH深度估计判断物体远近
MESH环境 Mesh 识别重建 3D 空间结构
IMAGE图像跟踪对着图片弹出 3D 内容
SEMANTIC_DENSE高精几何重建精确的 3D 建模
SEMANTIC平面及物体语义识别地面、墙面、天花板
FACE人脸识别与跟踪AR 贴纸、换脸
BODY人体骨骼点识别体感游戏、动作捕捉

今天我们重点讲最基础也最常用的:SLAM(运动跟踪 + 平面识别)

权限要求

AR Engine 需要三个权限:

  • ohos.permission.CAMERA:相机权限(AR 需要摄像头画面)
  • ohos.permission.GYROSCOPE:陀螺仪权限(感知手机朝向)
  • ohos.permission.ACCELEROMETER:加速度计权限(感知手机移动)

记得在module.json5里声明这些权限。

初始化 AR 场景

AR Engine 的使用流程是:创建 ARViewContext → 初始化 → 使用 → 暂停/恢复 → 销毁。

import{arViewController}from'@kit.AREngine';import{BusinessError}from'@kit.BasicServicesKit';// 创建 ARView 上下文letcontext:arViewController.ARViewContext=newarViewController.ARViewContext();// 初始化(异步操作)awaitcontext.init();

init()会做这些事情:

  1. 初始化 AR 会话(Session)
  2. 设置 AR 渲染场景
  3. 打开相机
  4. 开始运动跟踪

如果初始化失败,会抛出错误码。常见的错误:

  • 201:权限未授予
  • 801:设备不兼容(不是所有设备都支持 AR)
  • 1009200010:相机不可用(可能被其他 APP 占用了)
  • 1009200007:配置不支持

检查设备是否支持 AR

在初始化之前,建议先检查设备是否支持:

letsupported=arViewController.isARTypeSupported(arEngine.ARFeatureType.ARENGINE_FEATURE_TYPE_SLAM);if(!supported){console.info('This device does not support AR SLAM');return;}

暂停和恢复

AR 应用在切到后台时,应该暂停相机跟踪和场景渲染,节省资源:

// 暂停context.pause();// 恢复context.resume();

一般在页面的onPageHide生命周期里调用pause(),在onPageShow里调用resume()

销毁

退出 AR 页面时,记得销毁上下文,释放资源:

awaitcontext.destroy();

这会销毁 AR 会话和渲染场景,关闭相机。如果不销毁,相机可能会一直被占用,其他 APP 就用不了相机了。

ARView 组件

AR Engine 提供了一个ARView组件,用来显示 AR 画面。你可以在 ArkUI 页面里直接使用:

import{arEngine,arViewController}from'@kit.AREngine';@Entry@Componentstruct ARPage{privatecontext:arViewController.ARViewContext=newarViewController.ARViewContext();asyncaboutToAppear(){awaitthis.context.init();}aboutToDisappear(){this.context.destroy();}build(){Column(){arEngine.ARView({arViewContext:this.context}).width('100%').height('100%')}}}

ARView组件会显示相机的实时画面,并在上面叠加 AR 内容。

SLAM:运动跟踪 + 平面识别

SLAM(Simultaneous Localization and Mapping,即时定位与地图构建)是 AR 的核心技术。下面是 SLAM 的工作流程:

水平面

垂直面

摄像头采集画面

传感器获取运动数据

SLAM 算法融合视觉+惯性数据

运动跟踪: 计算手机位姿

平面识别: 分析画面中的平面

输出相机位置和朝向

识别到平面?

地面/桌面

墙壁

在平面上放置虚拟物体

SLAM(Simultaneous Localization and Mapping,即时定位与地图构建)是 AR 的核心技术。它做的事情是:

  1. 运动跟踪:通过摄像头画面和传感器数据,实时计算手机在 3D 空间中的位置和朝向。
  2. 平面识别:分析摄像头画面,找到现实世界中的水平面(比如地面、桌面)和垂直面(比如墙壁)。

有了平面识别,你就可以把虚拟物体"放"在真实的平面上。比如用户对准地面,APP 识别出这是一个水平面,然后用户点击屏幕,就在那个位置放一个虚拟的椅子。

图像跟踪(IMAGE 特性)

图像跟踪是另一个常用功能——让 AR Engine 识别特定的图片,然后在图片上方叠加 3D 内容。

添加参考图片

首先,你需要告诉 AR Engine “要跟踪哪些图片”:

// 添加图片到跟踪列表// AR Engine 最多支持 50 张参考图片

图片的质量会影响识别效果。AR Engine 会从三个维度评价图片质量:

宽高比(越接近 1:1 越好):

  • 1.0-1.5:Excellent
  • 1.5-2.0:Good
  • 2.0-2.5:Fit
  • 2.5+:不推荐

分辨率(以 640x480 为基准):

  • 0.9+:Excellent
  • 0.7-0.9:Good
  • 0.45-0.7:Fit
  • 0.35-0.45:Unfit
  • 0.2 以下:不推荐

图像内容

  • 颜色单一的图片(比如纯色)识别效果差
  • 有丰富纹理和细节的图片识别效果好
  • 有反光、光斑的图片可能识别失败

添加模式

// NORMAL 模式:超过 50 张就报错// UPDATE 模式:超过 50 张自动删除最旧的

人脸相关能力

AR Engine 还提供了丰富的人脸相关能力:

人脸关键点(LandmarkType)

  • 左眼、右眼
  • 鼻尖
  • 嘴巴左侧、右侧
  • 人脸中心

微表情(ARBlendShapeType)

  • 闭左眼/闭右眼
  • 瞪大眼
  • 嘴巴张开/闭合
  • 微笑/皱眉
  • 等等……

这些能力可以用来做 AR 贴纸——比如给用户脸上加一个猫耳朵,或者根据嘴巴张合来触发动画。

完整示例:一个基础 AR 页面

import{arEngine,arViewController}from'@kit.AREngine';import{BusinessError}from'@kit.BasicServicesKit';@Entry@Componentstruct ARPage{privatecontext:arViewController.ARViewContext=newarViewController.ARViewContext();@StateinitStatus:string='初始化中...';asyncaboutToAppear(){// 检查设备是否支持letsupported=arViewController.isARTypeSupported(arEngine.ARFeatureType.ARENGINE_FEATURE_TYPE_SLAM);if(!supported){this.initStatus='设备不支持 AR';return;}try{awaitthis.context.init();this.initStatus='AR 初始化成功';}catch(err){leterror=errasBusinessError;this.initStatus=`初始化失败:${error.code}-${error.message}`;}}aboutToDisappear(){this.context.destroy();}build(){Column(){Text(this.initStatus).fontSize(18).margin(20)arEngine.ARView({arViewContext:this.context}).width('100%').layoutWeight(1)}.width('100%').height('100%')}}

这个页面会:

  1. 检查设备是否支持 SLAM
  2. 初始化 AR 上下文
  3. 显示 AR 相机画面
  4. 页面销毁时自动清理资源

注意事项

1. 设备兼容性

不是所有设备都支持 AR。ARView组件在部分 Phone、部分 Tablet、TV 上可用,在不支持的设备上调用会返回 801 错误码。一定要先用isARTypeSupported检查。

2. 权限

AR 需要相机、陀螺仪、加速度计三个权限。如果用户拒绝了任何一个,初始化会失败(错误码 201)。

3. 资源管理

AR 会占用相机和传感器资源。不用的时候一定要pause()destroy(),否则相机可能被一直占用。

4. 线程安全

AR Engine 的回调可能在不同的线程里,更新 UI 时要注意线程切换。

小结

AR Engine 的基本使用流程:

  1. isARTypeSupported— 检查设备是否支持
  2. new ARViewContext()— 创建上下文
  3. context.init()— 初始化(需要权限)
  4. 在页面里使用arEngine.ARView组件显示 AR 画面
  5. context.pause()/context.resume()— 暂停/恢复
  6. context.destroy()— 销毁释放资源

下一篇我们深入看看 AR Engine 的高级能力——图像跟踪、深度估计、Mesh 识别。

http://www.cnnetsun.cn/news/2734820.html

相关文章:

  • OpenRocket终极指南:从零开始设计你的第一枚火箭
  • 终极指南:如何用Mac Mouse Fix让10美元鼠标超越苹果触控板
  • 等几何法在典型结构力学分析中的有效性解析方案【附代码】
  • Boss Show Time技术解析:基于Chrome扩展的招聘时间可视化解决方案
  • GIMP Resynthesizer:如何免费实现专业级图像修复与纹理合成?
  • 自适应分布式协同控制系统:新一代电力配电网智能电压调控平台
  • AI图像质量评估:让计算机拥有艺术家的眼睛和工程师的严谨
  • OpenCore Legacy Patcher:让旧款Mac焕发新生的技术方案
  • 从直觉到数据:构建高效What-happens-if决策分析框架
  • 3种超简单方案:在Windows系统上部署Czkawka重复文件清理工具
  • 如何专业测量Xbox 360控制器延迟与采样率?XInputTest深度技术解析
  • 13ft Ladder终极指南:3分钟自建付费墙绕过工具,免费阅读任何付费内容
  • 【RT-DETR实战】128、模型可解释性:当RT-DETR突然“失明”时我们如何破案
  • Topit:专业高效的Mac窗口置顶工具完整指南
  • 如何用UAV Log Viewer轻松分析无人机飞行数据:完整免费指南
  • 别再死磕RNN了!用Python手把手教你搭建一个简单的回声状态网络(ESN)来预测时间序列
  • Python通达信数据接口终极指南:3步快速获取免费A股行情数据
  • dm-ticket抢票系统终极指南:Rust技术栈下的高性能自动购票方案
  • 如何用Vosk API快速构建离线语音识别应用:终极免费指南
  • 如何用AntiMicroX解锁PC游戏手柄全兼容:5步终极指南
  • 现代色彩空间技术深度解析:从传统标准到新一代解决方案
  • 音频相关基础知识2
  • 基于Arduino的老年人反应能力训练器:低成本DIY康复设备制作指南
  • Paperxie 期刊论文创作全解:分档选型 + 定向生成,打通从初稿到投稿的科研落地路径
  • 【Git】-- Git基本操作
  • AI智能体开发流程
  • AI英语口语助手APP的开发
  • 制造业现场用的SPC能力分析小工具:一键算CPK/PPK,自动生成带规格线的直方图
  • 告别DLL错误:VisualCppRedist AIO全合一运行库终极解决方案
  • 用DeblurGAN-v2拯救你的模糊照片:从手机快照到专业摄影,保姆级实战教程