Ubuntu16.04上配置使用superpixel-benchmark
一、相关软件安装
配置之前请确保Ubuntu有至少50G空间(多留点)、尽量保证Ubuntu系统纯净,不然容易出现意想不到的错误,不行就先重装Ubuntu系统
在安装以下软件和包之前务必先安装opencv(我安装的是opencv3.4.0版本,安装之前请安装相关依赖)、Cmake(我的是3.5.0版本)、Boost(这个是在安装opencv依赖的时候安装的)
opencv安装之前安装好Glog(下面有说怎么装)
opencv使用cmake-gui进行编译、安装,因为需要对应得Opencv_Contrib
opencv相关依赖:
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
opencv使用cmake-gui编译的时候勾选:BUILD_opencv_world和NONFREE、以及在CMAKE_BUILD_TYPE后填上:RELEASE、在OPENCV_EXTRA_MODULES_PATH后填上opencv-contrib/modules的路径。
1.GCC-4.7、G++ -4.7
首先在GitHub上download下源码:superpixel-benchmark
下载后打开文件夹可以看到有一个docs文件夹,其中就是关于如何配置以及使用benchmark的方法。在BUILDING.md中可以看到配置前系统需要装MATLAB以及Java等软件和包。MATLAB版本不能过高(感谢师兄的指导),此处使用MATLAB2014a。因为MATLAB2014a与GCC/G++ 4.7.X这个版本相匹配,因此先检查自己Ubuntu16.04的GCC/G++的版本,如果不是GCC/G++ 4.7.X ,请卸载GCC\G++
查看:
gcc --version // 查看gcc版本
g++ --version // 查看g++版本
卸载:
sudo apt-get remove gcc // 卸载gcc
sudo apt-get remove g++ // 卸载g++
安装GCC/G++ 4.7.X
sudo apt-get install -y gcc-4.7
sudo apt-get install -y g++-4.7
软连接
cd /usr/bin // 进入/usr/bin文件夹下
sudo rm -r gcc // 移除之前的软连接
sudo ln -sf gcc-4.7 gcc // 建立gcc4.7的软连接
sudo rm -r g++ // 同gcc
sudo ln -sf g++-4.7 g++
完成后再查看一下GCC和G++的版本,看是否安装正确。
2.MATLAB2014a—Linux版本
自行安装
3.Glog安装
Glog下载:Glog 、或者:Glog
下载解压出来后,在解压出来的文件中
执行以下命令安装:
sudo ./configure
sudo make
sudo make install
4.libpng、libpng++、zlib
安装这三个之前需要先装opencv
libpng、libpng++、zlib的下载链接:libpng、libpng++、zlib
我下载的分别为png+±0.2.5.tar.gz、libpng-1.2.53.tar.gz、zlib-1.2.1.tar.gz
安装方法通常为:
sudo ./configure
sudo make
sudo make install
5.Eigen3、CImg、jdk1.8.0_45、pcl
这三个包因为有个别算法要用到(参考docs\BUILDING.md),所以根据使用情况下载。
我下载的Eigen3版本为3.3.91、jdk1.8.0_301、CImg忘了是哪个版本(请根据docs\BUILDING.md中提供的命令下载安装)
下载jdk1.8.0_301在:官网。我下载是Linux x64 Compressed Archive,安装方法自行查找。
pcl:在VCCS这算法中用到了PCL,但是我暂时没安装PCL,暂且不管
二、使用
相关软件和包安装完成后,再根据docs\BUILDING_CIS.md修改一些东西。
先下载CIS,下载后解压,将里面的文件和文件夹全部拷贝到lib_cis中。
拷贝完成后,再根据文档提示修改代码:
第一处:superpixels.cpp(此处指的是lib_cis中的superpixels.cpp)中main函数注释掉。
第二处:将superpixels.cpp中的loadEdges函数的命名改为:
void loadEdges(vector<Value> &weights,int num_pixels,int width,int height,
Value lambda, vlib::image<unsigned char> *edges)
再注释掉loadEdge函数里面的
image<uchar> *edges = loadPGM(name);
第三处:注释掉computeWeights函数(superpixels.cpp)中的
float sigma = 2.0f;
然后在将computeWeights函数名改为
void computeWeights(vector<Value> &weights,int num_pixels,int width,
int height,Value lambda, float variance,
int incrX,int incrY, image<uchar> *I,
int TYPE,float sigma)
第四处:将energy.h(lib_cis文件夹下)中的
add_tweights(y, 0, C);
add_edge(x, y, B+C, 0);
改为:
this->add_tweights(y, 0, C);
this->add_edge(x, y, B+C, 0);
三、一些坑
1.CMakeList的修改
在编译之前,我改了一些CMakeLists(superpixel_benchmark根目录下的CMakeLists.txt)的配置,我只留了3个OFF,因为superpixel_benchmark下载后,lib_refh和lib_reseeds两个文件夹下没有相关库文件,我暂时没去找,所以就先不构建reSEEDS和reFH。VCCS需要PCL库,我暂时也没处理,所以也OFF了。如下图:
2.头文件错误的问题
在DASP算法中,使用到了Eigen3库,但是在程序中头文件可能有问题:例如在lib_dasp/lib_dasp_pds/pds/Fattal.hpp文件中,包含了Eigen3的头文件:#include <Eigen/Dense>。但是我在安装Eigen3的时候,路径为eigen3/Eigen/Dense 因此要改成
#include<eigen3/Eigen/Dense>
这个问题看个人情况,当然不止Fattal.hpp中要改,只要用到Eigen3的文件,都要讲头文件改正确。例如:将#include <Eigen/Eigenvalues> 改为 #include <eigen3/Eigen/Eigenvalues>。
在lib_dasp/lib_dasp/Plots.hpp和lib_dasp/lib_dasp_graphseg/Rendering.hpp 中有这个头文件:#include <GL/glew.h> 。编译的时候可能找不到。找不到是因为没有安装库,此时再执行以下命令安装相关的库:
sudo apt-get install libglew-dbg libglew-dev libglew1.10 libglewmx-dbg libglewmx-dev libglewmx1.13 glew-utils
在lib_cw中用到了cvGetMatSize() 这个函数,但是有可能因为没有包含头文件报错,因此在lib_cw/compact_watershed.h文件中加一句
#include <opencv2/core/internal.hpp>
3.编译的一些坑
将上面的准备工作做完后,在进行cmake编译的时候有可能出现关于Boost的相关错误,比如找不到Boost库,尽管已经安装了,但还是可能报错。我重装系统后重新配置后,解决了这个问题,
cmake编译出现如下则说明cmake成功
cmake如果没有问题的话,接着就make
建议使用 sudo make make -j4 (数字4 表示你设置虚拟机时,选择的内核数量),如果使用sudo make的话 会导致运行MATLAB的时候,权限不够。因为我的MATLAB在安装的时候出现指定用户。
在make的过程中会出现一些警告,比如有些函数或者变量定义了,但是没有使用,或者就是一些类型转换警告,可以不用管。
如果出现Boost相关的error,比如boost某个函数未定义的引用,这就和你安装的boost有管了,网上解决的办法比较少,我TMD直接重装系统。
在解决上面问题后,终于make成功。
make成功后,根目录中会生成一个bin文件夹,里面就是所有生成的可执行文件。
使用方法参考docs/EXECUTABLES.md
四、更新–关于reseeds、refh、vccs三个算法的编译
直接从GitHub上下载作者的代码,可能lib_reseeds、lib_refh两个文件夹里面的库下载不了,需要手动去下载。下载后的reseeds和refh,文件夹里只需要lib这个文件夹的东西(应该是这样,我只用到了lib这个文件夹)。分别将两个lib放入对应放入lib_reseeds、lib_refh文件中,然后在根目录的CMakeList.txt中将reseeds和refh的OFF改为ON。
VCCS算法用到了PCL库,我安装好了PCL-1.7这个版本。在安装PCL之前要安装一些依赖库,可能会和开始配置的时候有些依赖重复,重复的依赖可以安装(安装的时候可能会提醒已经安装,那就不用管了),也可以不再安装。
PCL安装好后,需要先找到PCL的头文件的位置通常会在==usr/include/pcl-1.7/pcl/==下面,自行查找。
记住找到的位置,然后在lib_vccs文件夹下的 vccs_opencv_pcl.cpp文件中将关于pcl头文件修改
例如我的pcl头文件是在 usr/include/pcl-1.7/pcl/,然而 vccs_opencv_pcl.cpp中写的路径是
#include <pcl/point_cloud.h>
需要改为
#include <pcl-1.7/pcl/point_cloud.h>
如果你的路径是usr/include/pcl/,那就不需要改。
然后在根目录下的CMakeList.txt中将VCCS的OFF改为ON,就可以编译了。
五、一些小问题
1.执行compare_fh_refh.sh的时候报错
./bash/compare_fh_refh.sh: Syntax error: "(" unexpected
在终端中输入
sudo dpkg-reconfigure dash
出现一个界面,选择否或者no。
2.运行MATLAB相关算法的时候,需要先运行根目录下的make.m文件。make.m文件中需要修改一些参数,文件开头有如下内容
BUILD_TOOLS = 1;
BUILD_EAMS = 0;
BUILD_NC = 0;
BUILD_QS = 0;
BUILD_SEAW = 0;
BUILD_TP = 0;
BUILT_TPS = 0;
0代表是否编译生成相关算法的配置文件。我将0全部改为1。这样所有使用MATLAB编写的算法都可以使用。或者你要使用哪个算法,就将哪个改为1。
在配置成功后,建议将Ubuntu系统克隆一份出来,或者保存快照。配环境不易,且用且珍惜
暂时完结