找回密码
 立即注册
LiveVideoStack 首页 资讯 查看内容
  • QQ空间
  • 回复
  • 收藏

劳永超:让你的手机浏览器来一场AR风暴(下)

2018-4-12 16:15

接:让你的手机浏览器来一场AR风暴(上)



当然这个框架也会遇到一些问题,首先它对性能的要求很高,因此在计算相邻运动时我们使用特征法或者直接用光流的方式来匹配;第二点是尺度问题,虽然我们可以知道画面内部的相对距离(手机的相对移动)是怎样的,但却不知道空间上绝对的尺度,这个问题可以通过用参照系或者传感器(三轴IMU无法做到)来解决;第三点是运动过快,在运动过快时传感器可能会失灵,因为我们是依赖同一个画面中大量相同特征去做的,如果快速切到另一个画面的话就会丢失信息。


  • 特定场景定位的优化


对于某些特定场景定位还可以再做一些优化,比如对于一个活动的线路导航,就可以预先做画面采集并通过手机下发信息从而获取当前位置;也可以在一些点(墙面)上贴不同的二维码或数字来表示当前位置;或者可以通过NFC或WiFi的方式来辅助校正;最后还可以基于语义SLAM来识别物体,也就是通过某些技术——分类的方式或者切割的方式,得知画面中有哪些物体以及推算它的尺寸是怎样的,从而帮助我们建立更加准确的尺寸。


除了前面提到的,SLAM技术应该还会有一些突破。Google提出的框架Tango规定硬件必须要有一些能力:要求具有深度摄像头,可以通过某种物理机制来定位看到物体的距离,其中一种方式是通过发射声波,根据返回的时间点来计算距离;具有高精度的IMU;以及通过系统中Tango进程来更加精确的计算,或维持传感器的自由状态。MagicLeap发表了最新论文——端到端的Deep SLAM,它是通过深度学习的方式来感应空间的位置。此外SLAM基本框架采用的传统算法是否可以应用机器学习,比如回环检测部分,用机器学习分类器来替代原本的视觉词袋模型。


渲染


下面介绍渲染部分,我们在一个网页上去做AR的效果,首先相机的内容是要显示出来的,同时AR上叠加的效果也要显示,那我们通常有两种方式来实现。


  • web direct render



第一种方法是direct render,首先整个网页有一个3D框架的显示——我们是用THREE.js etc.来显示,而摄像头的数据也会通过底层传输到JavaScript引擎(底层数据和引擎中数据的表示方式不一样——底层是Java的byte数组或C的Char数组),虚拟机因为存在垃圾回收的机制,使得它的对象在生命周期外还会需要做一些事情,那么就可以通过省略引擎中的一些机制加快过程;而在iOS中存在JSC接口来完成这个功能。


  • Hybrid render


第二种方法是Hybrid render,也就是通过为网页扩展两个逻辑层从而在网页上实现完整的AR效果。摄像头的实际内容置于底层展示,中间AR层使用Native实现,上层为网页层。我们将网页的背景设置为透明,对于3D物体的渲染,如果有WebGL的情况下,我们就可以在网页层实现;如果没有WebGL则需要在Native层来完成渲染。


  • 场景融合


另一个很难的问题就是场景融合,比如我们要对某一场景去做文字翻译,并将得到的译文放回到场景中。这就涉及到如何去检测位置以及由于3D变化而带来的位置变化,同时还要考虑怎样合理与底色融合的问题。


Web架构



这张图是我们Web的架构,首先我们是用Web来开发AR应用;其次在架构中我们把算法层暴露出来,这样第三方就可以把自己的核心算法注册到UC浏览器中供底层使用;最后是使用Native解决了性能问题。而对于没有Native组件加成的情况,也可以用WebAssembly编译的代码进行运算。


展望


我们的平台是基于H5和AR的,未来我们会尝试将更多的东西融入到平台中,包括声音、文字、人脸以及神经网络的运行。以上是我的全部分享,再次感谢大家。


来自: LiveVideoStack
文章点评