Tensorflow中用的数据集是mnist,为了方便使用官方代码测试,所以构建自己的数据集,用到了mnisten。因为在ubuntu下编译遇到了很多问题无法解决,所以尝试在windows下编译,已经能成功将自己的数据集转换成mnist格式了。
github仓库
根据Readme提示,我们需要先安装boost以及opencv
安装boost
- 下载boost(我下的是7z版的)
- 解压压缩包,运行bootstrap.bat
- 运行生成出来的b2.exe
使用boost
- 选中当前 project -> Properties -> Configuration Properties -> C/C++ -> General: Additional Include Directories: 设置 J:\boost\boost_1_61_0(因为我下载在J盘的boost下)
- 选中当前 project -> Properties -> Configuration Properties -> Linker -> General: Additional LibraryDirectories: 设置J:\boost61\lib(因为当时我在VS2015 开发人员的命令提示中使用 bjam stage –stagedir=”J:\boost61” link=static runtime-link=shared runtime-link=static threading=multi debug release 来编译,所以lib在J:\boost61\lib文件夹下,如果直接运行b2.exe应该不会这样了)
总之,第一步是设置解压后的文件夹的位置,第二步则是设置编译出来的lib的位置,同时每一个项目都需要像这样配置才能使用boost
测试boost
为了确定boost是否配置完成,我们可以打开vs2015,运行以下代码测试,如果能正常运行则配置完成了(注意:需要在项目中用上述方法配置后才能使用boost)
//#define BOOST_DATE_TIME_SOURCE
#include <iostream>
#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
using namespace std;
using namespace boost::gregorian;
using namespace boost::posix_time;
/************************************************************************
创建微秒级的计时器
************************************************************************/
template <class T = microsec_clock>
class MyTimer
{
private:
ptime m_startTime;
public:
MyTimer()
{
Restart();
}
void Restart()
{
m_startTime = T::local_time();
}
void Elapsed()
{
cout << T::local_time() - m_startTime << endl;
}
};
int main()
{
MyTimer<microsec_clock> t;
for(int i = 0; i < 100; ++i)
{
cout << "hello" << endl;
}
t.Elapsed();
}
安装opencv
- 下载opencv(我安装的是opencv-2.4.13)
- 运行exe文件,安装opencv
配置opencv
在系统变量path中添加路径 ,值为自己解压opencv路径下的bin路径(选择自己vs相应版本的bin目录),例J:\opencv\opencv\build\x86\vc12\bin
Tip: x86和x64分别表示32bit和64bit的VS工程,根据自己的工程来修改,否则虽编译成功但会运行错误;vc10, vc11, vc12 分别表示VS2010, VS2012, VS2013的Visual Studio使用的编译器版本,根据自己的VS版本来填写正确的编译器版本号。
使用opencv
- 选中当前 project -> Properties -> Configuration Properties -> C/C++ -> General: Additional Include Directories: 增加以下
J:\opencv\opencv\build\include
J:\opencv\opencv\build\include\opencv
J:\opencv\opencv\build\include\opencv2
- 选中当前 project -> Properties -> Configuration Properties -> Linker -> General: Additional LibraryDirectories: 增加以下
J:\opencv\opencv\build\x86\vc12\lib
- 选中当前 project -> Properties -> Configuration Properties -> Linker -> 输入 -> 添加“附加依赖项”,增加以下(根据你的opencv版本号来添加)
opencv_calib3d2413d.lib
opencv_contrib2413d.lib
opencv_core2413d.lib
opencv_features2d2413d.lib
opencv_flann2413d.lib
opencv_gpu2413d.lib
opencv_highgui2413d.lib
opencv_imgproc2413d.lib
opencv_legacy2413d.lib
opencv_ml2413d.lib
opencv_nonfree2413d.lib
opencv_objdetect2413d.lib
opencv_photo2413d.lib
opencv_stitching2413d.lib
opencv_ts2413d.lib
opencv_video2413d.lib
opencv_videostab2413d.lib
opencv_calib3d2413.lib
opencv_contrib2413.lib
opencv_core2413.lib
opencv_features2d2413.lib
opencv_flann2413.lib
opencv_gpu2413.lib
opencv_highgui2413.lib
opencv_imgproc2413.lib
opencv_legacy2413.lib
opencv_ml2413.lib
opencv_nonfree2413.lib
opencv_objdetect2413.lib
opencv_photo2413.lib
opencv_stitching2413.lib
opencv_ts2413.lib
opencv_video2413.lib
opencv_videostab2413.lib
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
odbc32.lib
odbccp32.lib
编译mnisten
- 下载mnisten
- 使用vs2015编译即可
其中遇到的一些问题
- error C4996: ‘fopen’: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
解决办法: 选中当前 project -> Properties -> Configuration Properties -> C/C++ -> 预处理器:添加如下保存即可
_CRT_SECURE_NO_WARNINGS - msvcp120d.dll丢失
解决办法: 把这两个msvcp120文件复制到你在第一步设置的Path环境变量路径里,和opencv的dll放在一起(如果没起作用,先将电脑注销或者重启) - 如果在release模式下将mnisten.exe生成出来,我输入路径始终无法找到图片,这有可能是路径的问题,所以我们可以直接在debug模式下运行,在main函数中去除cmd输入相关代码,直接写入图片路径运行即可(注意路径使用/而不是\,否则会找不到图片)