解构微软HoloLens技术

上传人:博****1 文档编号:497710697 上传时间:2023-08-31 格式:DOCX 页数:17 大小:463.81KB
返回 下载 相关 举报
解构微软HoloLens技术_第1页
第1页 / 共17页
解构微软HoloLens技术_第2页
第2页 / 共17页
解构微软HoloLens技术_第3页
第3页 / 共17页
解构微软HoloLens技术_第4页
第4页 / 共17页
解构微软HoloLens技术_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《解构微软HoloLens技术》由会员分享,可在线阅读,更多相关《解构微软HoloLens技术(17页珍藏版)》请在金锄头文库上搜索。

1、微软HoloLens技术解谜2015-01-29HoloLens拥有这么几个关键要素:是增强现实产品,AR技术将计算机生成的图像与真实的世界相叠加。 类似的产品有图像投射到视网膜上的Google Glass,以及叠加在手机摄 像头画面上的手机AR应用。是独立的计算单元,自带CPU + GPU +HPU,不需外接计算机。它 的CPU和GPU基于英特尔的14纳米工艺的Cherry Trail芯片,HPU 是微软发明的缩写,Holographic Processing Unit,即全息处理单元。 HPU 是一块 ASIC (Application-specific integrated circui

2、t),是微 软为HoloLens定制的集成电路,有钱任性。HoloLens不是什么?Matrix要来了。那么你要好好看这一段,因为Matrix是VirtualReality / VR /虚拟现实,VR的特点是让参与者置身于计算机生成的三 维图像世界中,淡化真实的世界。VR近期的代表产品是Oculus Rift, 戴上Rift后你是看不到真实世界的。在我看来VR最大的问题是:这个虚拟世界很真实很精彩,但是有什么用呢?也就是说VR只能做到更逼真 的三维世界,它无法帮助人们更好地理解真实的世界。HoloLens 不是 Google Glass (以下简称 GG),它比 GG 多了:三维感知能力,可以

3、对身边的三维场景进行建模。而GG只能看到RGB像素值。三维渲染能力。人机交互能力,可以用手势来进行控制。HoloLens也不是市场上常见的的AR,常见的基于摄像头的AR应用基于摄像头有:基于丑陋的黑白标记图片的AR以及基于任意图片的AR。很炫是吗,但是它们只能检测到图片所在的那个平面。HoloLens比 它们都牛,它能检测到各个角度的三维场景!HoloLens的AR是如何得到三维场景深度信息的?我们回到AR的定义,想要实现增强现实,必须先理解现实,那么对 于HoloLens而言现实是什么呢?是传感器的数据。传感器是啥?是摄像头。同样是摄像头,为什么HoloLens就可以感知深度呢?微软的Kin

4、ect在这方面很成功,那么是不是HoloLens上放了一台嵌入式的Kinect 呢?答案在下面的原型图片中:HoloLens拥有有四台摄像头,左右两边各两台。通过对这四台摄像 头的实时画面进行分析,HoloLens可覆盖的水平视角和垂直视角都达到 120 度。也就是说它采用的是立体视觉/ Stereo Vision技术来获取类似下 图的深度图(depth map)。立体视觉是计算机视觉学科的一个子学科,专注于从两个摄像头的图像数据中得到真实场景中的物体离摄像头的距离。示意图如下:下面是基本的步骤,查阅OpenCV文档可以了解具体到函数用法:摄像头校正,undistortion。由于摄像头的镜片

5、出厂时都存在扭曲, 为了得到精确的数据需要在使用前进行较正。常用的方法是基于棋盘的各 个姿态拍几次,然后计算相机的矩阵参赛。下图便是常见的标定界面。 wma*I .Q i I IN U IG1IIR:_ Hl 14 M.UIK12 rilT UH UECTUhMM 4HUN-HA ISN8LH raiJN IJEi TOK:图像对齐,rectification。因为两个摄像头的位置不同,因此它们 各自看到的场景是有偏差的,左边的摄像头能看到最左的场景,右边的看 到最右的场景。图像对齐的目的是得到相同的场景部分。左右图像匹配,correspondence。可以使用OpenCV ,得到 dispa

6、rity map。通过重映射函数,比如OpenCV中的cv:reprojectImageTo3D,得 到一张深度图。只有一张深度图是不够的,它只是某一时刻真实的场景在摄像头中的 映射。要想得到完整的三维场景,我们需要分析一系列的深度图。HoloLens如何从多张深度图重建三维场景?答案是 SLAM, Simultaneous Localization And Mapping,即同步定 位与建图系统。这个技术被用于机器人、无人汽车、无人飞行器的定位与 寻路系统。解决的是非常哲学的问题:我现在在哪里?我可以去哪里?SLAM有很多实现的方式,有一个开源的方式,实现了很多深度图的 处理和匹配算法,可以

7、认为是三维版本的OpenCV。而微软围绕着Kinect的深度图数据发明了 Kinect Fushion算法, 并发表了两篇论文:KinectFusion: Real-time 3D Reconstruction and InteractionUsing a Moving Depth Camera;KinectFusion: Real-Time Dense Surface Mapping and Tracking。为什么我认为HoloLens与Kinect Fushion有关?答案在这个页 面中 。Shahram Izadi是微软剑桥研究院的principal researcher及 resea

