Spectator view——Hololens第三人称视角技术的详细实现过程

Spectator view——Hololens第三人称视角技术的详细实现过程


距离微软发布首个不受线缆限制的全息计算机设备Hololens已经快过去三个年头,而随着新技术的不断出现,MR这一曾经“万众瞩目”的技术也逐渐退出了大众们的视野。不过这也使得Hololens从刚开始研发版的“天价”变成了现如今企业版的“白菜价”,这让更多的人拥有了使用并且开发Hololens的机会。

有关Hololens的视频和文章网上有很多,在这里我只介绍一下Hololens的第三人称视角技术Spectator view以及实现这一技术的详细步骤。疑难解答和参考资料我会放在文章的最后,英语好的大佬可以直接去最后找微软给的全套英文版解决方案


当我们HoloLens穿戴在头上沉浸于科技所带给我们的奇观时,常常会忘记那些没有佩戴设备的人无法与我们观赏到同样的景象。Spectator view技术的出现就完美地解决了这个问题,它将MR设备使用者所看到的三维图像转变成二维图像呈现在大屏幕上使观众了解到MR所展示的内容。该项技术可用于演示教学以及大型演讲的全息互动展示。

Spectator view——Hololens第三人称视角技术的详细实现过程_第1张图片

使用spectator view主要包含以下四点要素:

1.一款基于分享式全息体验(shared holographic experience)开发的、专门用于支持 Spectator View app

2.一位佩戴着 Hololens 眼镜使用该 app 的用户;

3.一台能够拍摄第三人称视角的 Spectator View 成套器械;

4.一台桌面 PC,要求能够运行上述 app,并能够将全息图(Hologram)转化成旁观者视角的视频。

 

虽然微软在GitHub上发布了全套解决方案,但是由于设备和编译环境的不同,实现过程也会有所差异,所以之后的内容主要讲的是我是如何利用微软的教程来实现Spectator view技术的。


硬件选择

Spectator view——Hololens第三人称视角技术的详细实现过程_第2张图片
1.一台支持hololens连接的电脑

系统为Windows 10

2.视频采集设备
带有HDMI输出的照相机

微软在官方教程中建议的照相机型号是Canon EOS 5D Mark III,我在这里测试和使用了三台摄像机,分别是Olympus的EM5 II,Sony的NEX-5N以及我的笔记本电脑lenovo Y50自带的摄像头,这三台设备都可以完成校准步骤。在这里要注意,有的相机HDMI输出的接口比较脆弱,可能轻轻的弯折都会导致主板损坏,因此在使用过程中要格外注意

装在电脑上用于获取HDMI信号的采集卡

微软在官方教程中推荐使用 Blackmagic DesignIntensity Pro 4K capture card,我最终选择了性价比较高的Blackmagic Design Intensity Pro,这里建议使用blackmagic design旗下的产品,如果使用其他系列的采集卡可能在后期调试过程中遇到比较多的麻烦。

3.导线

根据你所使用的照相机HDMI接口的规格来选择相对应的导线

4.固定设备

经济条件允许的话最好使用Hololens mount,3d打印的强度可能不够.我在前期测试阶段使用纸箱简单固定了一下,但必须保证HoloLens和照相机的视角都是水平的。

5.其他

螺丝刀 剪刀等等。

 

软件选择

1.  Github上微软所提供的spectator view工程文件
2  Blackmagic Capture Card SDK.

    微软建议使用blackmagic design官网上的最新版SDK,我在这里使用的是Blackmagic_DeckLink_SDK_10.9.10

3  Blackmagic Desktop Video Runtime

     这个软件在这里的作用是检测安装在电脑上的采集卡是否接收到来自于照相机的HDMI信号,通过它也可以得到不同摄像设备所对应的分辨率,以便后期调试,我从官网上下载了Blackmagic media express

4  opencv3.2

   提供后期调试和合成时所需要的与图像处理有关的函数库,这里建议将x86版和x64版都下载下来。

5  visual studio 2017

   这里使用visual studio professiona 2017

6  Unity 5.6.5f

    新的版本应该影响不大,版本过老可能会导致一些问题

 

 

工作流程

1.照相机配置

