Google ARCore 1.18 近期发布重大更新,通过 Depth API(深度 API)解决了一直横亘在开发者面前的深度理解和遮挡难题。文末更有 7/18 技术直播分享活动,不要错过!

Depth API 仅凭设备的 RGB 摄像头就可以创建深度图。应用深度图提供的深度信息,虚拟物体能够准确地出现在现实物体的之前或之后,从而与现实场景真正融合,为用户打造更加逼真和有沉浸感的 AR 体验。

*更多介绍请看本文《AR 体验的“后浪”来了:ARCore Depth API 让遮挡难题迎刃而解》

本文将从技术角度带你了解 Depth API 的算法和具体原理,并且手把手教你 Depth API 开发流程,让你的应用也能在深度理解上实现技术飞跃。

我们可以通过下面的例子来感受一下 Depth API 的能力:下面两张图是虚拟的 “安卓小人” 和真实的木箱的组合。左图中没有 Depth API,虚拟的 “安卓小人” 如贴纸般重叠在与木箱上层,画面露馅了。右图用了 Depth API,虚拟物体被真实物体合理遮挡,这样看起来才够真。

* 获取 Depth API 支持设备列表,请访问 ARCore 支持设备页面。

  • 支持设备列表

    https://developers.google.cn/ar/discover/supported-devices

深度图的动态算法

*Depth API 通过 depth-from-motion 算法(基于运动的深度算法)创建深度图。这张深度图你可以使用 acquireDepthImage() 获取,详情请访问 Acquire Depth Image。

  • Acquire Depth Image

    https://developers.google.com/ar/reference/java/arcore/reference/com/google/ar/core/Frame#acquireDepthImage()

在用户移动手机的过程中,这个 depth-from-motion 算法记录多个从不同角度拍摄的图像,对比这些图像,从而估算出场景中每个像素的距离。如果设备还搭载 ToF 等主动深度传感器,那些数据会被自动融入计算出来的深度信息中。这样会提升现有深度图能力,这样即使不移动相机镜头,设备也能很好地理解“深度”。同时在一些缺少纹理的表面上,比如白墙,或者包含运动的人或物的动态场景里,搭载主动深度传感器(TOF)也解决了之前的“理解无能”问题。

下图左边展示了一幅静态场景,里面有辆自行车挂在走廊的墙壁,右边是基于当前的相机图片所创建的深度图的可视化表示。

深度图格式

* 每一张深度图都表示为 ArImage

ARCore 使用 Depth16 格式的深度图,其中最高三个位始终设置为 000.

深度图的每个像素值是由无符号 16 位整数表示,其中 13 个最低位表示从相机的图像平面,沿着相机的光轴,到估算表面的距离。该距离以毫米为单位。

对运动的要求

Depth API 需要使用 ARCore 的运动跟踪功能。如果设备有主动深度传感器也会一并使用。depth-from-motion 算法实际上会将一对相机图像作为静态场景的两次观测结果。如果这个环境中的某一部分移动了,例如有人在镜头前运动,那么该场景的静态部分将会有估算准确的深度值,但是运动的部分则不会。

对于没有搭载主动深度传感器的设备,想要让 Depth API 更好地工作,用户需要至少移动自己的设备几厘米。

确保深度值的准确估算

深度值的取值范围是 0 到 8 米。当被测物体距摄像镜头的距离在 0.5-5 米之间时能够获取最佳准确率的深度值。随着到摄像头距离的增加,误差会呈二次方增长。

如果没有主动深度传感器,Depth API 就只能通过 RGB 色彩信息来执行深度估算任务。但是像白墙这种少有纹理甚至没有纹理的表面将无法被关联到精准的深度值。

理解深度值

理解深度值,才能正确的使用它。那么深度值究竟表示什么意义呢?通过坐标的形式给大家解释一下吧。

在上述这个图片中,假设 A 是真实物体表面上的一点,通过光路投射到深度图上,所对应的点以 a 来表示。在深度图中,a 这一点的深度值与 CA 投影到主光轴(principal axis)的长度相同。这个值也可以被理解为A 在 Z 轴的坐标,在以相机位置 C 为原点的坐标系里。在使用 Depth API 时要注意,我们所要了解深度值不是线段 CA 本身的长度,而是其投影的长度。

下一步,启用 Depth API

