linux下让自己的程序调用caffe库

简单的说,caffe并不像opencv那样。有个官方的例程,可以让小伙伴们方便的入手。正因为如此,本文将详细讲解如何在linux下在自己写的工程中调用caffe库。

 

本文测试平台Ubuntu14.04+corei7+TitanX

方式1

如果自己的caffe是用CMakeLists编译安装的,那么就会在/usr/local/lib/cmake/下方生成相应的.cmake的配置文件,这样在其他程序调用CMakeLists的时候就可以,就可以根据这些.cmake文件来找到需要调用的库。

这样的话,可以运行如下的CMakeLists来编译自己的调用了caffe库的程序

 

cmake_minimum_required(VERSION 2.8)
find_package(Caffe)
include_directories(${Caffe_INCLUDE_DIRS})
add_definitions(${Caffe_DEFINITIONS}) 
add_executable(caffeinated_application main.cpp)
target_link_libraries(caffeinated_application ${Caffe_LIBRARIES})

 

只调用opencv的CMakeLists

cmake_minimum_required (VERSION 2.8) 

PROJECT(main)

# Requires OpenCV v2.4.1 or later
FIND_PACKAGE( OpenCV REQUIRED )
IF (${OpenCV_VERSION} VERSION_LESS 2.4.1)
    MESSAGE(FATAL_ERROR "OpenCV version is not compatible : ${OpenCV_VERSION}. requires atleast OpenCV v2.4.1")
ENDIF()

SET(SRC
    main.cpp
)

ADD_EXECUTABLE( ${PROJECT_NAME} ${SRC} )
TARGET_LINK_LIBRARIES( ${PROJECT_NAME}  ${OpenCV_LIBS} )

 

方式2

很不巧,自己的caffe是根据Makefile.config编译的,那么这时候就需要自己指定相应的库的路径了,CMakeLists如下,其中opencv调用的库根据自己的需要添加,将cafferoot替换为自己的caffe根目录,opencvroot替换为自己的opencv根目录

cmake_minimum_required (VERSION 2.8)

project (classification)

add_executable(classification classification.cpp)
include_directories ( /cafferoot/include
    /usr/local/include
    /usr/local/cuda/include )

target_link_libraries(classification / cafferoot /build/lib/libcaffe.so
    /opencvroot /build/lib/libopencv_highgui.so
    / opencvroot /build/lib/libopencv_core.so
    / opencvroot /build/lib/libopencv_imgproc.so
    /usr/local/lib/libglog.so
	/usr/lib/x86_64-linux-gnu/libboost_system.so
    )

或者使用clion编辑器中的CMakeLists,


cmake_minimum_required(VERSION 2.8)
project(classifier)
 
add_definitions("-DUSE_OPENCV")#源码里面有#ifdef USE_OPENCV这样的语句
 
set(Caffe_Root
	/path/caffe#caffe目录,根据实际情况修改
)
set(Caffe_INCLUDE_DIRS 
	${Caffe_Root}/include
	${Caffe_Root}/src
	/usr/local/cuda/include
)
set(Caffe_LIBRARIES
	caffe
	boost_system
	glog
)
 
#add_compile_options(-std=c++11)
 
find_package(OpenCV REQUIRED)
include_directories(
	${Caffe_INCLUDE_DIRS}
	${OpenCV_INCLUDE_DIRS}
	${CMAKE_CURRENT_SOURCE_DIR}
)
 
link_directories(
	${Caffe_Root}/build/lib
)
 
add_library(${PROJECT_NAME} #STATIC | SHARED | MODULE
	${CMAKE_CURRENT_SOURCE_DIR}/classifier.cpp#把分类器编译成链接库
)
#target_link_libraries(${PROJECT_NAME}
#	${OpenCV_LIBS}
#)
 
add_executable(run main.cpp)#把main.cpp编译成可执行文件run
target_link_libraries(run
	${PROJECT_NAME}
	${OpenCV_LIBS}
	${Caffe_LIBRARIES}
)

 

实验测试:

为了测试刚才的CMakeLists的可行性,本文对caffe自带的cafferoot/examples/cpp_classification/(cafferoot为自己电脑的caffe安装的根目录)下面的classification.cpp进行编译,生成相应的exe。

cd cafferoot/examples/cpp_classification/
mkdir build
cd build
cmake ..
make
ls

 

 

方式3

Makefile (sequential)

PROJ = matrix_mul
CC = g++

CFLAGS = -c -g -Wall -I/opt/local/include 
LDFLAGS = -L/opt/local/lib 
LIBS = -lcppunit -ldl
OBJS = $(patsubst %.cpp,%.o,$(wildcard *.cpp))

all: $(PROJ)

$(PROJ): $(OBJS)
        $(CC) $(LDFLAGS) $^ -o $@ $(LIBS) $(VAR)

%.o: %.cpp
        $(CC) $(CFLAGS) $< -o $@

%.o: %.cpp %.h
        $(CC) $(CFLAGS) $< -o $@

clean:
        rm -f $(PROJ) $(OBJS) $(TEST_CASES) *.xml

Makefile (openmp)


PROJ = main
CC = g++

CFLAGS = -c -g -Wall -I/opt/local/include -I$(HOME)/cppunit/include
LDFLAGS = -L/opt/local/lib -L$(HOME)/cppunit/lib
LIBS = -lcppunit -ldl
OBJS = $(patsubst %.c,%.o,$(wildcard *.c))
OMPFLAGS = -fopenmp
SIMDFLAGS = -msse2 -msse3 -mavx -O2 -lm

all: $(PROJ)

$(PROJ): $(OBJS)
        $(CC) $(OMPFLAGS) $(LDFLAGS) $^ -o $@ $(LIBS)

%.o : %.c
        $(CC) $(OMPFLAGS) $(CFLAGS) $< -o $@ $(SIMDFLAGS)

%.o : %.c %.h
        $(CC) $(OMPFLAGS)  $(CFLAGS) $< -o $@ $(SIMDFLAGS)

clean:
        rm -f $(PROJ) $(OBJS)

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值