Ubuntu18.04配置VisualSFM
参考:https://www.jianshu.com/p/cc0b548313e9VisualSFM有GPU和NO_GPU两个版本,本文安装VisualSFM为有GUP版本VisualSFM配置主要过程有:1. Build VisualSFM
2. Build SiftGPU
3. Build Multicore Bundle Adjustment (a.k.a. “pba”)
4. Hack PMVS-2
5. Build Graclus 1.2
6. Hack CMVS
7. Running VisualSFM
已经安装必须的工具和依赖
sudo apt install make build-essential pkg-config liblapack-dev gfortran jhead imagemagick libc6-dev-i386 libgtk2.0-dev libdevil-dev libboost-all-dev libatlas-cpp-0.6-dev libatlas-base-dev libcminpack-dev libgfortran3 libmetis-edf-dev libparmetis-dev freeglut3-dev已经安装Nvidia显卡驱动和Cuda(GPU版本需要) 安装过程中提示“cannot find -lXXX”,安装对应版本依赖。二、编译VisualSFM解压 VisualSFM_linux_64bit.zip,进入vsfm文件夹,open in Terminal,输入make如果提示“...cannot be used when making a PIE project, recompile with -fPIC”,打开makefile文件,在LIB_LIST += 后添加“-no-pie”,然后重新make。这一步只是生成了VisualSFM软件界面。三、编译SiftGPU得到libsiftgpu.so下载SiftGPU并得到编译文件,艰难过程1.解压SiftGPU-V400.zip,进入SiftGPU文件夹,右键open in Terminal,输入make可能出现数条以下错误:/usr/bin/ld: cannot find XXX一个个装包其中/usr/bin/ld: cannot find -lIL 错误一直无法解决,最终找到该包为libdevil-dev包,进行安装,$sudo apt-get install libdevil-dev接着继续$make运行成功后在目录下得到一个libsiftgpu.so,copy该文件到上上一步的vsfm/bin中,即与VisualSFM程序同目录四、编译pba-master包得到libpba.so解压pba-master.zip进入src/pba文件夹,编辑“SparseBundleCU.h” 和“pba.h” 文件,分别在顶部添加#include <stdlib.h>回到pba-master文件夹下,右键open in Terminal,输入makemake完成后,把pba-master/bin下的libpba.so拷贝到上上一步的vsfm/bin中,即与VisualSFM程序同目录五、接着生成pmvs2,cmvs,genOption三个二进制文件在https://github.com/pmoulon/CMVS-PMVS上下载CMVS-PMVS-master.zip,解压后进入/VFMSource/CMVS-PMVS-master/program目录$mkdir build$cd build$cmake ..$make到CMVS-PMVS/program/build/main下,将pmvs2,cmvs,genOption三个二进制文件拷贝到上上上一步的vsfm/bin中六、VisualSFM运行1.切换到vsfm/bin中,双击运行VisualSFM文件。2.将VisualSFM添加到环境变量中,利用命令行运行。$udo gedit ~/.bashrc文件底部添加export PATH=$PATH:/home/路径/vsfm/binexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/你的/路径/vsfm/bin保存关闭,在命令行输入source ~/.bashrc 刷新一下输入VisualSFM&,即可运行==============================================================================================PS:在解决/usr/bin/ld: cannot find -lIL 过程中也经过一通操作,做了以下事:参考:https://www.cnblogs.com/gaoxiang12/p/5149067.html由于特征匹配是SLAM中非常耗时间的一步,普通SIFT计算非常慢,普通PC上计算一个640×480的图中的SIFT大约需要几百毫秒左右,SIFTGPU能够明显地提升程序提取SIFT的速度。同时,它的代码大部分是基于OpenGL的,即使在没有英伟达显卡的机器上也能运行起来。下载SiftGPU与依赖库1.确保有OpenGL查看是否安装opengldpkg -l|grep opengl=============================OpenGL安装=====================================参考:https://www.linuxidc.com/Linux/2017-03/141555.htm首先不可或缺的就是编译器与基本的函数库,如果系统没有安装的话,依照下面的方式安装:$ sudo apt-get install build-essential安装OpenGL Library$ sudo apt-get install libgl1-mesa-dev安装OpenGL Utilities$ sudo apt-get install libglu1-mesa-dev OpenGL Utilities 是一组建构于 OpenGL Library 之上的工具组,提供许多很方便的函数,使 OpenGL 更强大且更容易使用。安装OpenGL Utility Toolkit$ sudo apt-get install libglut-dev OpenGL Utility Toolkit 是建立在 OpenGL Utilities 上面的工具箱,除了强化了 OpenGL Utilities 的不足之外,也增加了 OpenGL 对于视窗介面支援。 注意:在这一步的时候,可能会出现以下情况,shell提示:Reading package lists... DoneBuilding dependency treeReading state information... DoneE: Unable to locate package libglut-dev将上述$ sudo apt-get install libglut-dev命令改成$ sudo apt-get install freeglut3-dev即可。2.Opengl按以上步骤安装好后下载GLEWGLEW下载地址http://glew.sourceforge.net/,需根据opengl版本下载对应版本运行以下文件opengl.c查看openGL版本,#include#include // #include "stdafx.h"//int _tmain(int argc, _TCHAR* argv[])int main(int argc, char *argv[]){ glutInit(&argc, (char**)argv); //显示模式初始化 glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH); //定义窗口大小 glutInitWindowSize(300,300); //定义窗口位置 glutInitWindowPosition(100,100); //创建窗口 glutCreateWindow("OpenGL Version"); const GLubyte* name = glGetString(GL_VENDOR); //返回负责当前OpenGL实现厂商的名字 const GLubyte* biaoshifu = glGetString(GL_RENDERER); //返回一个渲染器标识符,通常是个硬件平台 const GLubyte* OpenGLVersion =glGetString(GL_VERSION); //返回当前OpenGL实现的版本号 const GLubyte* gluVersion= gluGetString(GLU_VERSION); //返回当前GLU工具库版本 printf("OpenGL实现厂商的名字:%s\n", name); printf("渲染器标识符:%s\n", biaoshifu); printf("OpenGL实现的版本号:%s\n",OpenGLVersion ); printf("OGLU工具库版本:%s\n", gluVersion); system("pause"); return 0;}
输入命令:g++ -o test /home/zsl/Desktop/opengl.c -lGL -lGLU -lglut./test输出信息:OpenGL实现厂商的名字:NVIDIA Corporation渲染器标识符:GeForce RTX 2080 Ti/PCIe/SSE2OpenGL实现的版本号:4.6.0 NVIDIA 418.39OGLU工具库版本:1.3sh: 1: pause: not found依据opengl版本,我下载的最新版的glew的zip包,解压,进入目录/glew-2.1.0,glew是用makefile直接编译的,不用cmake,直接在当前目录打开终端$ make$ sudo make install其将以下编译好的文件libGLEW.a libGLEW.so libGLEW.so.2.1 libGLEW.so.2.1.0放在了/usr/lib64目录下,由于之后我们要用cmake去编,但是它可能找不到这个文件夹,所以需要告诉系统该文件夹下有要找的链接库:$ sudo ldconfig /usr/lib643.完成glew操作后,开始编译SiftGPU,在下载好SiftGPU-V400.zip后解压,进入解压文件下/SiftGPU-V400/SiftGPU目录中,打开终端进行make操作。$ make
这通操作过后依然/usr/bin/ld: cannot find -lIL
最终解决是一个libdevil-dev包没装。
下一章试试运行下