最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

网易戏精 ARCore 短视频新玩法实践

  • 2019-01-24
  • 本文字数:3563 字

    阅读完需:约 12 分钟

网易戏精ARCore短视频新玩法实践

《网易戏精》是网易人工智能事业部旗下一款 AI 短视频产品,用户可以随手拍出自己的特效视频,其中包含数十个有趣的奇幻道具,其中放置类的道具只需要扫一下平面,即可摆放进现实世界中进行互动,既有充满霓虹灯的旺角街头、会随音乐抖动的 DJ 打碟台、迪厅球,也有烟雾缭绕的迷幻场景等等。



(会随音乐抖动的 DJ 打碟台)


此类放置类道具在安卓端基于 Google 的 ARCore 技术实现。本文整理归纳项目研发中 ARCore 的使用及研发历程,与大家一起分享在 AR 应用开发中遇到的问题及实践。主要分为以下几个方面,已有相关经验的 ARCore 开发者可以选择性跳过。


  1. ARCore 简述

  2. ARCore 原理的进一步理解

  3. ARCore 和 ARKit 的功能性对比

  4. ARCore API 架构梳理

  5. ARCore 的兼容性及解决方案

  6. 开发者可能会遇到的 Troubleshoot

ARCore 简述

ARCore SDK 主要由三大模块构成:运动跟踪、环境理解、光照估计。


  1. 运动跟踪可以让手机理解和跟踪它相对于现实世界的位置。

  2. 环境理解让手机可以检测各类表面(例如地面、咖啡桌或墙壁等水平、垂直表面)的大小和位置。

  3. 光估计让手机可以估测环境当前的光照条件。


ARCore 原理的进一步理解

对 ARCore 底层原理的了解可以帮助我们了解计算的过程以及解决一些问题。


首先,ARCore 使用视觉惯性测距系统(Visual Inertial Odometry,简称 VIO)的算法来实现运动跟踪。VIO 将从设备的摄像机中识别图像特征与内部运动传感器结合起来,以获得设备的 6DOF(6 Degree Of Freedom,6 度自由度)信息。我们常说的 6DOF 指的是三维的位置与三维的旋转,而 3DOF 常指三维的旋转(直接通过陀螺仪即可获得,比起 6DOF 计算较为简单)。



  (上图即是 6DoF 的图示)


惯性测量单元(Inertial measurement unit,简称 IMU)的读数大约为 1000 次每秒并且是基于加速度的(用户的移动)。航迹推算法(Dead Reckoning)用于测量 IMU 读数之间的设备移动,但这种方法推算是一种估算,就像如果我让你向前走一步,然后猜测走了多远一样,此时会用航迹推算法来估计距离。但惯导系统中的误差会随时间累积,所以 IMU 帧率越长,惯导系统从视觉系统中复位后的时间越长,追踪位置距离真实位置偏差就越多。


视觉/光学测量使用的是摄像机来采集视觉信息,设备帧率通常为 30fps 并且依赖距离(不同的场景帧率也有所不同)。光学系统通常随着距离的增大误差也不断的增大(时间也会有轻度影响),所以用户运动得越远,误差就越大。


惯性导航系统与视觉测量系统各有各的优势和不足。并且视觉和惯性跟踪系统是基于完全不同的测量系统,他们之间并没有相互依赖,所以他们整合在一起可以互相弥补缺陷。这意味着可以盖住摄像机或者只看到一个具有很少光学特征的场景(比如白墙),而惯性系统照样可以正常工作,或者设备在完全静止的条件下,视觉系统可以呈现出一个比惯性系统更加稳定的姿态。在此之上这个算法使用卡尔曼滤波器不断地选择最佳姿态,从而实现稳定跟踪。


与 ARKit 的功能上的对比


为了尽可能保证 Android 用户和 iOS 用户的功能一致性,我们整理了 ARKit 和 ARCore 在各个版本上的功能。版本上需要注意的是,ARKit 的版本取决与手机的操作系统级别,ARCore 的运行版本取决于手机上安装的 ARCore Runtime Apk,Runtime 对 SDK 采取向下兼容机制,并且用户如首次安装 ARCore Runtime Apk 后,之后作为内核服务自动更新。


ARKitARCore
6DOF追踪支持(1.0)(iOS11)支持(1.0)
相机分辨率、自动对焦支持(1.5)(iOS11.3)支持(1.4)
图片扫描支持(1.5)(iOS11.3)支持(1.2)
云锚点支持(2.0)(iOS12)支持(1.2)