照相机型号选择的是Olympus EM5 II,而不是微软所推荐的 CanonEOS 5D Mark III ,选择的依据是照相机是否带有HDMI输出。首先将采集卡装在主板上,使用主板上的PEC1-1X接口即可。然后下载相应的驱动,这里使用的是10.9.10版本的。装好驱动后进入进入设置内检查电脑是否已识别到采集卡。接着安装blackmagic design express,点击进入后通过调整属性保证其接收端的分辨率与摄像机输出的一致,在这里选用1080p。照相机内部的设置一定要关闭HDMI控制,将live view的输出传到电脑,打开 blackmagic design express进入log and captrue观察是否显示图像,如果显示图像的话就记录一下左下角相对应的分辨率。

2.编译环境的配置

.安装opencv

这个工程需要用到opencv函数库来提供图像获取、识别、处理等功能。

opencv官网上下载opencv-3.2.0-vc14.exe,将其安装到你的工作文件夹以便之后的地址访问。由于opencv在安装之后会自己生成opencv这个文件夹,所以就不用再新建文件夹。

打开属性中的环境变量,在path变量下新增bin,这里最好将x64版和x86版全部添加。属性中改变包容目录添加opencv opencv2 include三个文件夹,再打开库目录,添加lib,最后在找到连接器下的输入选项,在附加依赖项中添加opencv_world320.h(如果是debug就添加opencv_world320d.h),完成编译环境的配置。

3.hololens固定

将照相机固定在三脚架上后,使用mount或其他方式将HoloLens固定在照相机上,并且保证hololens与地面平行。图为代替mount的连接方法

Spectator view——Hololens第三人称视角技术的详细实现过程_第3张图片

4校准项目(Calibration

在链接好照相机和hololens之后,你必须通过调试来得到hololen与相机之间的相对位置与角度等参数,以使hololens所拍摄到图像与相机拍摄到的图像接近相似。

首先打开下载好的calibration解决方案,在Calibration.sln中找到dependencies.props这个文件,它可以为第三方来源的软件安装位置创建宏,将opencv3.2的安装路径和Blackmagic SDK文件夹的位置输入到相应位置,由于我没有使用canon sdk,所以那canon_sdk的路径我没有修改

接着准备校准用的图像,将Calibration\CalibrationPatterns\2_66_grid_HALF打印两份,拼接好后贴在一张底色为白色的硬纸板的正中心。硬纸板的边缘要比两张2_66_grid_HALF拼接在一起之后的边缘多出一个方格边长的距离,下图是官方所给的图示

Spectator view——Hololens第三人称视角技术的详细实现过程_第4张图片

编译Calibration.sln,在编译前最好还原一下nuget。按照微软官方官方给的要求,找到工程中的stdafx.h头文件,在HOLOLENS_USER HOLOLENS_PW中分别填入校准所用的那台HoloLens的用户名和密码.;在CHESS_SQUARE_SIZE后面填入你用之前打印出来的那张用于校准的“棋盘”上的方格边长,单位是米;在GRID_CELLS_XGRID_CELLS_Y 分别后面分别填上棋盘一行上的方格数和棋盘一列上的方格数,最后生成Calibration.exe,将hololens与电脑连接,运行Calibration.exe,,运行窗口上显示的是照相机所拍摄到的画面如果此时运行窗口蓝屏的话就找到工程中DeckLinkManager.cpp71行,将bmdModeHD1080p5994改成你打开blackmagic design express后显示图像时所对应的那个分辨率。

手持校准板站在照相机前,双脚不动,hololens在识别到校准板上的“棋盘时”会闪烁白灯并拍下一张照片。从屏幕的左上角开始到右下角结束,按照s形水平移动校准板,每次移动一点就保持校准板位置不动,等待白灯闪烁,闪烁之后在进行下一次移动,最终将校准板置于屏幕中央,以校准板的两条中线为轴分别向左,向右,向上,向下转动(不要超过90°),使hololens闪烁四次白光,最后按下enter键等待程序响应。

校准程序会将照相机拍到的图片和hololens拍到的图片放入到MyDocume nts\CalibrationFiles这个文件夹之中,同时还会在这个文件夹中产生一个名为CalibrationData.txt 的文本文件,要通过多次校准使DSLR RMSHoloLens RMS的数值接近于0;使Stereo RMS的数值在20-50之间,你可以通过改变照相机的焦距来使各项参数接近目标值。校准完成后将所对应的CalibrationData.txt .放入unity工程文件的Assets目录下。

 

5.合成影像(Compositor)

打开spectator view工程文件中的Compositor.sln,首先还原nuget,然后像之前校准那样找到dependencies.props这个文件,将opencv3.2的安装路径和Blackmagic SDK文件夹的位置输入到相应位置,然后分别生成32位(x86)和64位(x64)的完整解决方案,之后运行copydll.cmd,如果显示有错的话就检查是否是哪个文件编译失败了。这里的copydll.cmd指向的是一个默认路径,如果使用自己所创建的unity工程的话,就要将路径设置为你的unity工程的assets所在位置,下图为copydll.cmd运行正常时显示的窗口

Spectator view——Hololens第三人称视角技术的详细实现过程_第5张图片

打开sample文件夹中的SharedHolograms项目,打开spectator view的窗口,再点击play,就可以看到现实景象与全息景象结合的场景了,但是这个时候还没有达到SpectatorView所应该达到的效果。所以就要用到第二台hololens来进行操作。将两台hololens通过WiFi链接到电脑上,找到 Hierarchy Panel目录下的SpectatorViewManager 设置,在Device IDs一栏填入与照相机相连接的那一台hololensIP(这个IP可以从hololens的网络设置中查到),在client hololens csv那一栏后面填入与电脑连接的所有hololensip地址,在server ID那一栏后面填入本机的IP地址,最后点击build & deploy apps 按钮,将项目分别部署到两台hololens中。

Spectator view——Hololens第三人称视角技术的详细实现过程_第6张图片

我在这一步时unity报了部署失败的错误,于是我便采用手动部署,生成32位的unity执行文件,然后将其分别部署到两台hololens之中。

分别带着两台hololens在屋内走动,让他们识别同一个空间,最后打开两台hololens 中刚部署好的unity程序,就可以在Spectator View窗口看到第三人称视角的效果,缓慢移动三脚架的位置,可以看到照相机所拍摄到的实体影象是在改变的,但是全息影象对于环境的相对位置是不变的。而另一台hololens的操作者可以改变全息影像的位置,做到这一步就说明你已经成功了。如果感觉spectator view窗口中全息影像的位置不合适就需对HoloLens重新进行校准,使各参数满足规定。

Spectator view——Hololens第三人称视角技术的详细实现过程_第7张图片


问题与解答

1、blackmagic media express在进入log and capture时不显示图像

因为不同照相机hdmi信号的输出形式不一样,所以可以在edit目录下的preferences设置中capture file format一栏测试所有的分辨率格式,如果都不行的话就改变相机的hdmi输出格式最终找到一个能产生图像的分辨率组合,比如我使用olympus EM5II时所对应的分辨率时1080i30,在使用笔记本摄像头的时侯这个分辨率就显示不了图像,在切换到1080i59.94之后才能显示图像。(顺便检查一下镜头盖开没开;))

