0.前言
最近读了两篇论文,论文作者开源了一种基于词袋模型DBoW2库的DLoopDetector算法,自己运行demo测试一下
对应论文介绍:Bags of Binary Words for Fast Place Recognition in Image Sequences
开源项目Github地址:https://github.com/dorian3d/DLoopDetector
测试系统为Ubuntu18.04,OpenCV 3.2.0
1.编译项目
编译过程中还是遇到了一些小问题的,主要是在cmakelists.txt上
根据Github上的介绍,要提前安装依赖:
$ sudo apt-get install libboost-dev
将源码文件下载到本地根目录,我这里下载的是release版本中的v1.1-free,解压缩后只保留前面项目的名字即可
进入文件夹中找到CMakelists.txt,打开后发现从第32行开始可以看出,作者的意图是不需要提前安装DBoW2和DLib两个库,在build MakeFile文件时会自动安装编译,那这里就不需要提前安装了
第62行进入了一个if判断,说明要编译的是Demobrief.cpp
# 第62行
add_executable(demo_brief demo/demo_brief.cpp)
target_link_libraries(demo_brief ${OpenCV_LIBS} ${DLib_LIBS} ${DBoW2_LIBS})
所以回到第5行,将后面的OFF切换成ON
option(BUILD_DemoBRIEF "Build demo application with BRIEF features" ON)
CMakelists.txt文件中大概就是这样子,保存后回到项目文件夹打开终端:
$ mkdir build
$ cd build/
$ cmake ..
结束后终端会弹出这两句,说明你之前电脑中确实没有安装过:
DLib library not found in the system, it will be downloaded on build
DBoW2 library not found in the system, it will be downloaded on build
如果你像我一样提前安装了,可以卸载掉,毕竟这两个库我平时不用
卸载方法:去usr/local/include 和 usr/local/lib 中找到相关文件rm -rf,还要去usr/local/lib/cmake下去删除config.cmake配置文件,否则find_package会得到一个空文件一直报错
得到MakeFile文件后进行make编译:
$ make
我遇见的问题是这样的:
通过查看爆红提示可以看到是编译cpp文件的时候找不到DBoW2.h这个头文件,我们先去项目中找一下DBoW2词袋库是否安装成功了,通过locate查找发现在这个路径下是有的:/DLoopDetector/build/dependencies/install/include/DBoW2
以防万一还是要看一下config.cmake中有没有问题
$ cd DLoopDetector/build/dependencies/install/lib/cmake/DBoW2
$ gedit DBoW2Config.cmake
查看一下找的路径,确实没问题,头文件和库文件都存在的
最后没找到什么好办法,于是我想到是不是顺序有问题,于是重新:
$ cmake ..
$ make
竟然成功了…,build文件夹下出现了demo_brief可执行程序
运行缺少resources数据,看到也有人遇到了这个问题:https://github.com/dorian3d/DLoopDetector/issues/14
下载链接:https://drive.google.com/uc?export=download&id=1MpZwPjXDAUxKfSTpeCjG0PAUpaeWuo7D
下载好后直接放到build下面,与demo_brief同一个位置,运行!