Caffe + ROS + OpenCV + Qt creator
最近开始学习caffe的使用,断断续续的终于算是把相关的环境配置的合乎自己的心意了。期间遇到了很多问题,现在来总结一下希望能帮到大家。由于我并没有系统的学习过Cmake这种管理工程的方式,很多的名词来源于自己看各种博客和教程,免不了有很多基本的错误,请大家见谅。
基本介绍:
Caffe:一个开源的深度学习的框架,利用它我们可以很方便的设计,训练,使用自己或他人的模型。
ROS:机器人操作系统,在ROS框架下可以同时运行多个节点,并且各个节点之间能够互相通信。
OpenCV:开源的计算机视觉库。
Qt creator:我把它当成一个集成开发环境在使用。
我是需要在ROS框架下编写程序,程序中会调用caffe和opencv这两个库,同时ubuntu下我习惯使用的IDE是qt creator。
实现方法:
建立工作空间
ros使用的catkin_make命令本质和cmake命令是相同的,能用catkin_make编译的ros包也能用cmake编译。所以整个组织结构按ros的习惯进行:
- 建立工作空间
- 创建相应的功能包
编辑cmakelist.txt:
- 添加OpenCV库:
set(OpenCV_DIR /usr/share/OpenCV)
find_package(catkin REQUIRED
OpenCV
)
- 1
- 2
- 3
- 4
这里,应该是我在安装OpenCV和ROS的时候把它们关联起来了,这样执行catkin_make的时候ROS是在自己的路径下找的。同样的方法是无法找到caffe相应的头文件,库文件的。
2. 添加caffe
set(Caffe_DIR /home/gph/Desktop/caffe_cmake/caffe-master)
find_package(Caffe)
include_directories(${Caffe_INCLUDE_DIRS})
- 1
- 2
- 3
整个cmakelist.txt如下:
cmake_minimum_required(VERSION 2.8.3)
project(usecaffe)
set(Caffe_DIR /home/gph/Desktop/caffe_cmake/caffe-master)
set(OpenCV_DIR /usr/share/OpenCV)
find_package(Caffe)
include_directories(${Caffe_INCLUDE_DIRS})
find_package(catkin REQUIRED
OpenCV
)
catkin_package(
)
include_directories(include
${catkin_INCLUDE_DIRS}
${Caffe_INCLUDE_DIRS}
)
set(CPP_SOURCES src/usecaffe.cpp)
add_executable(usecaffe ${CPP_SOURCES})
target_link_libraries(usecaffe
${catkin_LIBRARIES}
${Caffe_LIBRARIES}
)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
注意:添加caffe的语句一定要在添加OpenCV的语句之前。也就是说,find_package(Caffe)要在find_package(catkin REQUIRED)之前,否则虽然能够编译,但是qt打开时仍然显示找不到caffe的头文件。
利用QT打开:
为了使qt能找到ros相关命令,应该再能够使用ros相关命令的终端里打开qt。我的是直接打开终端,输入qtcreator &
即可;之后选择open project打开编辑过的CMakelist.txt,选择相应的路径保存qt生成的文件;再run cmake,之后点击finish即可。
可以看到,caffe的头文件,opencv的头文件都找到了,同时也能使用caffe的命名空间caffe是不是很方便呢!