您的位置:首页 > 其它

InfiniTAM的编译探索

2015-08-13 16:13 183 查看
本人现在是某理工电信本科二年级学生,小白一个,之前申报了个关于深度图像重建的项目,暑假开始接触程明明老师团队的在14年的研究成果InfiniTAM。由于基础知识匮乏,在编译InfiniTAM工程阶段耗费了我接近3周的时间,现在想把整个编译的流程和我过程中遇到的bug和大家分享下。同时,这也是本人的第一篇博客,写的不好或者哪里有错还请各位指点啦!

一,简述

InfiniTAM是一个开源、跨平台、实时的大范围深度信息融合与跟踪技术框架,具体见http://mmcheng.net/zh/itam/。InfiniTAM工程下载下来是一个还没编译的源包,需要添加第三方的库自己编译运行。电脑的配置方面,本人的电脑显卡是NVIDIA GT645M,cpu是低电压版的i5,不合官网上面的要求,所以跑起来的时候就会比较卡,图像的处理速率会延迟得好厉害。另外本人电脑系统为X64的win8.1,Linux下的编译则会有所不同。

二,准备工作

InfiniTAM工程的编译要依赖其他的库,所以开始前先把用到的库和工具下载好:
1,InfiniTAM工程包,没有版本之分,下载见:http://mmcheng.net/zh/itam/
2,下载Cmake这个跨平台的安装(编译工具),下载见:http://www.cmake.org/download/
3,下载GLUT或者freeglut,如果下freeglut就最好下2.8.0版本的,下载见:http://freeglut.sourceforge.net/
4,NVIDIA CUDA SDK 下最新的7.0版本的Local Installers版,下载见:https://developer.nvidia.com/cuda-downloads
5,OpenNI下最新的2.2.0.33版本,下载见 http://structure.io/openni
  注意的是,装CUDA时最好把杀毒软件关闭,当时我试了两次都装不成功最后重启再装才可以,而且安装的路径会自己定义在C盘,安装的时候重定义安装路径也没用。OpenNI和Cmake的安装很简单一般没问题。

三,Cmake配置工程&VS最终编译

3.1 Cmake简述
 在用Cmake去配置InfiniTAM工程前,先简要介绍下Cmake是什么东西。Cmake是一个跨平台的安装(编译)工具,可以用简单的脚本语言来描述所有平台的安装(编译过程),其共计有80条命令。它能输出makefile(Linux平台)或者project文件(window平台),能测试编译器所支持的C++特性,类似UNIX下的automake。
 Cmake使用起来还算方便,只需要写好CMakeLists.txt构建文件。因为编译这个InfiniTAM不要求明白Cmake的命令,同时InfiniTAM用到的命令用到12条左右的命令,有兴趣了解的看另一份文件。(当我苦苦的看了好几天Cmake命令后回头看工程里的CmakeLists.txt文件时才发现其实不用懂都行的·······)

3.2 开始配置
 打开安装目录······\Cmake\bin,你会看到有cmake.exe和cmake.exe两个可执行文件。在Linux下,用命令行的形式运行cmake,在window下,双击打开cmake-gui.exe
(1)在你喜欢的一个路径下新建一个文件夹,如D:\InfiniTAM
(2)选定工程路径和新文件夹路径,注意第一个路径选到\source_code\InfiniTAM,
Adanced要选勾,如下图
  




(3)接着,点击按钮Configure后会弹出一个选框,选择对应的VS,注意不能选ARM版本;



(4)然后会出现一个error,莫慌,这里的错误是GLUT找不到,那么我们就手动给它添加。找到下载的freeglut的include和freeglut.lib,如果下载的是GLUT就添加GLUT的。我手动添加的路径就分别:freeglut2.8.0\include和freeglut2.8.0\lib\freeglut.lib;



(5)添加完路径后再点Configure按钮,然后会发现CUDA和OpenNI部分的配置栏都是是红色的如下图所示,其中CUDA的类库和OpenNI的类库和包含目录是NOTFOUND,这里同样要手动添加(因为Cmake自带的查找CUDA和GLUT不靠谱)。CUDA的添加路径都是回到C:\Program Files\NVIDIA
GPU Computing Toolkit\CUDA\v7.0\lib\x64,OpenNI则回到相应的安装目录下找。这里注意的是CUDA有两项是找不到的CUDA_nvcuvenc_LIBRARY和CUDA_SDK_ROOT_DIR;



添加完后点击两次Configure在点Generate,下面出现的cmake warning 可以忽略;
(6)打开新建的文件夹,可以看到会生成很多个文件夹和vs的工程文件,值得注意的一个是CMakeCache.txt记录了cmake的变量信息,当重新打开Cmake-gui时变量信息会从这儿文件上读取;
另外,把OpenNI目录下的Redist文件全部Copy到下面所示的目录下



(7)用vs打开ALL_BUILD文件,然后把ALL_BUILD和ZERO_CHECK文件移去。ALL_BUILD是管理整个项目的工程;ZERO_CHECK是实时监视CMakeLists.txt文件变化的工程,一旦CMakeLists.txt里的内容发生了任何变化,ZERO_CHECK就会告诉编译器要重新构建整个工程环境,编译的时候不需要这两个文件;然后设定InfiniTAM为启动项(单击右键)——生成解决方案;不知为么缘故,我的电脑出了个如下的bug,原因是识别不了我64位的OpenNI,但在杨梁的电脑上没有出现这个bug,最后我重新下了个X86的OpenNI问题就解决了;



(8)另外,还有两个bug是可能会出现的。第一个bug是下面的说不支持'compute_11',这个bug在电脑显卡比较叼的情况下不会出现,





解决办法是打开InfiniTAM工程(不是生成的那个)\InfiniTAM\Source_code\InfiniTAM\ITMLib,打开改目录下的CMakeLists.txt文件,找到下面的代码把画红圈的部分删去保存,在重新cmake-gui一次即可





第二个bug一般会出现,因为写这份文档重新编译没有出现这个bug截不了图,错误的大体意思是
"链接器工具错误 LNK2026 XXX模块对于SAFESEH
映像是不安全的"
个人理解是可能因为GLUT的路径是手动添加的,VS可能不太信任这个路径的吧。解决办法是打开该项目的“属性页”对话框——单击“链接器”文件夹——单击“命令行”属性页——将 /SAFESEH:NO 键入“附加选项”框中,然后点击应用;
(9)到这来还没打工告成,解决方案——InfiniTAM——Source Files——InfiniTAM.cpp文件,要给main()函数里面的前三个变量赋值,第一个变量 要改成*calibFile=XXXX\InfiniTAM\Example_Sequence\Teddy\calib.txt;如果连接kinect,则第二第三个变量值不用改变。如果没有连接kinect,可以在\InfiniTAM\Example_Sequence\Teddy\Frames任选一帧图片来显示看效果,具体如下:
const char *imagesource_part1 = D:\InstallationBackage\InfiniTAM\Example_Sequence\Teddy\Frames\;0001.ppm

const char *imagesource_part2 = D:\InstallationBackage\InfiniTAM\Example_Sequence\Teddy\Frames\0001.pgm;
配置好路径后,点击运行,待显示界面出来后,按下‘n’或‘f’就会显示图片。
至此就大功告成啦。以后接下来的工作就是去看InfiniTAM工程里面的代码了,欢迎也在看或者准备看InfiniTAM的大伙们分享你们的经验。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: