Windows下基于VS2013调用caffe的C++接口

   同事用VGG16训练了一个人脸识别的网络,我想试试C++接口,这里做一下记录。

    参考文章如下:

    https://blog.csdn.net/xjz18298268521/article/details/61921357

    https://blog.csdn.net/jiongnima/article/details/70197866

    https://blog.csdn.net/qq_14845119/article/details/52541622 

    按照参考文章的步骤,先用VS2013新建一个工程,将D:\caffe-master\examples\cpp_classification\classificaton.cpp拷贝到工程目录中,然后配置工程。我的caffe依赖库安装在D盘,如下图所示:


我使用GPU,所以我的配置如下:

Release下

包含目录:

D:\caffe-master\include
D:\caffe-master\include\caffe
D:\caffe-master\include\caffe\proto
D:\NugetPackages\boost.1.59.0.0\lib\native\include
D:\NugetPackages\gflags.2.1.2.1\build\native\include
D:\NugetPackages\glog.0.3.3.0\build\native\include
D:\NugetPackages\protobuf-v120.2.6.1\build\native\include
D:\NugetPackages\OpenBLAS.0.2.14.1\lib\native\include
D:\NugetPackages\OpenCV.2.4.10\build\native\include
D:\NugetPackages\LevelDB-vc120.1.2.0.0\build\native\include
D:\NugetPackages\lmdb-v120-clean.0.9.14.0\lib\native\include
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include

库目录:

D:\caffe-master\Build\x64\Release
D:\NugetPackages\boost_date_time-vc120.1.59.0.0\lib\native\address-model-64\lib
D:\NugetPackages\boost_filesystem-vc120.1.59.0.0\lib\native\address-model-64\lib
D:\NugetPackages\boost_thread-vc120.1.59.0.0\lib\native\address-model-64\lib
D:\NugetPackages\boost_system-vc120.1.59.0.0\lib\native\address-model-64\lib
D:\NugetPackages\boost_chrono-vc120.1.59.0.0\lib\native\address-model-64\lib
D:\NugetPackages\glog.0.3.3.0\build\native\lib\x64\v120\Release\dynamic
D:\NugetPackages\protobuf-v120.2.6.1\build\native\lib\x64\v120\Release
D:\NugetPackages\OpenBLAS.0.2.14.1\lib\native\lib\x64
D:\NugetPackages\hdf5-v120-complete.1.8.15.2\lib\native\lib\x64
D:\NugetPackages\OpenCV.2.4.10\build\native\lib\x64\v120\Release
D:\NugetPackages\gflags.2.1.2.1\build\native\x64\v120\dynamic\Lib
D:\NugetPackages\LevelDB-vc120.1.2.0.0\build\native\lib\x64\v120\Release 
D:\NugetPackages\lmdb-v120-clean.0.9.14.0\lib\native\lib\x64  
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64

附加依赖项:

opencv_core2410.lib 
opencv_highgui2410.lib  
opencv_imgproc2410.lib  
caffe.lib  
libcaffe.lib 
gflags.lib 
libglog.lib  
libopenblas.dll.a 
libprotobuf.lib  
leveldb.lib  
lmdb.lib 
hdf5.lib  
hdf5_hl.lib  
libboost_date_time-vc120-mt-s-1_59.lib  
libboost_filesystem-vc120-mt-s-1_59.lib
cublas.lib  
cuda.lib  
cublas_device.lib  
cudnn.lib  
cudadevrt.lib  
cudart.lib  
cudart_static.lib    
cufft.lib  
cufftw.lib  
curand.lib  
cusolver.lib  
cusparse.lib  
nppc.lib  
nppi.lib  
npps.lib  
nvblas.lib  
nvcuvid.lib  
nvrtc.lib

Debug下

包含目录:

D:\caffe-master\include
D:\caffe-master\include\caffe
D:\caffe-master\include\caffe\proto
D:\NugetPackages\boost.1.59.0.0\lib\native\include
D:\NugetPackages\gflags.2.1.2.1\build\native\include
D:\NugetPackages\glog.0.3.3.0\build\native\include
D:\NugetPackages\OpenBLAS.0.2.14.1\lib\native\include
D:\NugetPackages\OpenCV.2.4.10\build\native\include
D:\NugetPackages\protobuf-v120.2.6.1\build\native\include
D:\NugetPackages\LevelDB-vc120.1.2.0.0\build\native\include
D:\NugetPackages\lmdb-v120-clean.0.9.14.0\lib\native\include
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include

库目录:

