2016.12.14:
代码已知bug:
由于类中有全局变量,声明多个对象时,全局变量指向会改变,造成结果错误并且有内存泄漏。因此该份代码只能声明一个Classifier对象。
新的代码已经重新封装,并且做成多标签输出,下载地址:http://download.youkuaiyun.com/detail/sinat_30071459/9715053
主要修改:http://blog.youkuaiyun.com/sinat_30071459/article/details/53611678
因为caffe-windows-master的代码比较多,看着很乱,所以想到把它封装成一个类来调用做图像分类,这里以GPU版本为例,记录一下自己封装成DLL和如何使用封装后的DLL的过程。
1.打开解决方案
首先,需要修改解决方案配置(默认是Release),我们新建一个叫ReleaseGPU,平台修改为x64(因为用到的其他DLL是64位,配置成win32会出错),如下:
这里我将caffelib的项目名改成了type_recognition_ver2_api_gpu,配置好ReleaseGPU后,右键项目type_recognition_ver2_api_gpu——>属性,配置属性页:
(1)配置属性——常规
(2)C/C++——常规——附加包含目录:
../../3rdparty/include
../../src
../../include
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include
预处理器——预处理器定义添加:
TYPE_RECOGNITION_LINK_SHARED
TYPE_RECOGNITION_API_EXPORTS
(3)链接器——常规——附加库目录:
../../3rdparty/lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\x64
(4)链接器——输入——附加依赖项:
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
comdlg32.lib
advapi32.lib
cudart.lib
cublas.lib
curand.lib
libprotobuf.lib
hdf5_tools.lib
hdf5_hl_fortran.lib
hdf5_fortran.lib
hdf5_hl_f90cstub.lib
hdf5_f90cstub.lib
hdf5_cpp.lib
hdf5_hl_cpp.lib
hdf5_hl.lib
hdf5.lib
zlib.lib
szip.lib
opencv_world300.lib
shlwapi.lib
leveldb.lib
cublas_device.lib
cuda.lib
libglog.lib
lmdb.lib
cudnn.lib
libopenblas.dll.a
libgflags.lib
这样就配置好了。
2.添加文件
(1)添加classfy.h和classify.cpp
//classify.h
#pragma once
#include <caffe/caffe.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highg