了解了 Depth API 的强大,你是不是也迫不及待想要动手实践了呢?接下来我们将手把手教你如何为 Depth API 设置开发环境。尝试在示例应用中,使用遮挡功能并且可视化深度图。跟着小编一步步操作吧。

前期准备工作

  1. 使用 Android Studio 3.1 版本、 Android 7.0 (API level 24)或更高版本

  2. 支持 Depth API 的 Android 设备。具体请查阅支持设备列表

  3. 了解 Android 开发的基础原理。更多信息请参考初学者第一个应用开发指南

  4. 对 Depth API 有基础了解。如果你是第一次接触 Depth API, 需要读完上文。

  • 支持设备列表

    https://developers.google.cn/ar/discover/supported-devices

  • 初学者第一个应用开发指南

    https://developer.android.com/training/basics/firstapp

打开示例项目

本示例基于 OpenGL。OpenGL 是一个用于渲染 2D、3D 矢量图形的跨语言、跨平台 API。在开始以下步骤前,请再次回顾启用 ARCore 的相关内容。

  • 启用 ARCore

    https://developers.google.cn/ar/develop/java/enable-arcore

* 点击以下链接获取示例项目

git clone https://github.com/google-ar/arcore-android-sdk.git

在 Android Studio 集成开发环境中,点击 arcore-android-sdk 目录,选择 samples 列表,你就能找到 hello_ar_java 示例项目了。

运行示例项目

Depth API 示例应用可以将虚拟的 “安卓小人” 放置在真实的环境中,你可以开关 “遮挡” 功能,切换查看差异。

* 注意 :当你运行 Android Emulator 时,Depth API 将不能使用。若想检测你的设备是否能支持 Depth API, 请查阅支持设备列表。

请确保你的设备已连接到开发机器,并在 Android Studio 集成开发环境中点击 Run(运行)。

接下来,将你的设备勾选为部署目标,最后点击 OK 确定。

如果未安装 Google Play Survices for AR,或者应用版本过旧,系统会自动要求你进行安装或升级。点击 CONTINUE(继续) 从手机的默认应用商店中安装。

启用 Depth

在你首次运行应用或放置 “安卓小人” 时,屏幕上会弹出对话框,提示你启用 Depth。这个对话框只会在首次启用时弹出,点击  Enable (启用),就能实现遮挡功能了。

切换 “遮挡功能” ,展示可视化深度图

如下图所示,点击图中右上角的齿轮图标。屏幕中心会弹出一个对话框。你可以勾选 Enable depth (启用 Depth)、Show depth map(显示可视化深度图)来启用或停用相应功能。

以上就是 ARCore Depth API 技术的入门级课程。如果你对此技术感兴趣,并想深入学习进而应用到自己的 App 上,请持续关注 “谷歌开发者” 公众号,打开菜单开发技术-ARCore,我们将为你奉上 AR 技术相关的一系列新鲜资讯。

ARCore 技术直播分享来了!

本周末 7/18 日,将有一场 ARCore 技术的直播分享,由滴滴 AR 导航高级算法工程师为你深入解析 ARCore 的核心技术及开发应用的技巧,从产品架构、开发流程、用户体验等多方面,和你一起探讨开发 AR 应用的心得体会。

你不得不了解的 Flutter 与 ARCore

活动时间:7 月 18 日下午 15:00-15:40

直播链接:BiliBili 平台 https://live.bilibili.com/21170438

活动背景:本次活动为 GDG China Android 11 Meetups 系列活动中石家庄场次,其中 ARCore 部分 15:00 正式开始。

活动日程:

  • 14:00-14:10

    Android 11 Meetups 系列活动介绍及活动开场

  • 14:10-14:50

    腾讯如何使用 Flutter 快速构建 Android 应用

  • 14:50-15:00

    中场休息(现场抽奖)

  • 15:00-15:40

    Google ARCore 核心功能及滴滴 AR 导航实践经验

  • 15:40-16:00

    Q&A(线上 10 个问题+线下 5 个问题)

讲师介绍:

滕晓强

滴滴地图与公交事业部

高级算法工程师

国防科技大学博士,主要关注于视觉惯性里程计和步行导航方向技术研究。在滴滴 AR 导航产品中,负责导航算法和 Android 端系统研发,本次将会分享 Google ARCore 核心功能及滴滴 AR 导航实践经验。