D:\caffe-master\Build\x64\Debug
D:\NugetPackages\boost_date_time-vc120.1.59.0.0\lib\native\address-model-64\lib
D:\NugetPackages\boost_filesystem-vc120.1.59.0.0\lib\native\address-model-64\lib
D:\NugetPackages\boost_system-vc120.1.59.0.0\lib\native\address-model-64\lib
D:\NugetPackages\boost_thread-vc120.1.59.0.0\lib\native\address-model-64\lib
D:\NugetPackages\boost_chrono-vc120.1.59.0.0\lib\native\address-model-64\lib
D:\NugetPackages\glog.0.3.3.0\build\native\lib\x64\v120\Debug\dynamic
D:\NugetPackages\protobuf-v120.2.6.1\build\native\lib\x64\v120\Debug
D:\NugetPackages\OpenBLAS.0.2.14.1\lib\native\lib\x64  
D:\NugetPackages\hdf5-v120-complete.1.8.15.2\lib\native\lib\x64  
D:\NugetPackages\OpenCV.2.4.10\build\native\lib\x64\v120\Debug
D:\NugetPackages\gflags.2.1.2.1\build\native\x64\v120\dynamic\Lib
D:\NugetPackages\LevelDB-vc120.1.2.0.0\build\native\lib\x64\v120\Debug 
D:\NugetPackages\lmdb-v120-clean.0.9.14.0\lib\native\lib\x64
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64

附加依赖项:

caffe.lib 
compute_image_mean.lib  
convert_imageset.lib  
convert_mnist_data.lib 
libcaffe.lib
opencv_highgui2410d.lib 
opencv_imgproc2410d.lib  
opencv_objdetect2410d.lib  
opencv_core2410d.lib  
opencv_ml2410d.lib  
libboost_date_time-vc120-mt-gd-1_59.lib 
libboost_filesystem-vc120-mt-gd-1_59.lib 
libboost_system-vc120-mt-gd-1_59.lib  
libglog.lib  
hdf5.lib  
hdf5_cpp.lib 
hdf5_f90cstub.lib 
hdf5_fortran.lib 
hdf5_hl.lib  
hdf5_hl_cpp.lib  
hdf5_hl_f90cstub.lib 
hdf5_hl_fortran.lib 
hdf5_tools.lib 
szip.lib 
zlib.lib 
LevelDb.lib 
lmdbD.lib  
libprotobuf.lib  
libopenblas.dll.a  
gflags_nothreadsd.lib  
gflagsd.lib 
cublas.lib  
cuda.lib  
cublas_device.lib  
cudnn.lib  
cudadevrt.lib  
cudart.lib  
cudart_static.lib    
cufft.lib  
cufftw.lib  
curand.lib  
cusolver.lib  
cusparse.lib  
nppc.lib  
nppi.lib  
npps.lib  
nvblas.lib  
nvcuvid.lib  
nvrtc.lib

下一步在  C/C++->预处理器->预处理器定义  添加:_CRT_SECURE_NO_WARNINGS

 接着修改classificaton.cpp,主要是修改main函数,我修改后如下:

int main(int argc, char** argv) {


  ::google::InitGoogleLogging(argv[0]);


  string model_file = "VGG_FACE_deploy.prototxt";
  string trained_file = "model_iter_10000.caffemodel";
  string mean_file    = "face-mean.binaryproto";
  string label_file   = "synset_words.txt";
  string file = "val\\01477.jpg";


  Classifier classifier(model_file, trained_file, mean_file, label_file);


  std::cout << "---------- Prediction for "
            << file << " ----------" << std::endl;


  cv::Mat img = cv::imread(file, -1);
  CHECK(!img.empty()) << "Unable to decode image " << file;
  std::vector<Prediction> predictions = classifier.Classify(img);


  /* Print the top N predictions. */
  for (size_t i = 0; i < predictions.size(); ++i) {
    Prediction p = predictions[i];
    std::cout << std::fixed << std::setprecision(4) << p.second << " - \""
              << p.first << "\"" << std::endl;
  }


  getchar();
  return 0;
}

另外参考文章里的head.h也是要加上的,不然会出错。

编译没问题就可以运行程序了,我的在Release下结果如下:


可以看到一开始有两个warning,我去查了一下,大部分都说这个不影响结果,具体参考下面链接

https://stackoverflow.com/questions/38598452/reading-dangerously-large-protocol-message-caffe-warning

有一点奇怪的是,我的程序在Debug模式下运行出错了,如下所示,现在还没有解决,求高手指点迷津,谢谢。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值