ARCore API 架构梳理

ARCore SDK 模块设计易于理解,开发者可以很简单地找到相应的 API,简单列了一张重要/常用 API 的对应概念:


Session: 负责整个 AR 算法的生命周期和算法配置文件选项,主要有 Start\Pause\Resume\Stop,配置文件可配置是否开启位置追踪、2D 图片识别、环境光检测等功能,多余的配置涉及到可观的性能开销,并且在切换配置的过程中会涉及到相机画面的重启,建议产品根据各自情况进行选择。


运动追踪相关


Frame.CameraImage.Texture Frame.CameraImage.DisplayUvCoords相机纹理ID,对应于OpenGL中一张Texture中的Gluint,注意此Texture为一张旋转的External OES Texture,必须搭配DisplayUvCoords信息才能正确渲染(OES Texture与普通纹理有所区别,下文会举例一个实战issue)
Frame.CameraBuffer.AcquireCameraImageBytes可获得Camera的原始相机数据,格式为YUV420_888,此格式为Android Camera2的默认格式(注意此格式将YUV分离为3个Stride,与Camera1的NV21有所不同)。获得原始数据一般用于进一步的图像处理或CV算法
Frame.Pose.position Frame.Pose.rotation包含了运动追踪的结构体,包括相机当前位置、旋转等


环境理解相关


Session.GetTrackable可以获得已经被AR算法重建的平面
Frame.Raycast从三维世界一个点沿一个方向发射出一条无限长的射线,在射线的方向上,一旦与现实世界的特征点、平面产生碰撞,则返回碰撞对象包含的位置、方向及其他相关属性


光估计相关


Frame.LightEstimate.pixelIntensity可以获得当前估计的光照强度

ARCore 兼容性及解决方案

目前 ARCore 支持的机型主要为 17 年、18 年发布的旗舰机,下图列了支持的国内主流设备列表,观察到表中支持的设备主要为高通芯片和 ARM 芯片,据官方所述后续还会支持联发科芯片的机型。


OEMModel
小米Mi Mix 2S, Mi Mix 3 Mi 8, Mi 8 SE
华为Honor 10, Honor Magic 2, Maimang 7 Mate 20, Mate 20 Pro, Mate 20 X nova 3, nava 3i P20, P20 Pro Porsche Design Mate RS Porsche Design Mate 20 RS
三星Galaxy Note9 Galaxy S9, Galaxy S9+


值得一提的是 Google 官方考虑到国内用户无法在 Google Play 安装/更新 ARCore Runtime,提供了小米、华为和三星应用商店作为国内安装跳转链接。


用于保证机型覆盖率,我们选用了网易的 InsightSDK 作为 ARCore 的 fallback 的方案,开发的时候可以通过官网的 ARCore 设备白名单或者 Session.CheckApkAvailability 的方式进行自动选择 SDK。

开发者可能会遇到的问题

1. 运动中做运动跟踪


例如,如果用户是在火车上使用 ARCore,这时 IMU(Inertial Measurement Unit)获取的数据不仅包括用户的移动(实际是加速度),也包括火车的移动数据(实际是加速度),这样将导致跟踪失败。


2. 跟踪动态的环境


例如,如果用户对着一面大白墙、波光粼粼的湖面,这时从摄像机获取到的图像信息是不稳定的,这将导致特征点提取出错进而导致跟踪失败。


3. 热飘移


相机与 IMU 都是对温度敏感的元器件,之前我们说过相机和 IMU 的 OEM 校准,但这个校准通常都会在某一个或者几个特定温度下进行,但在用户设备使用过程中,随着时长的延长会导致设备发热,发热就会影响到相机获取的图像的颜色信息和 IMU 测量的加速度信息准确性,表现出来就是跟踪的物体会飘移。


4. CPU 抢占


从上面的 ARCore 算法中发现 AR 算法对 CPU 要求较高。如果你的 App 占用了过多的 CPU,依然会导致 ARCore 的效果不稳。可以使用类似 SnapDragon Profiler 的工具进行一个性能排查。


5. 使用 Linear 渲染模式


为了追求正确的光照计算,我们使用了 Linear 渲染模式,但是 ARCore 并没有提供 Linear 模式下相关的 shader。可以使用以下函数对颜色空间进行转换:


pow(gl_FragColor.rgb,vec3(2.2));


6. External OES Texture 的特殊性


