https://www.cnblogs.com/louyihang-loves-baiyan/archive/2016/05/14/5493344.html
在上一篇文章中御板,我們是將對(duì)caffe的調(diào)用隔離了出來茁肠,可以說相當(dāng)于原來caffe源碼下的tools中cpp文件使用相同季惩,然后自己寫了個(gè)CMakeLists.txt進(jìn)行編譯。這里是進(jìn)一步將代碼進(jìn)行分離掘剪,封裝成libfaster_rcnn.so文件進(jìn)行使用平委。對(duì)于部分接口,我可能做了一些改動(dòng)夺谁。
目錄結(jié)構(gòu)
├── CMakeLists.txt
├── lib
│?? ├── CMakeLists.txt
│?? ├── faster_rcnn.cpp
│?? ├── faster_rcnn.hpp
├── main.cpp
├── pbs_cxx_faster_rcnn_demo.job
在這里main.cpp就是直接調(diào)用faster_rcnn.cpp的接口廉赔,他的內(nèi)容也很簡單,只是在之前的基礎(chǔ)上,再加上libfaster_rcnn.so這個(gè)動(dòng)態(tài)庫文件
#include "faster_rcnn.hpp"
int main()
{
? ? string model_file = "/home/lyh1/workspace/py-faster-rcnn/models/pascal_voc/VGG_CNN_M_1024/faster_rcnn_alt_opt/faster_rcnn_test.pt";
? ? string weights_file = "/home/lyh1/workspace/py-faster-rcnn/output/default/yuanzhang_car/vgg_cnn_m_1024_fast_rcnn_stage2_iter_40000.caffemodel";
? ? int GPUID=0;
? ? Caffe::SetDevice(GPUID);
? ? Caffe::set_mode(Caffe::GPU);
? ? Detector det = Detector(model_file, weights_file);
? ? det.Detect("/home/lyh1/workspace/py-faster-rcnn/data/demo/car.jpg");
? ? return 0;
}
可以看到這里只是include了faster_rcnn.hpp頭文件匾鸥,其對(duì)應(yīng)的CMakeLists.txt文件如下:
#This part is used for compile faster_rcnn_demo.cpp
cmake_minimum_required (VERSION 2.8)
project (main_demo)
add_executable(main main.cpp)
include_directories ( "${PROJECT_SOURCE_DIR}/../caffe-fast-rcnn/include"
? ? "${PROJECT_SOURCE_DIR}/../lib/nms"
? ? "${PROJECT_SOURCE_DIR}/lib"
? ? /share/apps/local/include
? ? /usr/local/include
? ? /opt/python/include/python2.7
? ? /share/apps/opt/intel/mkl/include
? ? /usr/local/cuda/include )
target_link_libraries(main /home/lyh1/workspace/py-faster-rcnn/faster_cxx_lib/lib/libfaster_rcnn.so
? ? /home/lyh1/workspace/py-faster-rcnn/caffe-fast-rcnn/build/lib/libcaffe.so
? ? /home/lyh1/workspace/py-faster-rcnn/lib/nms/gpu_nms.so
? ? /share/apps/local/lib/libopencv_highgui.so
? ? /share/apps/local/lib/libopencv_core.so
? ? /share/apps/local/lib/libopencv_imgproc.so
? ? /share/apps/local/lib/libopencv_imgcodecs.so
? ? /share/apps/local/lib/libglog.so
? ? /share/apps/local/lib/libboost_system.so
? ? /share/apps/local/lib/libboost_python.so
? ? /share/apps/local/lib/libglog.so
? ? /opt/rh/python27/root/usr/lib64/libpython2.7.so
? ? )
對(duì)于faster_rcnn.hpp和faster_rcnn.cpp?蜡塌,我們需要將他們編譯成動(dòng)態(tài)庫,下面是他們對(duì)應(yīng)的CMakeLists.txt勿负,在文件中馏艾,可以看到跟上面這個(gè)區(qū)別是用了add_library語句,并且加入了SHARED關(guān)鍵字笆环,SHARED代表動(dòng)態(tài)庫攒至。其次厚者,在編譯動(dòng)態(tài)庫的過程中躁劣,是不需要鏈接的,但是我們知道這個(gè)庫是依賴別的很多個(gè)庫的库菲,所以在最后形成可執(zhí)行文件也就是上面這個(gè)CMakeLists.txt账忘,我們需要添加這個(gè)動(dòng)態(tài)庫所依賴的那些動(dòng)態(tài)庫,至此就OK了熙宇。編譯的話鳖擒,非常傻瓜cmake .然后在執(zhí)行make即可。
cmake_minimum_required (VERSION 2.8)
SET (SRC_LIST faster_rcnn.cpp)
include_directories ( "${PROJECT_SOURCE_DIR}/../../caffe-fast-rcnn/include"
? ? "${PROJECT_SOURCE_DIR}/../../lib/nms"
? ? /share/apps/local/include
? ? /usr/local/include
? ? /opt/python/include/python2.7
? ? /share/apps/opt/intel/mkl/include
? ? /usr/local/cuda/include )
add_library(faster_rcnn SHARED ${SRC_LIST})
首先將原來的cpp文件中的聲明提取出來烫止,比較簡單蒋荚,就是hpp文件對(duì)應(yīng)cpp文件。如下: