BundleFusion在win10+vs2013+cuda8.0上的实现

介绍

在深度相机室内实时稠密三维重建领域,BundleFusion是目前效果最好的开源算法框架。论文地址:https://arxiv.org/pdf/1604.01093.pdf
演示视频截取片断:

在这里插入图片描述
视频地址:https://www.youtube.com/watch?v=keIirXrRb1k
在演示视频中,structure sensor是卡在iPad上,将采集到的数据通过无线网络传给台式机(带GPU),匹配、优化和重建工作都是在台式机上运行,重建的结果再通过无线网络传到iPad上显示。
重建效果图:
在这里插入图片描述

一、配置

1、cuda8.0安装

#建议安装:cuda8.0vs2013

#卸载cuda10.0
在控制面板/卸载程序,卸载掉所有带有NVIDIA的程序,卸载顺序不影响

#下载cuda8.0:https://developer.nvidia.com/cuda-80-ga2-download-archive ,并运行安装。
在这里插入图片描述

#验证安装成功,输入nvcc --version
在这里插入图片描述

2、DirectX SDK安装

下载地址:http://download.microsoft.com/download/A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458E31/DXSDK_Jun10.exe ,运行安装。

#若运行安装出现 错误 ErrorCode:s1023
解决办法1:
在这里插入图片描述
控制面板卸载以上两项,再重新安装DXSDK_Jun10.exe即可。

大部分通过这个方法可以解决,如果以上两项不存在或者卸载后仍不能解决问题(比如我),可能Microsoft Visual C++ 运行库安装有问题,得删除并重新安装 Microsoft Visual C++ 运行库,步骤如下:

1、控制面板卸载名称包含“Microsoft Visual C++”和“Redistributable”的所有程序
2、下载并安装以下所有软件:

Microsoft Visual C++ 2005 SP1 Redistributable (x86)
Microsoft Visual C++ 2005 SP1 Redistributable (x64)
Microsoft Visual C++ 2008 SP1 Redistributable (x86)
Microsoft Visual C++ 2008 SP1 Redistributable (x64)
Microsoft Visual C++ 2010 SP1 Redistributable (x86)
Microsoft Visual C++ 2010 SP1 Redistributable (x64)
Microsoft Visual C++ 2012 Update 4 Redistributable(x86 和 x64)
Microsoft Visual C++ 2013 Update 5 Redistributable Package(x86 和 x64)
Microsoft Visual C++ 2015 Update 3 Redistributable(x86 和 x64)

注意:

  • 每个下载的文件名均相同,因此在安装它之前,请确保不覆盖之前的文件。下载一个安装一个,然后再下载下一个并安装,依此类推。
    • 64 位系统上需要 x86 和 x64 版本。32 位系统只需要 x86 版本。

3、重启后,控制面板卸载2010两项,再重新安装DXSDK_Jun10.exe,即可解决。

二、vs2013代码生成

BundleFusion GitHub地址:https://github.com/niessner/BundleFusion
配置过程主要参考这里

从GitHub上下载该BundleFusion,并解压,得到工程 BundleFusioin-master

1、mLib与 mLib external配置

mLib

下载地址:https://github.com/niessner/mLib ,解压后,替换掉目录 BundleFusion-master\external\mLib

mLib external

下载地址:https://www.dropbox.com/s/fve3uen5mzonidx/mLibExternal.zip?dl=0 ,解压后,放到 BundleFusioin-master 同级目录,网址访问不了的话可以用我传到网盘的mLibExternal.zip:链接:https://pan.baidu.com/s/1CJysQCHl4t7RPfvqliwfew 提取码:0x4t

最终目录结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bundlefusion
BundleFusion-master/
external/
mLib/ # this is the submodule you replaced
data/
src/
[...]
FriedLiver/
[...]
FriedLiver.sln
[...]
mLibExternal/ # you downloaded this from Dropbox
include
libsWindows
[...]

2、cuda设置

修改cuda版本

用VS2013打开 BundleFusion-master\FriedLiver\FriedLiver.sln 工程,如果cuda版本不是原代码设置的cuda7.0,就会出现如下错误:
在这里插入图片描述
修改 BundleFusion-master\FriedLiver\FriedLiver.vcxproj 文件,用vs code打开该文件,并修改如下两行:
在这里插入图片描述
在这里插入图片描述
再次打开就不会报错了。

显卡计算能力设置

选择适合你显卡的compute能力,显卡计算能力在这里查询
我的笔记本显卡NVIDIA GeForce MX150,计算能力与GeForce 940M等同,为5.0,在工程的配置选项中设置如下:
在这里插入图片描述

3、相机类型设置(以apt0.sens离线数据为例)

输入类型

输入数据可以为Kinect v1,Kinect v2,PrimeSenseSensor,IntelSensor,RealSense,StructureSensor以及SensorDataReader(离线数据)
具体可以查看FriedLiver.cpp中7-103行的内容

没有深度相机的,以离线数据office3.sens为例,下载地址:http://graphics.stanford.edu/projects/bundlefusion/

修改GlobalAppState.h

因为使用的是离线数据,将GlobalAppState.h中深度相机全部注释掉。
在这里插入图片描述
注:如果用深度相机(如:Kinect v1)实时运行,用哪个将哪个取消注释,并安装对应SDK。

4、生成FriedLiver.exe

修改为 Release 版本,然后选择 生成->生成解决方法
编译通过后,如下图:
在这里插入图片描述
BundleFusion-master\FriedLiver\x64\Release中生成可执行文件FriedLiver.exe

三、运行与结果

1、配置文件修改

BundleFusion-master\FriedLiver 目录下的 zParametersBundlingDefault.txtzParametersDefault.txt 拷贝到 BundleFusion-master\FriedLiver\x64\Release

修改zParametersDefault.txt

用vs code打开 zParametersDefault.txt 配置文件,选择输入类型,这里使用离线数据,修改第2行,设置s_sensorIdx = 8 。如果用深度相机(如:Kinect v1)实时运行,修改为对应的序列号。
在这里插入图片描述
修改第49行,设置s_hashNumSDFBlocks = 100000
在这里插入图片描述
修改第58行,设置输入路径s_binaryDumpSensorFile = "../data/office3.sens"
在这里插入图片描述
将下载的office3.sens放置到BundleFusion-master\FriedLiver\x64\data

修改zParametersBundlingDefault.txt

双击运行后,若出现窗口崩溃或者没有响应直接跳出,如下图:
在这里插入图片描述
用vs code打开 zParametersBundlingDefault.txt 配置文件,修改第30行,设置s_maxNumImages = 400

2、运行结果

配置修改后,双击运行FriedLiver.exe
在这里插入图片描述
按下tab键,如下图所示,按照提示与软件进行交互,按下ctrl+2显示带颜色深度,按下ctrl+3显示彩色视频流,按下ctrl+9导出当前模型到FriedLiver\x64\Release\scans\scan.ply ,具体实现代码查看FriedLiver\Source\DepthSensing\DepthSensing.cpp
在这里插入图片描述

3、模型生成

运行结束后,BundleFusion-master\FriedLiver\x64\data\office3.sens同目录下生成office3.ply,用meshlab打开
在这里插入图片描述

4、在Kinect v1上的实时运行

安装 Kinect SDK v1.8

Kinect for Windows SDK v1.8
Kinect for Windows Developer Toolkit v1.8
下载后默认安装

设置Kinect v1输入

重新打开 BundleFusion-master\FriedLiver\FriedLiver.sln 工程,将GlobalAppState.h中第三行取消注释
在这里插入图片描述
选择 生成->生成解决方法,即可编译通过。

zParametersDefault.txt 配置文件,选择输入类型,这里使用Kinect v1,修改第2行,设置s_sensorIdx = 0

实时运行

插上Kinect v1,双击运行FriedLiver.exe
在这里插入图片描述

0%