Microsoft
HoloLens
全息眼镜
揭
秘
Microsoft HoloLens是第一台运行Windows10系统的全息计算机,它已经不受任何限制——没有线缆和听筒,并且不需要连接电脑。Microsoft Hololens能够让你把一个全息图像钉到真实物理环境中,它提供了一个看世界的新方式。
Microsoft HoloLens的产品特性有透明、全息、高清镜头、立体声,可以让你看到和听到你周围的全息景象。完全运用高级传感器和新型全息处理单元(HPU)让你了解周围的全息世界,Microsoft Hololens能够不依赖线缆实时运行百兆字节数据。
以下内容包括:
微软 HoloLens 技术解谜(上):如何还原三维场景
微软 HoloLens 技术解谜(下):SDK 会是这样?
2015年12月18日,微软在纽约的HoloLens全息眼镜体验展示台正式投入使用,
该店位于纽约第五大道店的旗舰店,其中一个特意开辟的楼层,在内部设置大型展位,包括三个房间,参观者和开发者可以在三间房当中体验三种不同的演示。
——「上下」
揭秘微软黑科技
HoloLens
-
▲这是微软与美国航空航天局(NASA)喷气推进实验室合作的产物。两个地球上最牛逼轰轰的科技大牛,要实现我们的梦想了。
● ● ●
微软 HoloLens 技术解谜(上)
:如何还原三维场景
HoloLens 是什么?
HoloLens 是微软发布的可穿戴式扩增实境计算设备,它拥有这么几个关键要素:
-
它是扩增实境产品,即 Augmented Reality(AR),AR 技术将电脑生成的图像与真实的世界相叠加。类似的产品有图像投射到视网膜上的 Google Glass,以及叠加在手机相机镜头画面上的手机 AR 应用。
-
它拥有独立的运算单元,自带 CPU + GPU + HPU,不需要外接电脑。它的 CPU 和 GPU 基于英特尔的 14 纳米制程的 Cherry Trail 芯片,HPU 是微软发明的缩写,全称是 Holographic Processing Unit,即全像处理单元。按照“知乎”论坛匿名用户的回答,HPU 是一块 ASIC(Application-specific integrated circuit),是微软为 HoloLens 客制化的集成电路,对此,我只能说“有钱任性”。
HoloLens 不是什么?
看完微软栩栩如生的宣传影片后,如果你的反应是:
卧槽,Matrix 要来了。
那么你要好好看这一段,因为 Matrix 是 Virtual Reality / VR / 虚拟实境,VR 的特点是让参与者置身于电脑生成的 3D 图像世界中,淡化真实的世界。VR 近期的代表产品是 Oculus Rift,戴上 Rift 后你是看不到真实世界的。在我看来 VR 最大的问题是:这个虚拟世界很真实很精彩,但是有什么用呢?也就是说 VR 只能做到更逼真的 3D 世界,它无法帮助人们更好地理解真实的世界。
HoloLens 也不是 Google Glass,它比 Google Glass 多了:
-
3D 感知能力,可以对身边的 3D 场景进行建模。而 Google Glass 只能看到 RGB 像素值。
-
3D 渲染能力。
-
人机交互能力,可以用手势来进行控制。
HoloLens 也不是市场上常见的的 AR,常见的基于内置镜头的 AR 应用基于内置镜头有:
基于丑陋的黑白标记图片的 AR
以及基于任意图片的 AR。
很炫是吗,但是它们只能检测到图片所在的那个平面。HoloLens 比它们都“牛”,它能检测到各个角度的 3D 场景!
HoloLens 的 AR 是如何得到 3D 场景深度资讯的?
我们回到 AR 的定义,想要实现扩增实境,必须先理解实境,那么对于 HoloLens 而言,实境是什么呢?是传感器的数据。
传感器是啥?是摄影镜头。
同样是摄影镜头,为什么 HoloLens 就可以感知深度呢?微软的 Kinect 在这方面很成功,那么是不是 HoloLens 上放了一台嵌入式的 Kinect 呢?
答案在下面的原型图片中:
HoloLens 拥有四台摄影镜头,左右两边各两台。通过对这四台摄影镜头的即时画面进行分析,HoloLens 可覆盖的水平视角和垂直视角都达到 120 度。
也就是说它采用的是立体视觉 / Stereo Vision 技术来获取类似下图的深度图 (depth map)。
立体视觉是电脑视觉学科的一个子学科,专注于从两个摄影镜头的图像数据中得到真实场景中的物体离摄影镜头的距离。示意图如下:
下面是基本的步骤,查阅 OpenCV 文档可以了解具体到函数用法 :
-
摄影镜头校正,undistortion。由于摄影镜头的镜片出厂时都存在扭曲,为了得到精确的数据需要在使用前进行校正。常用的方法是基于棋盘的各个姿态拍几次,然后计算相机的矩阵参赛。下图便是常见的标定界面。
-
图像对齐,rectification。因为两个摄影镜头的位置不同,因此它们各自看到的场景是有偏差的,左边的摄影镜头能看到最左的场景,右边的看到最右的场景。图像对齐的目的是得到相同的场景部分。
-
左右图像匹配,correspondence。可以使用 OpenCV ,得到 disparity map。
-
通过重映射函数,比如 OpenCV 中的 cv::reprojectImageTo3D,得到一张深度图。
只有一张深度图是不够的,它只是某一时刻真实的场景在摄影镜头中的映射。要想得到完整的 3D 场景,我们需要分析一系列的深度图。
HoloLens 如何从多张深度图重建 3D 场景?
答案是 SLAM(Simultaneous Localization And Mapping),即同步定位与建图系统。这个技术被用于机器人、无人汽车、无人飞行器的定位与寻路系统。解决的是非常哲学的问题:
-
我现在在哪里?
-
我可以去哪里?
SLAM 有很多实现的方式,有一个开源的方式,实现了很多深度图的处理和匹配算法,可以认为是 3D 版本的 OpenCV。
而微软围绕着 Kinect 的深度图数据发明了 Kinect Fushion 算法,并发布了两篇论文:
-
KinectFusion: Real-time 3D Reconstruction and Interaction Using a Moving Depth Camera;
-
KinectFusion: Real-Time Dense Surface Mapping and Tracking。
为什么我认为 HoloLens 与 Kinect Fushion 有关?答案在这个页面中 。
Shahram Izadi 是微软剑桥研究院的 principal researcher 及 research manager。他所领导的互动 3D 技术组(interactive 3D technologies)为微软的多项产品提供了研究力量,包括 Kinect for Windows, Kinect Fusion 以及 HoloLens。顺便说一句,他们组在招人。
Kinect Fushion,透过在室内移动 Kinect 设备,获取不同角度的深度图,即时更新,对不同对深度图进行累积,计算出精确的房间以及房间内物体的 3D 模型。
它分四个阶段:
-
深度图格式转换,转化后的深度的单位是米,用浮点数保存。并计算顶点座标和表面的法向量。
-
计算世界座标系下的相机姿态(包含位置和朝向),通过重复的对齐算法跟踪这两个值,这样系统总是知道当前的相机与最初的姿态相比变了多少。
-
第三阶段将姿态已知情况下的深度数据融合到单个 3D 乐高空间里,你也可以叫它为 MineCraft 空间,因为这个空间的基本元素不是三角形,而是方格子。演示影片中频频出现 MineCraft 场景估计也和这个阶段有关。
-
基于 Raycasting 的 3D 渲染,Raycasting 需要从当前的相机位置发出射线,与 3D 空间求交集。乐高空间特别适合Raycasting,可以用八叉树(octree)来加速射线的求交运算。Raycasting、 Raytracing 以及 Rasterization 是三种常见的渲染方式,这里就不展开了。
在 HoloLens 的应用中我们运行到第三步,即获取 3D 乐高模型就可以了,第四步并不是必须的。因为 HoloLens 的屏幕是透明的,不需要再把房屋的模型渲染一遍,我们自带的眼睛已经渲染了一遍了:)
HoloLens 炫酷的 demo 都是怎么制作的?
还剩下三个难点,下面文章叙说:
-
手势识别怎么做的?
-
眼球跟踪怎么做的?
-
非常贴合的 3D 渲染是怎么做的?
● ● ●
微软 HoloLens 技术解谜(下)
:SDK 会是这样?
在上面文章《微软 HoloLens 技术解谜(上):如何还原三维场景》 中我介绍了自己对于 HoloLens 背后的建模技术的看法,虽然之前在微软的 Xbox 部门工作过,但是和大家一样也是上周才知道 HoloLens 这个好玩的设备。当前微软官方对于 HoloLens 透露出来的讯息非常有限,最核心的两个组件深度传感器以及全息屏幕的原理依然充满着谜题。文章发布后,在微软 HoloLens 技术解谜(上):如何还原三维场景的留言中读者提出了一些问题。
读者提问之“HoloLens 的深度感应器有没有可能是基于 TOF?”
先介绍一下背景知识,市面上常见的有三种类型的深度感应器:
-
结构光,这个技术的代表产品是 Kinect 一代,它的感应器芯片用的是 PrimeSense 家的。说句题外话,PrimeSense 现在是苹果旗下的公司,这个领域未来一定会很精彩。
-
TOF,time-of-flight,代表产品是 Kinect 二代,由于微软对于 One 这个单字的热爱,它的官方名字是 Kinect One,有点混乱是吧?
-
双眼摄影镜头,代表产品是 Google Tango 以及 Leap Motion,前者配有四个摄影镜头,后者有两个。
我认为 HoloLens 没有使用 TOF 技术的原因是因为如果这四个镜头的位置放的是 TOF 感应器,那么还缺少一个朝前的 RGB 镜头用于视讯聊天类 App。读者提到的中间部分我认为是微型的投影机,HoloLens 使用微投在“挡风玻璃”上显示全像的画面。
至于这个问题的标准答案,还得等微软发布新的讯息。
读者提问之“HoloLens 能不能当 VR 用?
这个问题很好,的确可以这么玩,NASA 与微软的的火星合作计划基本上是一个虚拟实境的应用,它无视了真实的环境。如果 HoloLens 可以提供调节“挡风玻璃”透光度的 API,那么调成完全不透光时就好比戴着 Oculus Rift 的头盔,是另一种体验 VR 的途径。可是朋友们,这是在浪费 HoloLens 的机能啊!
那么,作为未来的应用开发者,应该怎样充分榨干它的机能呢?这是本篇文章的重点。
正文部分
首先让我脑洞开一会,为大家“介绍”下 Holo SDK。按照微软的偏好,SDK 标配的语言肯定有 C++ 和 C#,因此要进行开发,这两种语言你至少得会一个。
然后,这个 SDK 里有哪些功能呢?根据官方 demo 中的场景,我觉得基本功能至少有:
-
相机镜头看到的图像,即当前场景的 color buffer。
-
当前场景的深度图,depth map 或 z buffer。
-
SLAM 合成后的三维场景,这个场景所在的空间下文我们暂且称为 Holo Space,它可能是以乐高方块的形式表示,也可能是用三角形来表示。
-
HoloLens 设备在 Holo Space 中的坐标 (x, y, z)、朝向(tx, ty, tz)。
-
手势识别的结果,类似 HRESULT OnGestureDetected(DWORD dwHandId, DWORD dwEventId, LPVOID lpUserInfo)的样子。
-
语音识别的结果,类似 HRESULT OnVoiceRecognized(std::string& strSentence, FLOAT confidence)的样子。同样的,根据官方 demo,我将 HoloLens 应用分为三种:
-
伪全像的传统应用
2.针对 HoloLens 特别最佳化过的应用
3.沉浸式的真全像游戏
这一篇只讲“伪全像的传统应用”
这种类型的应用对于传统开发者而言最容易上手,几乎不需要修改程序码,自然也不需要拥有 3D 图形学的知识。大部分人会从这种应用入手开始 Holo 开发。
如果不需要 3D 知识就能实现 3D 的界面,那么 3D 的效果是哪来的呢?那就是 Windows 10 引入的全像窗口管理器 —— explorer3d.exe。我们平时启动 Windows 看到的“桌面”是窗口管理器(explorer.exe)的一部分,把“桌面”想像成三维的就行了,很简单是吧?
一点都不简单!
以影片播放器为例,播放器并不会直接将影片画面显示到桌面上,而是画到一个暂存区域,经过一系列我不知道的步骤后,explorer.exe 再将画面以“2D 的方式拷贝”到能被我们看到的地方。而 explorer3d.exe 用的是“3D 的方式”。
所谓“3D 的方式”就是使用 Direct3D 做一些“会的人嫌我讲得啰嗦,不会的人看了还是不会”的事……
也就是在初始化应用的时候:
-
创建一个 3D 的矩形来表示 3D 的窗口,保存在顶点暂存 vertex bufer(可以认为是放在显卡上的数组)
-
创建一个贴图 texture(可以认为是放在显卡上的图片)
-
创建表示窗口平移、旋转、拉伸值的 local_matrix(这里的 matrix 是数学中的矩阵概念,不是电影名称)
在应用软件执行时:
-
如果需要在 Holo Space 中移动窗口,那么修改 local_matrix 中的平移值,功能与 explorer.exe 中的移动窗口类似,只是除了上下(y 轴方向)左右(x 轴方向)移动外还可以前后(z 轴方向)移动。
-
如果需要在 Holo Space 中旋转窗口,那么修改 local_matrix 中的旋转值。explorer.exe 中没有类似的功能。
-
如果需要在 Holo Space 中放缩,那么修改 local_matrix 中的放缩值,功能与 explorer.exe 中按住窗口边缘拖拉改变大小一致。
-
如果影片内容需要更新,那么更新 texture 为最新的内容,只有这么做我们才能看到会动的影片。
在应用软件退出时:
-
释放 Direct3D 的资源
不用担心,这些都是 explorer3d.exe 会负责的。
细心的读者会发现我们没有用到一个很重要的功能:
(d)HoloLens 设备在 Holo Space 中的坐标 (x, y, z)、朝向 (tx, ty, tz)。
要解释它我必须讲解 world、view、projection 三个矩阵,还要讲解矩阵的乘法以及 dot product 的公式等等,这些完全是图形学的知识了,一时半刻讲不完,我会再专门为它们写一个系列。我打算用一句话解释一下,explorer3d.exe 会维护一个全局的 global_matrix,它等于 world * view * projection,view 的值由功能(d)中的讯息可以得到。global_matrix 的作用就好比第一人称射击游戏中的鼠标,写到这里我发现把 explorer3d.exe 视为一个 3D 游戏会简单很多,3D 游戏场景里的电视机也能播放影像,其实是一样的道理。
总结一下,这个类型的应用软件工程师几乎不需要修改程序码,由 explorer3d.exe 负责调用 Direct3D 将传统应用的内容转换成 3D 的贴图。
● ● ●
解构微软HoloLens技术
引用宣传视频里面的一句话:
It was science fiction, Microsoft brings it into science fact.
HoloLens 所实现的效果并不是微软一家的创新,他早已流传在种种科幻电影中。HoloLens 是一个 Oculus+Kinect+Jetson TK1 集成起来的夹在鼻梁上的嵌入式怪物。脑补一下把 Kinect 带到头上的情景吧。微软做到了!
根据我目前看到的信息,HoloLens 需要的技术支持包括三个部分:
-
实时的三维计算
这是游戏届玩烂的东西,可以说在阿凡达之后拉开了一个时代的幕布,经过 NVIDIA、Intel 等公司的苦心经营,实时的双摄像头渲染已经很成熟。微软终于把这种技术推向了更广的领域。下图这种效果在也就是现在是游戏级别的水平。
-
精准的姿态确定和位置确定
根据网上流传的信息,可以肯定微软采用了基于深度识别的 SLAM(实时定位与地图构建)技术。这里解释一下什么是 SLAM,就是通过传感器获取环境的有限信息,比如视觉信息、深度信息、自身的加速度和角速度等来确定自己的相对或者绝对位置,并完成对于地图的构建。
SLAM 的准确度对于最后的显示效果非常重要,姿态确定就不是事儿。几十块的电容式陀螺仪或者几百块的 MEMS 抄几段代码就好,但怎么确定位置就是微软的功力了。当然深度摄像头这种事情微软常年吊打整个行业,Kinect 快成行业标准了。想想我们用的激光雷达的价格。真是要哭了。
电影中,使用小型探测器扫描出来了隧道全景并且全息呈现了出来。对应到现实《普罗米修斯》里面用的是这种玩意,相当于一辆低配的奥迪 A8 的价格,可以发射几十束激光同时扫描。Google 无人车也用这种激光雷达来进行实时的路况分析。
微软做到的可是实现了三年前科幻电影的效果啊!
注意这张图,微软暗示进入一个房间之前要先进行扫描,这里明显是在用 Deep Camera 生成 Point Cloud 然后三角面片进行 SLAM。如果确定是和 Kinect 类似的红外摄像头,那么可以认为 kinect 有的毛病他都会有,比如对黑色物体、光滑表面的探测。
可以说,HoloLens 的核心难度是深度探测和相关的手势识别。这可是微软的专长了。所以 HoloLens 就是一个戴到了鼻梁上的 Kinect。
为什么说 SLAM 对于 HoloLens 非常重要呢?因为只有实现了靠谱的 SLAM,才能知道眼镜的空间坐标和相对于室内各种障碍物的位置,同时识别出各种室内摆件的形状,这是宣传片中人机交互的基础。
在视频中,主人公一直在走动,画面的稳定性很好。
注意上图这里,可以看到对于各个表面的贴合度已经达到了 SLAM 的程度。
-
图像识别技术
这里注意到一个细节,展示在三维空间中的 UI 很像是 Autodesk Fusion 的 UI,难道自动桌已经先行一步?来自官网的一张图片,可以看到使用的正是 Autodesk。
作为半个工程师,我当时买 Leap Motion 就是为了玩 Solidworks Fusion。现在有了 HoloLens,比 Fusion 体验不知道酸爽多少倍。脑补一下去参观 EAST 的时候眼睛里显示出 EAST 剖面的情景。不能再震撼了。
这三个技术在近些年成熟,促成了 HoloLens 产品化。之前 Google Glass 的设想与此类似,Hololens 把它推向了现实。
其实 Hololens 所实现的效果也不是新鲜货。早在冷战末期,武装直升机飞行员就通过头盔里面的信息来操作机枪所瞄准的方向。这两年我军也有装备。当年 Su35 的“回马枪”向后发射的导弹就是用尾椎雷达和头盔瞄准具实现的。
更进一步,上图用到的也是类似的技术。
不过,根据技术分析,Hololens 可能会遇到如下一系列困难:
第一,耗电量。计算视觉、SLAM,以及反过向进行三维虚拟现实,都是常耗费计算量的任务。 Hololens 是时势造英雄的产品,这种计算量在二十年前可是阿拉莫斯实验室用于核聚变模拟的计算量。现在只要耗电量跟的上,NVIDIA 的 Tegra K1 还有 Intel 家的协处理器在嵌入式上飙计算量没问题。
第二,是在开放环境、欠光线环境的识别度问题。我对此持保守态度,得拿到产品再说。
第三,是定位精准度问题。这是老大难问题了。
事实上,上图中这种配合将成为很长一段时间内的主流。
如果修的不是自来水管而是血管,看到的是通过 B 超技术实时扫描出来的人体内部,那么未来的医院会是怎么样的。
如果显示的不是自来水管的 manual,而是实时匹配无人机的爆炸视图,那么以后的工厂和 DIY 是怎么样的。
让人难以想象的是,这一切居然要成真了!
微软研究院养了那么多人真的不是白养的。目前来看,微软在这些技术上解决的都非常好。
另外十分看好 HoloLens+ 无人机的交互。拿到货以后我要做的第一件事情就是把我们的无人机系统移植上去。这画面太美。我简直不敢想。
还有多系统配合,这是像 iPhone 可以推动 21 世纪历史进程的玩意。
Hololens将物理世界与虚拟现实融为一体
技术实现
1、摄像头:
HoloLens的深度摄像头视角广度为120*120,远远超过只能看到一角的Kinect。
2、处理器:
HoloLens配备多达18个传感器,每秒传输百万兆字节的数据进入处理器,这些数据全都由内置的CPU、GPU和首创的HPU(全息处理单元)进行处理。
3、光学镜片:
HoloLens为了精确模拟画面的视觉感官,让每个画面都有真实的空间和距离感受,光线会在所谓的“光引擎”中反射数百万次,然后光线进入两块镜片,在经过多层红绿蓝色的镜片最终进入你的眼睛。
4、散热:
HoloLens的性能比普通的笔电更强大但不会过热——因为热流会从设备四周散发出去。
交互
1、手势:
HoloLens通过手势进行操作,可以直接对眼前看到的物体,进行抓取、旋转、移动等调整。打开你的手掌就回到主屏了。
2、语音:
设备中的麦克捕捉语音指令。
3、眼控:
传感器追踪佩戴者的目光并调整显示。
应用
1、全息影像:
HoloLens全息影像投射在屋内的物体上并且锁定住——这是一个被微软工程师们称为“定格”。你可以绕着目标四处移动并在任何角度观察它,而不是跟着你的眼镜(头部)移动。用HoloLens观察到怪兽的全息影像时,你可以轻松保持“安全距离”。
2、虚拟环境:
HoloLens可以模拟一个物理空间——比如跟“好奇号”一起探测火星表面。火星的影像能让用户身临其境,科学家可以跟实验对象交互,甚至在火星上插一枚虚拟国旗。比如:理论上你可以在画面里指定一个地点,然后火星车就真的能前往采集土壤样品了。
3、增强现实:
HoloLens扫描你的环境和建立实时的数据模型。比如你正在玩一个游戏,游戏中的角色可以作为一个虚拟的全息影像在你的起居室嬉闹。这个游戏角色不仅知道沙发在哪里,还能看见它是皮质的——甚至直到它比木质地板更松软。
虚拟现实,真金白银
投资机构已经投下十亿美金的重注在虚拟和增强现实的产品上,下一代的计算平台也将在这里出现。
● ● ●
微软开设HoloLens全息眼镜体验店
2015年12月18日,微软在纽约的HoloLens全息眼镜体验展示台正式投入使用,同时微软表示将在明年年初发布HoloLens全息眼镜开发工具,并准备将HoloLens带入计算机平台。
该店位于纽约第五大道店的旗舰店,其中一个特意开辟的楼层,在内部设置大型展位,包括三个房间,参观者和开发者可以在三间房当中体验三种不同的演示。
参观者需要先测量瞳距(IPD),然后观看一个详细的视频教学,才能被允许带上HoloLens全息眼镜进行体验。微软在其中演示的Demo已经经过数月测试和调整,包括HoloStudio,它是微软Windows画笔的全息版本,采用空中抓取颜色的手势与语音命令相结合,来移动对象和重新着色。
同时为了避免牵扯到其他品牌,消费者不会在演示房间内看到在HoloLens全息眼镜发布会上的Trimble架构建模软件演示,或美国航空航天局的火星可视化工具。
HoloStudio是微软Windows画笔的全息版本,采用空中抓取颜色的手势与语音命令相结合,来移动对象和重新着色。X射线是一个快节奏的,基于手柄的游戏,HoloLens仅作为房间扫描选项,在这种情况下,你通过HoloLens全息眼镜,可以看到外星机器人从墙壁当中爬出。第三个演示demo则是“全息讲故事”,可以在某处使用3D动画软件和Microsoft PowerPoint创建故事,使用HoloLens全息眼镜观看故事播放的全息版本。
为您推荐
太刺激了,就像真的一样!体验者小乐刚刚戴着虚拟现实头盔体验了一把过山车,那真实的感觉甚至让站立的她不禁打了个趔趄。近几年,虚拟现实技术逐渐走出实验室,为越来越多的消费者所了解和体验。在刚刚结束的国际消费类电子产品展览会(CES)上,虚拟现实成为最受瞩目的黑科技之一,相关参展企业达数十家。 通过计算机模拟产生一个三维空间的虚拟世