将 Camera Texture 渲染到屏幕的 shader 使用的是 External OES Texture,在实际的使用过程中发现单独使用 External OES Texture 没有问题,但是结合一张正常 Texture 会渲染成黑色,经过排查问题发现 External OES Texture 的底层实现是多个单通道 Texture 的打包,所以在 External OES Texture 之后 Bind 的正常 GLuint 可能会错误的绑定,这个时候可以将 External OES Texture 放在最后即可解决。


7. 结合计算机视觉


因为需要将 Camera 的相机数据做进一步数字图像处理或者 CV 检测,除了直接获得 TextureID,还需要获得相机 Buffer,但是小米手机调用 Frame.acquireCameraImage() API 会抛出 NotYetAvailableException,官方文档有在小米的手机上说明这个问题,所以使用这个 API 还不能做到完全统一兼容。


总的来说,尽管 ARCore 推出的时间较 ARKit 迟,但功能上基本与 ARKit 持平。并且回顾 ARCore 近一年的发展上看,ARCore 也在率先提出一些行业标准,像 Cloud Anchor 这样的新 feature 就是由 ARCore 率先提出,由此可见 Google 对 ARCore 的投入和在 AR 领域决心。同样,社交化的应用方式也是 AR 技术落地的重要场景。预计未来几年 AR 的开发生态会逐步完善并标准化,对开发者来说是十分值得期待的。


本文作者:邓志鹏,网易人工智能事业部资深技术美术专家,《Unity5.x 从入门到精通》作者之一,主要关注于将 AI、AR 等前沿技术用于图形、交互领域。


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2019-01-24 03:0015230

评论

发布
暂无评论
发现更多内容

软件测试|京东科技控股股份有限公司岗位开放~

霍格沃兹测试开发学社

名企测试管理大咖解析沟通管理,多维度经验分享

测吧(北京)科技有限公司

测试

测试管理 | 京东科技控股股份有限公司岗位开放~

测吧(北京)科技有限公司

测试

FxFactory 8 Pro for Mac(视觉特效处理包)v8.0.12激活版

影影绰绰一往直前

✅快速构建Express服务

派大星

node.js Express

机械加工行业MES系统实施步骤

万界星空科技

mes 万界星空科技 机械 机械加工行业 机加工MES

百川终入海 ,一站式海量数据迁移工具 X2Doris 正式发布

SelectDB

数据库 OLAP 数据库迁移 数据同步 大数据 开源

名企测试管理大咖解析沟通管理,多维度经验分享

测试人

软件测试

MES系统计划排产功能,助你提升生产效率

万界星空科技

生产管理系统 mes 万界星空科技 万界星空科技mes 排产计划

教你一键搭建本地服务器,轻松4人以上联机畅玩幻兽帕鲁

华为云开发者联盟

云计算 服务器 华为云 华为云开发者联盟

Total Video Converter Pro for Mac(超级转霸)v5.1.0中文激活版

影影绰绰一往直前

异常检测、自动告警,业务问题分钟级识别

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟

Pod/Node 内存高负载故障注入

腾讯云混沌演练平台

k8s 混沌工程

软件测试学习笔记丨Linux命令 uniq去重

测试人

软件测试

简单一招竟把nginx服务器性能提升50倍

京东科技开发者

ScaleFlux与UCloud携手,助力高性能文件存储,实现低成本和高性能的完美平衡

ScaleFlux

高性能 数据压缩 企业存储

软件测试岗位内推丨京东科技控股股份有限公司岗位开放

测试人

软件测试

CrossOver 24 for Mac(windows 虚拟机)v24.0 b1中文激活版

影影绰绰一往直前

复杂SQL治理实践 | 京东物流技术团队

京东科技开发者

工厂生产管理MES系统,开源代码+维护

万界星空科技

开源 源码 mes 开源mes 万界星空科技

API安全概览

FunTester

测试管理|名企测试管理大咖解析沟通管理,多维度经验分享

霍格沃兹测试开发学社

面试官:说一下零拷贝技术的实现原理?

王磊

java面试

「我在淘天做技术」2024年看AIGC是如何让1688主图焕发新春的

阿里技术

商品 大模型 1688 AIGC

Apache Doris 2.0.4 版本正式发布

SelectDB

数据仓库 数据分析 OLAP 大数据 开源 数据库·

iOS应用崩溃了,如何通过崩溃手机连接电脑查找日志方法

网易戏精ARCore短视频新玩法实践_移动_邓志鹏_InfoQ精选文章