前言
此篇博文将详细记录如何使用Eclipse C++运行并调试SSD代码,博主针对的是ssd_detect.cpp这个C++检测代码,而非SSD(caffe)框架本身。
一个现实问题是,在caffe文件夹下,调试cpp代码显得很困难,每次都要重新编译整个caffe,如想方便地调试和改写代码,其中简便的办法就是使用IDE。因此,对于大型C++工程而言,十分需要把SSD(caffe)作为一个可调用的库,通过写自己的cpp程序来调用caffe的接口函数,实现一整套的检测流程。
博主看了不少关于caffe for eclipse的文章,感觉都没有把整个过程说明白,有些教程甚至是错误的,于是决定成功实现后,自己动手写一篇。本教程适用于原版caffe和衍生的SSD项目,核心内容是如何在eclipse C++上配置SSD所需的caffe环境,以调用caffe C++接口。
安装编译SSD框架
首先需要成功编译SSD源代码,具体过程可以参看之前的博文 SSD:Single Shot MultiBox Detector的安装配置和运行 。
$ git clone https://github.com/weiliu89/caffe.git
$ cd caffe
$ git checkout ssd
$ cp Makefile.config.example Makefile.config
# 注意修改Makefile和makefile.config文件
$ make -j8
$ make distribute # 正常使用无需,本次试验必须
$ make pycaffe # 可选
下载安装Eclipse for C++
首先需要正确安装eclipse for C++,一般而言,不推荐使用apt-get的形式安装(会安装很多不必要的文件),我们去官网下载Eclipse IDE for C/C++ Developers ,选择64位的压缩包,解压后将得到的eclipse文件夹放在常用目录下,我是放在了/home目录下。
运行软件之前需要安装openjdk,因为eclipse是基于java语言的IDE,必须有java运行环境的支持,可以终端输入java -version
来查看,如确实未安装的话,可通过如下命令安装:
# 不开发java软件,就只需要java运行环境(Java Runtime Environment)
$ sudo apt-get install openjdk-8-jre
然后运行软件./eclipse/eclipse
,现在就可以打开eclipse。
安装OpenCV-2.4.9
下载并编译源码
ssd_detect.cpp的代码中用到了opencv作为图像处理的库,由于博主caffe编译中所使用的opencv是通过apt-get的形式安装的,其安装位置不在/usr/local中,故而eclipse这种IDE是无法正常调用的。所以我们必须下载opencv源码进行安装。
这里吐槽下,百度查到的那些Ubuntu系统安装opencv的教程都坑的不行,经过反复试验,才终于找到了正确安装方法。
首先下载opencv源代码,版本没那么重要,但必须是opencv2的,这里选择了最多使用的opencv-2.4.9 ,下载压缩包,解压到常用文件夹,这里我的路径是~/tempfile文件夹中。
# 首先安装opencv所需依赖包
$ sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg62-dev libtiff5 libtiff5-dev cmake cmake-gui libswscale-dev libjasper-dev
$ cd ~/tempfile/opencv-2.4.9
$ mkdir build
$ cd build
$ cmake-gui
说明一下 ,许多教程包括opencv官网教程,都使用的是cmake直接配置,但是这样做,后面的make过程中往往会报错。因此我们使用cmake-gui工具进行配置,运行语句,出现如下的界面。
按照上图格式填写路径,然后点击Configure ,就会出现很多编译选项,重点来了,把WITH_CUDA和BUILD_opencv_gpu 这两个选项去掉,原因是用不到以及编译过程中会疯狂报错。然后点击Generate,再使用make命令编译安装,可以确保成功。
$ make -j8
$ sudo make install
默认安装位置就是/usr/local,不要修改。成功安装后,opencv的源文件和链接库文件分别存放在/usr/local/include 以及/usr/local/lib 之中。
配置OpenCV环境变量
这一步不是必须的,建议先使用程序测试openCV是否能使用,如果能用,貌似不加环境变量也行。
$ cd ~
$ gedit .profile # 打开文件
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig # 文件最后添加此句
# 保存并退出文件
$ source /etc/profile # 使环境变量生效
$ sudo gedit /etc/ld.so.conf.d/opencv.conf # 打开并新建文件
/usr/local/lib # 空白文件内加入此句
# 保存并退出文件
$ sudo ldconfig # 使opecv的lib路径生效
经过上述流程,就可以在eclipse中使用opencv了,当然,仍需配置相应的include路径和lib文件。
安装glog,gflags,boost库
有朋友可能要问了,既然caffe都编译通过了,说明这三个库已经安装,为什么还要再重新单独安装呢?原因和上面的opencv类似,博主安装caffe参考教程是:ubuntu16.04+nvidia gt740m+cuda7.5+caffe安装、测试经历 ,在测试中,使用apt-get安装的这三个库在eclipse中无法调用,编译文件报错,如下图所示,这决定了我必须单独安装这三个库。
当然。如果你能正确识别相关函数,也可以不用安装;否则,请按照以下说明进行源码安装,默认安装位置都是/usr/local。
安装glog
glog是Google发布的一个开源日志库,在caffe中主要起到记录日志的作用,以便开发者查看caffe运行的中间输出结果。我们下载glog-0.3.3.tar.gz 版本,解压到常用文件夹,然后进行安装。
$ cd ~/tempfile/glog-0.3.3
$ ./configure
$ make -j8
$ sudo make install
安装gflags
gflags是Google发布的命令行参数工具,在caffe中主要作用是解析命令行参数,和protobuffer功能类似。我们下载gflags 2.2.0 版本,经测试2.1.1的版本make过程中出错,2.2.0则正常,解压到常用文件夹,然后安装。
$ cd ~/tempfile/gflags-2.2.0
$ mkdir build
$ cd build
$ cmake ..
$ ccmake ..
执行ccmake ..
命令后,会出现ccmake配置界面,如下图所示。
这里,将BUILD_SHARE_LIB 选项设为ON ,也有说倒数第二项也要设为ON,但我没设。然后按c键,出现文字界面后按e键返回,然后再按g键生成Makefile,继续安装。
$ make -j8
$ sudo make install
安装boost
boost也是一个很大的C++运行库,在caffe中主要使用了boost中的智能指针,pycaffe也用到了boost python,方便python调用C++模块。我们下载