8、rch manager。他所领导的互动 3D 技术组 / interactive 3D technologies为微软的多项产品提供了研究力量,包括Kinect for Windows, Kinect Fusion以及HoloLens。顺便说一句,他们组在招人:)Kinect Fushion,通过在室内移动Kinect设备,获取不同角度的深 度图,实时迭代,对不同对深度图进行累积,计算出精确的房间以及房间 内物体的三维模型。Raw DepthTracking Outliers Raycasted Vertex &a) Depth Map Conversion b Camera 匚)Volume

9、tric d) Raycasting (Raw Vertex & Nsm a I Map)TrackingIntegration (3D Rendering)它分四个阶段:深度图格式转换,转化后的深度的单位是米,用浮点数保存。并计算 顶点坐标和表面的法向量。计算世界坐标系下的相机姿态(包含位置和朝向),通过迭代的对齐 算法跟踪这两个值,这样系统总是知道当前的相机与最初的姿态相比变了 多少。第三阶段将姿态已知情况下的深度数据融合到单个三维乐高空间里, 你也可以叫它为MineCraft空间,因为这个空间的基本元素不是三角形, 而是方格子。演示视频中频频出现MineCraft场景估计也和这个阶段有

10、关。基于Raycasting的三维渲染,Raycasting需要从当前的相机位置 发出射线,与三维空间求交集。乐高空间特别适合Raycasting,可以用 八叉树来加速射线的求交运算。Raycasting、Raytracing以及 Rasterization是三种常见的渲染方式,这里就不展开了。在HoloLens的应用中我们运行到第三步,即获取三维乐高模型就可 以了,第四步并不是必需的。因为HoloLens的屏幕是透明的,不需要再 把房屋的模型渲染一遍,我们自带的眼睛已经渲染了一遍了:)HoloLens炫酷的demo都是怎么制作的?读者提问之“HoloLens的深度传感器有没有可能是基于TOF

11、?”先介绍下背景知识,市面上常见的有三种类型的深度传感器:结构光,这个技术的代表产品是Kinect 一代,它的传感器芯片用的 是PrimeSense家的。说句题外话,PrimeSense现在是苹果旗下的公司, 这个领域未来一定会很精彩。TOF,time-of-flight,代表产品是Kinect二代,由于微软对于One 这个单词的热爱,它的官方名字是Kinect One,有点混乱是吧?双目摄像头,代表产品是Google Tango以及Leap Motion,前者配 有四台摄像头,后者有两个。我认为HoloLens没有使用TOF技术的原因是因为如果这四个摄像 头的位置放的是TOF传感器,那么还缺

12、少一个朝前的RGB摄像头用于视 频聊天类App。读者提到的中间部分我认为是微型的投影仪,HoloLens使 用微投在“挡风玻璃”上显示全息的画面。参见Wired的这篇报道 http:/ 计划基本上是一个虚拟现实的应用,它无视了真实的环境。如果HoloLens 可以提供调节“挡风玻璃”透光度的API,那么调成完全不透光时就好比 戴着Oculus Rift的头盔,是另一种体验VR的途径。可是朋友们,这 是在浪费HoloLens的机能啊!那么,作为未来的应用开发者,应该怎样充分榨干它的机能呢?这是 本篇文章的重点。正文部分首先让我脑洞开一会,为大家“介绍”下Holo SDK。按照微软的偏 好,SDK

13、标配的语言肯定有C+和C#。根据官方demo中的场景,基本 功能至少有:(a) 摄像头看到的图像,即当前场景的color buffer。(b) 当前场景的深度图,depth map或z buffer。(c) SLAM合成后的三维场景,这个场景所在的空间下文我们暂且称 为Holo Space,它可能是以乐高方块的形式表示,也可能是用三角形来 表示。(d) HoloLens 设备在 Holo Space 中的坐标(x, y, z)、朝向(tx, ty, tz)。(e) 手势识别的结果,类似 HRESULT OnGestureDetected(DWORD dwHandId, DWORD dwEven

14、tId, LPVOID lpUserInfo)的样子。(f) 语音识别的结果,类似HRESULTOnVoiceRecognized(std:string& strSentence, FLOAT confidence) 的样子。同样的,根据官方demo,我将HoloLens应用分为三种:伪全息的传统应用针对HoloLens特别优化过的应用沉浸式的真-全息游戏这一篇只讲“伪全息的传统应用”这种类型的应用对于传统开发者而言最容易上手,几乎不需要修改代 码,自然也不需要拥有3D图形学的知识。大部分人会从这种应用入手开 始Holo开发。如果不需要3D知识就能实现3D的界面,那么3D的效果是哪来的 呢?那

15、就是Windows 10引入的全息窗口管理器explorer3d.exeo我们平时启动Windows看到的桌面”是窗口管理器(explorer.exe) 的一部分,把“桌面”想像成三维的就行了,很简单是吧?一点都不简单!以视频播放器为例,播放器并不会直接将视频画面显示到桌面上,而 是画到一个缓存区域,经过一系列我不知道的步骤后,explorer.exe再 将画面以“2D的方式拷贝”到能被我们看到的地方。而explorer3d.exe 用的是“3D的方式”。所谓“3D的方式”就是使用Direct3D做一些“会的人嫌我讲得啰 嗦,不会的人看了还是不会”的事也就是在初始化应用的时候:创建一个3D的矩形来表示3D的窗口,保存在顶点缓存vertexbufer (可以认为是放在显卡上的数组)创建一个贴图texture(可以认

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号