Makefile编译问题(其实也是C++调用caffe,如何在Linux下编译运行的问题)
博文https://blog.youkuaiyun.com/zxj942405301/article/details/71799279中只给出了MTCNN.h和MTCNN.cpp,需要自己写main.cpp,所以若只是想让编译通过,我写了一个简单的demo:
#include <iostream>
#include "MTCNN.h"
int main(int argc, char const *argv[])
{
/* code */
vector<Mat> alignedFace;
/*这是https://github.com/kpzhang93/MTCNN_face_detection_alignment/tree/master/code/codes/MTCNNv2/model中8个caffemodel、deploy文件所在目录路径*/
const string& modelPath="$/MTCNN_face_detection_alignment/code/codes/MTCNNv2/model";
MTCNN mcnn = MTCNN(modelPath);
Mat img = imread("Jennifer_Aniston_0016.jpg", CV_LOAD_IMAGE_UNCHANGED);
vector<Rect>* faceRects;
alignedFace = mcnn.getFaceRects(img, faceRects);
namedWindow("MyWindow", CV_WINDOW_AUTOSIZE);
imshow("MyWindow", alignedFace);
cout<<"this is a test"<<endl;
waitKey(0);
destroyWindow("MyWindow");
return 0;
}
Makefile文件如下:
# this is a makefile for caffe
TARGET := classify
# caffe directory
CAFFE_DIR := $/caffe-master
# caffe include
CAFFE_INCLUDE := $(CAFFE_DIR)/include
# caffe build
CAFFE_BUILD := $(CAFFE_DIR)/build
# caffe build lib
CAFFE_BUILD_LIB := $(CAFFE_BUILD)/lib
# caffe build src
CAFFE_BUILD_SRC := $(CAFFE_BUILD)/src
# dependency libraries and caffe linking libs
LFLAGS := -pthread -lnsl -lX11
LFLAGS += -lcaffe -lglog -lgflags -lopencv_flann -lprotobuf -lboost_system -lboost_filesystem -lboost_thread -lboost_coroutine -lboost_context -lboost_regex -lm -lhdf5_hl -lhdf5 -lleveldb -lsnappy -llmdb -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_objdetect -lstdc++ -lcblas -latlas
LFLAGS += -Wl,-rpath=$(CAFFE_BUILD_LIB) -L/usr/lib/x86_64-linux-gnu/hdf5/serial
LFLAGS += -L/usr/local/lib -lopencv_core -lopencv_imgcodecs -lopencv_highgui
# rules
CFLAGS := -g -I . -I $(CAFFE_INCLUDE) -I $(CAFFE_DIR)/src -I $(CAFFE_BUILD_SRC) -I/usr/include/hdf5/serial -I ./ -Wall -DCPU_ONLY -DUSE_OPENCV
CC := g++
SRC += main.cpp MTCNN.cpp #这里一定是所有的cpp文件
$(TARGET):$(SRC)
$(CC) -o $(TARGET) -O0 -std=c++11 $(SRC) $(CFLAGS) $(LFLAGS) -L$(CAFFE_BUILD_LIB) -Wno-sign-compare
clean :
@rm -f $(TARGET)
注意:Makefile文件中$(CC) -o $(TARGET)和@rm -f $(TARGET)前都是一个tab键,不能是4个空格
编译步骤:①直接执行make命令;②执行./classify运行