2、进行校准步骤时按下enter 后没有出现CalibrationData.txt 文件

直接在编译器中编译运行Calibration.sln时会导致在摁下回车时程序直接卡死,最好找到生成的exe文件来运行

3、生成的Calibration.exe文件运行之后显示了界面,但什么内容也没有

首先用blackmagic media design确定照相机视频信号是否导入,然后确定在edit目录下的preferences设置中capture file format那一栏找到和相对的分辨率,找到工程中DeckLinkManager.cpp的71行,将bmdModeHD1080p5994改成这个分辨率就行了。

4、同一个全息影像在在两台hololens中所观察到的位置有较大偏差

可能是由于两个HoloLens所处空间不一样造成的,我的解决方案是删除两台hololens原本所保存的所有空间,然后再识别同一个空间。



参考资料


微软官方发布的全套教程

https://developer.microsoft.com/zh-cn/windows/mixed-reality/spectator_view

 以及配套的全部工程

https://github.com/Microsoft/MixedRealityCompanionKit/tree/master/SpectatorView

CSDN上的大神的成功实现,给我提供了一个很清晰的思路

http://blog.csdn.net/lyx_zhl/article/details/56011636

CSDN上的一个答疑帖,解决了我的一个很关键的问题

http://blog.csdn.net/kapooo/article/details/73527769

国外的一个大神的完整实现,以及后续的全息影像替换

https://www.andreasjakl.com/how-to-set-up-hololens-spectator-view-part-2-camera-configuration-calibration/

 

 

附录


Blackmagic design 官网

http://www.blackmagicdesign.com/products/ultrastudio

 Opencv 官网

https://opencv.org/


这个项目是我利用寒假时间完成的,由于我刚刚大二,学到的知识有限,而在这个项目中接触到的大部分都是全新的知识,所以教程中有的语言显得幼稚和外行,也可能有的地方存在错误,希望大家能够理解~

有什么问题和建议也欢迎给我留言:)





你可能感兴趣的:(项目)