ARCore Depth API 深度解析:算法原理及开发细节相关推荐

  1. TensorFlow深度学习算法原理与编程实战 人工智能机器学习技术丛书

    作者:蒋子阳 著 出版社:中国水利水电出版社 品牌:智博尚书 出版时间:2019-01-01 TensorFlow深度学习算法原理与编程实战 人工智能机器学习技术丛书 ISBN:97875170682 ...

  2. 深度学习算法原理_用于对象检测的深度学习算法的基本原理

    深度学习算法原理 You just got a new drone and you want it to be super smart! Maybe it should detect whether ...

  3. Python大数据综合应用 :零基础入门机器学习、深度学习算法原理与案例

    机器学习.深度学习算法原理与案例实现暨Python大数据综合应用高级研修班 一.课程简介 课程强调动手操作:内容以代码落地为主,以理论讲解为根,以公式推导为辅.共4天8节,讲解机器学习和深度学习的模型 ...

  4. 《深度解析Java游戏服务器开发》源码

    不知什么原因,出售的<深度解析Java游戏服务器开发>一书中,没有给出源码,这里补上,源码已经上传至github: https://github.com/hjcenry/JavaServe ...

  5. 【进阶3-5期】深度解析 new 原理及模拟实现

    定义 new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例. --(来自于MDN) 举个栗子 function Car(color) {this.color = color; ...

  6. 深度学习算法原理——LSTM

    1. 概述 在循环神经网络RNN一文中提及到了循环神经网络RNN存在长距离依赖的问题,长短期记忆(Long Short-Term Memory,LSTM)网络便是为了解决RNN中存在的梯度爆炸的问题而 ...

  7. 梅卡曼德机器人| 机器视觉算法、深度学习算法、软件开发等海量岗位

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 梅卡曼德机器人 2020招聘火热进行中 梅卡曼德机器人,英文为Mech-Mind,意为机器之意识.我们 ...

  8. 媒智科技--深度学习算法Python后台开发--热招中~

    点击我爱计算机视觉标星,更快获取CVML新技术 公司简介 媒智科技源起于上海交通大学,核心团队由上海交大.清华.斯坦福.乔治亚理工等顶尖高校的人工智能教授,以及来自雅虎.腾讯等科技精英组成,聚焦计算机 ...

  9. 【进阶3-4期】深度解析bind原理、使用场景及模拟实现

    bind() bind() 方法会创建一个新函数,当这个新函数被调用时,它的 this 值是传递给 bind() 的第一个参数,传入bind方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺 ...

最新文章

  1. 30天敏捷结果(30):提升敏捷结果
  2. java命令行生成jar_命令行生成可执行的jar包
  3. Hadoop源码导入Eclipse
  4. 几道偏序问题(数据结构)
  5. 在vue中实现picker样式_vue vant中picker组件的使用
  6. Python学习入门10:零基础如何开始学习 Python?从小白变大牛!
  7. 笔记本电脑风扇声音大_笔记本风扇噪音太大?教你怎么降低笔记本风扇噪音
  8. rtmp,rtsp,hLS区别
  9. S的Qt界面预览和QtCreator的界面预览快捷键
  10. linux系统中lib,lib-dev,lib-dbg库的区别
  11. JAVA_OPTS设置详解
  12. 计算机网络设置端口转发,怎么设置路由器端口转发功能?
  13. C语言——三位数排序
  14. UVA - 12304 2D Geometry 110 in 1!
  15. rtl8188linux内核配置,编译基于rtl8188cu控制芯片的USB无线网卡在Linux下的配置
  16. 苹果CMSV10仿芒果TV影视PC+WAP模板
  17. 《Cocos Creator游戏实战》棋类游戏中的棋子摆放逻辑
  18. 销毁一颗二叉树--Destroy(Node* root)
  19. mysql 唯一序列号_利用mysql生成唯一序号
  20. 区块链实际应用中痛点

热门文章

  1. 高级的人生,就是做一个“无用”的人
  2. Revit二次开发之俯视图缩放匹配
  3. 阿里云短信验证出现签名不合法(不存在或被拉黑)
  4. JAVA入门--如何快速的判断一个数是奇数还是偶数
  5. python-轻松切换各种python版本(pyenv)
  6. @bogon改为@localhost
  7. IBM收购企业搜索软件公司Vivisimo
  8. 网络知识入门,路由器工作原理(十)
  9. Linux学习-系统启动过程目录结构
  10. XAMPP安装教程及注意事项