facebook surround360 环境配置,编译,测试(生成双目立体全景图)

surround360是facebook开源的一套集采集,渲染与一体的全景内容制作解决方案,其中使用到了诸多开源库,花了几天时间才把它跑通,下面就记录一下其中的一些注意事项。

项目介绍与测试样例

环境配置

  • 操作系统: ubuntu 16.04 (其他版本会多很多坑,可以考虑使用虚拟机,我就是用的WMware虚拟机
  • python: ubuntu系统自带,python 2.7
  • 其他:内存8G,硬盘40G。(在编译中间如果内存比较小可能会比较慢或者出错

编译

重要依赖库简介

  • gflags/glog/gtest: google开源的命令行解析库,应用程序日志库,C++单元测试框架。
  • folly: facebook的C++底层库,对boost的扩展和进一步封装。
  • ceres: 解决优化问题的数值计算库。(google从2010年开始使用)
  • opencv: Intel的计算机视觉库。(视觉研究人员必备技能)
  • ffmpeg: 视频处理库。集音/视频采集,编码/解码/转码,推流,播放等功能为一体的开源库,音视频相关人员必备,市面上的播放器基本都是拿它稍微改一下就直接用了。
  • colmap: 实现Structure-from-Motion (SfM) 和 Multi-View Stereo (MVS) 的开源库。
  • Goory: 一个可以很容易把python的命令行输入转化为图形界面的开源库。
  • PIL:python图像处理库(基本算是官方的图像处理库了)
  • LLVM/Halide: 用于程序优化的两个库。LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time)。Halide基于LLVM,可以让我们使用简单的方法写出高性能的图像处理算法。(加入这两个库之后代码编译会慢许多,而且surround360中有一个程序(Unpaker)是依赖于这两个库的,虽然指导手册中这两个是可选的,不过建议不要跳过)。

编译过程中的一些小BUG

  1. 多线程make的问题: 由于有几个库编译非常耗时,所以可以考虑使用多线程make(make -j8使用8个线程编译),但是事实证明多数程序猿在编写makefile或者cmakelist时并没有好好考虑多个target的依赖性问题,我在编译过程中遇到好几次使用多线程编译失败的情况,所以,如果你在使用多线程编译是出现了error,可以实时单线程。
  2. **.so not found: 虽然编译指南已经尽可能把依赖库写出来了,但是还有可能缺失一些库,如果编译过程中发现一些库缺失,那么就将它装上:使用apt-get或者pip。或者检查 边境变量LD_LIBRARY_PATH,看看是不是路径没有加进去。
  3. LLVM使用官方文档中的编译方法似乎会失败,参考这里:http://blog.csdn.net/fan2273/article/details/76439042
  4. 如果在make时候出现错误,错误中包含”Permission Denied”,说明是make的权限不够,请使用sudo make.

样例测试

软件运行

  1. 编译成功之后,在surround360_render/bin目录下会有14个二进制文件,script文件夹中的脚本会来调用这里的二进制文件。
    bin文件夹

  2. surround360_render/script文件夹下是python脚本,在安装了wxpython之后,可以以图形界面呈现。

    sudo pip install -U \
    -f https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-16.04 \
    wxPython
    cd surround360_render/script
    python run_all.py

    出现如下图形界面
    这里写图片描述
    到这里说明我们的程序编译运行都没有问题了。

样例使用


  1. 说明:这里facebook只给出了两帧的数据,而且是unpack之后的数据,所以如果我们要得到全景图,只需要执行渲染那一步。也就是软件中的step2。
  2. 参数说明
参数 说明
Data Directory 数据流文件(把多路数据压缩为一路数据,这一路数据就是bin文件,猜测)
Des Directory 输出文件夹,包括raw 图像,rgb图像,程序配置,蒙版,log,全景图输出,cube映射输出都在这里
Start Frame/ Frame Count 渲染的帧数
Quality 输出视频/全景图的分辨率
Cubemap Format 立方体映射的格式,暂时不清楚区别
Cudamap Face Width/Height 全景图立方体映射每一个面的宽高
save_debug_images/save_raw 是否保存程序的一些中间输出,是否保存bmp格式图像
steps_unpack 是否执行第一步,也就是将bin文件解压为rgb文件
steps_render 是否执行第二步,也就是将多张rgb渲染为双目立体全景图
steps_ffmpeg 是否执行第三步,将多帧双目立体全景图使用ffmpeg合成为一个视频流
enable_top/enable_bottom 是否添加顶部/底部的摄像头(这三个相机是鱼眼镜头,顶部一个,底部两个)
enable_pole_removal 是否使用去相机支架算法(底部两个相机,一个被相机支架挡住的部分另一个可以看到,通过融合可以将支架在输出中去掉)
dryrun 不执行step,三个步骤都不执行
verbose 还不是很懂这个参数是什么意思

3. 参数配置
拼接渲染一帧8K双目立体全景图的配置如下图所示
参数配置
- step2实际上并没有用到Data Directory中的文件夹,但是还是要给一个文件夹。
- 新建的output 文件夹中有如下的目录结构,其中cam一共是到16。png图片来自samples_dataset/vid/000000/isp_out.
- 点击start就开始拼接渲染,在[email protected]的机子上大约需要45s.

output
      |--rgb
           |--cam0  
                 |--000000.png
           |--cam1
                 |--000000.png
           |--cam2
                 |--000000.png
           |--cam3
                 |--000000.png
           |--cam4
                 |--000000.png
           |--cam5
                 |--000000.png
           |--cam6
                 |--000000.png
  1. 运行结果

    • output文件夹
      output文件夹
    • eqr_frames
      双目立体全景图
    • cube_frames
      这里写图片描述

猜你喜欢

转载自blog.csdn.net/smallflyingpig/article/details/79451890