caffe-ocr win7+vs2017 cpu编译(非MKL版本)
一、源码下载
1、下载源码,caffe-ocr 项目地址:https://github.com/senlinuc/caffe_ocr;
下载下来如下,caffe-vsproj里是作者建好的工程,工程是vs2015的:
二、编译
1、打开caffe-vsproj中的caffe.sln,因为我的是vs2017打开会提示要升级啥的,就让它升级了。然后工程打开后有三个项目,其中caffe和libclassification两个加载失败,右键项目编辑caffe.vcxproj和libClassification.vcxproj两个修改里面的平台(改140->141),还有两个cuda相关路径删掉,然后重新加载项目就加载成功了。
2、选择 Release和win32,直接编译出现很多错误,作者直接给的库好像64位的,基本不能用。
3、只能自己重新编译那些依赖库
(1)caffe项目:
libprotobuf.lib库,地址:https://github.com/protocolbuffers/protobuf;
gflags.lib,地址:https://github.com/gflags/gflags;
glog.lib,地址:https://github.com/google/glog;
hdf5.lib,hdf5_hl.lib,地址:https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.12/hdf5-1.12.0/bin/;
libopenblas.lib,地址:https://github.com/xianyi/OpenBLAS/releases;
项目属性里修改头文件路径(**\include\,有的路径还到下一层目录,具体缺少哪个头文件源文件夹下搜一下然后添加路径);
lib路径(**\lib\);
附加依赖项(libprotobuf.lib,gflags.lib,glog.lib,hdf5.lib,hdf5_hl.lib,libopenblas.lib);
预处理器定义(WIN32,NDEBUG,_CONSOLE,_LIB,CPU_ONLY,_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING,_CRT_SECURE_NO_WARNINGS,HAVE_CXX11_ATOMIC,GLOG_NO_ABBREVIATED_SEVERITIES,NO_STRICT,WIN32_LEAN_AND_MEAN,NOMINMAX);
链接器-输入-模块定义文件(Source.def删掉);
然后单独编译caffe项目成功;
(2)libclassification项目
用的lib,也是上面编译好的这几个替代作者的那几个,以及include头文件也替代,不过多了一个opencv,我用的是3415,作者是2410,把作者的2410都替代了,也包括2410的opencv include目录头文件。
同上,项目属性里修改头文件路径(**\include\,有的路径还到下一层目录,具体缺少哪个头文件源文件夹下搜一下然后添加路径);
lib路径(**\lib\);
附加依赖项(opencv_world3415.lib,zlib.lib,gflags.lib,glog.lib,libopenblas.lib,libprotobuf.lib,libprotoc.lib,leveldb.lib,hdf5.lib,hdf5_hl.lib,Shlwapi.lib,comctl32.lib);
预处理器定义(WIN32,_CRT_SECURE_NO_WARNINGS,CPU_ONLY,NDEBUG,_WINDOWS,_USRDLL,LIBCLASSIFICATION_EXPORTS,_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING,HAVE_CXX11_ATOMIC);
链接器-输入-模块定义文件(Source.def删掉);
C++ - 预编译头 选择不使用预编译头;
然后单独编译libclassification项目成功,后面再编译更快的MKL版本;
(3)ocr_test项目
项目属性里修改头文件路径(**\include\,有的路径还到下一层目录,具体缺少哪个头文件源文件夹下搜一下然后添加路径);
lib路径(**\lib\);
附加依赖项(libClassification.lib,opencv_world3415.lib);
预处理器定义(WIN32,NDEBUG,_CONSOLE,CPU_ONLY);
链接器-输入-模块定义文件(Source.def删掉);
C++ - 预编译头 选择不使用预编译头;
常规-字符集-选择使用多字节字符集
编译出现map错误,添加#include <map> ,以及修改 //#pragma comment(lib,"libClassificationCPU-MKL.lib") 到 #pragma comment(lib,"libClassification.lib")
,然后单独编译ocr_test项目成功;
三、测试
下载模型文件(https://github.com/senlinuc/caffe_ocr),在此地址里作者给了已经训练好的模型文件下载路径。
修改main函数里的路径,测试如下:
四、下一步编译MKL版本