caffe训练时根据文件名产生类别标号文件c++代码
2016-08-09 10:34
274 查看
caffe训练时,图片分为test集和train集,图片如下:
要产生文件列表
格式如下:
test\300.jpg 3
test\301.jpg 3
test\400.jpg 4
test\401.jpg 4
test\500.jpg 5
test\501.jpg 5
代码如下:
#include "stdafx.h"
#include <string>
#include <io.h>
#include <vector>
#include <iostream>
using namespace std;
/************************************************************************/
/* 获取文件夹下所有文件名
输入:
path : 文件夹路径
exd : 所要获取的文件名后缀,如jpg、png等;如果希望获取所有
文件名, exd = ""
输出:
files : 获取的文件名列表
shao, 20140707
*/
/************************************************************************/
void getFiles(string path, string exd, vector<string>& files)
{
//cout << "getFiles()" << path<< endl;
//文件句柄
long hFile = 0;
//文件信息
struct _finddata_t fileinfo;
string pathName, exdName;
if (0 != strcmp(exd.c_str(), ""))
{
exdName = "\\*." + exd;
}
else
{
exdName = "\\*";
}
if ((hFile = _findfirst(pathName.assign(path).append(exdName).c_str(), &fileinfo)) != -1)
{
do
{
//cout << fileinfo.name << endl;
//如果是文件夹中仍有文件夹,迭代之
//如果不是,加入列表
if ((fileinfo.attrib & _A_SUBDIR))
{
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
getFiles(pathName.assign(path).append("\\").append(fileinfo.name), exd, files);
}
else
{
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
files.push_back(pathName.assign(path).append("\\").append(fileinfo.name));
}
} while (_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
}
void main()
{
cout << "create train and test file list" << endl;
vector<string> files;
char * filePath = "D:\\deep_learning\\caffe-windows-master\\data\\re\\test";
//获取该路径下的所有jpg文件
getFiles(filePath, "jpg", files);
FILE* fp;
string test_file = "D:\\deep_learning\\caffe-windows-master\\examples\\myfile\\test.txt";
errno_t tOk = fopen_s(&fp, test_file.c_str(), "w");
if (0 != tOk){
cout << "fopen_s error:" << tOk << endl;
return;
}
cout << test_file << endl;
int size = files.size();
for (int i = 0; i < size; i++)
{
int pos = files[i].find_last_of("\\");
string fname = files[i].substr(pos + 1);
string f = fname.substr(0, 1);
string row = "test\\" + fname + " " + f;
if (i > 0){
row = "\n" + row;
}
//cout << row << endl;
fputs(row.c_str(), fp);
//cout << "fx="<<files[i].c_str() << endl;
}
fclose(fp);
char * filePath2 = "D:\\deep_learning\\caffe-windows-master\\data\\re\\train";
//获取该路径下的所有jpg文件
//先要清空一下
files.clear();
getFiles(filePath2, "jpg", files);
string train_file = "D:\\deep_learning\\caffe-windows-master\\examples\\myfile\\train.txt";
tOk = fopen_s(&fp, train_file.c_str(), "w");
if (0 != tOk){
cout << "train_file fopen_s error:" << tOk << endl;
return;
}
cout << train_file << endl;
size = files.size();
cout << "train file size="<<size << endl;
for (int i = 0; i < size; i++)
{
int pos = files[i].find_last_of("\\");
string fname = files[i].substr(pos + 1);
string f = fname.substr(0, 1);
string row = "train\\" + fname + " " + f;
if (i > 0){
row = "\n" + row;
}
//cout << row << endl;
fputs(row.c_str(), fp);
//cout << "fx="<<files[i].c_str() << endl;
}
fclose(fp);
getchar();
}
要产生文件列表
格式如下:
test\300.jpg 3
test\301.jpg 3
test\400.jpg 4
test\401.jpg 4
test\500.jpg 5
test\501.jpg 5
代码如下:
#include "stdafx.h"
#include <string>
#include <io.h>
#include <vector>
#include <iostream>
using namespace std;
/************************************************************************/
/* 获取文件夹下所有文件名
输入:
path : 文件夹路径
exd : 所要获取的文件名后缀,如jpg、png等;如果希望获取所有
文件名, exd = ""
输出:
files : 获取的文件名列表
shao, 20140707
*/
/************************************************************************/
void getFiles(string path, string exd, vector<string>& files)
{
//cout << "getFiles()" << path<< endl;
//文件句柄
long hFile = 0;
//文件信息
struct _finddata_t fileinfo;
string pathName, exdName;
if (0 != strcmp(exd.c_str(), ""))
{
exdName = "\\*." + exd;
}
else
{
exdName = "\\*";
}
if ((hFile = _findfirst(pathName.assign(path).append(exdName).c_str(), &fileinfo)) != -1)
{
do
{
//cout << fileinfo.name << endl;
//如果是文件夹中仍有文件夹,迭代之
//如果不是,加入列表
if ((fileinfo.attrib & _A_SUBDIR))
{
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
getFiles(pathName.assign(path).append("\\").append(fileinfo.name), exd, files);
}
else
{
if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
files.push_back(pathName.assign(path).append("\\").append(fileinfo.name));
}
} while (_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
}
void main()
{
cout << "create train and test file list" << endl;
vector<string> files;
char * filePath = "D:\\deep_learning\\caffe-windows-master\\data\\re\\test";
//获取该路径下的所有jpg文件
getFiles(filePath, "jpg", files);
FILE* fp;
string test_file = "D:\\deep_learning\\caffe-windows-master\\examples\\myfile\\test.txt";
errno_t tOk = fopen_s(&fp, test_file.c_str(), "w");
if (0 != tOk){
cout << "fopen_s error:" << tOk << endl;
return;
}
cout << test_file << endl;
int size = files.size();
for (int i = 0; i < size; i++)
{
int pos = files[i].find_last_of("\\");
string fname = files[i].substr(pos + 1);
string f = fname.substr(0, 1);
string row = "test\\" + fname + " " + f;
if (i > 0){
row = "\n" + row;
}
//cout << row << endl;
fputs(row.c_str(), fp);
//cout << "fx="<<files[i].c_str() << endl;
}
fclose(fp);
char * filePath2 = "D:\\deep_learning\\caffe-windows-master\\data\\re\\train";
//获取该路径下的所有jpg文件
//先要清空一下
files.clear();
getFiles(filePath2, "jpg", files);
string train_file = "D:\\deep_learning\\caffe-windows-master\\examples\\myfile\\train.txt";
tOk = fopen_s(&fp, train_file.c_str(), "w");
if (0 != tOk){
cout << "train_file fopen_s error:" << tOk << endl;
return;
}
cout << train_file << endl;
size = files.size();
cout << "train file size="<<size << endl;
for (int i = 0; i < size; i++)
{
int pos = files[i].find_last_of("\\");
string fname = files[i].substr(pos + 1);
string f = fname.substr(0, 1);
string row = "train\\" + fname + " " + f;
if (i > 0){
row = "\n" + row;
}
//cout << row << endl;
fputs(row.c_str(), fp);
//cout << "fx="<<files[i].c_str() << endl;
}
fclose(fp);
getchar();
}
相关文章推荐
- eclipse 下 根据某个类产生对应的测试文件和测试方法的代码
- C++根据文件路径获取文件名
- 同一段C++代码在win下和linux下同时编译时产生的头文件包含问题及解决
- TensorFlow使用C++加载使用训练好的模型,.cc文件代码实现的相关类及方法总结
- C# CLRInsideOut 托管代码与非托管代码互操作,产生相关调用代码的好工具 C++ 头文件转C# 的好工具(转
- 根据文件名或者产生时间获取文件夹得文件顺序
- android打开各种文件代码,根据文件名自动选择打开程序
- C# CLRInsideOut 托管代码与非托管代码互操作,产生相关调用代码的好工具 C++ 头文件转C# 的好工具
- 用C++代码建立和压缩ACCESS数据库文件
- ini文件纯C++读写代码
- 根据文件名或文件扩展名获取文件的默认图标
- 根据文件名或文件扩展名获取文件的默认图标
- 如何根据驱动程序及其安装文件来访问该设备呢(Visual C++ or C++ Builder均可以)
- 根据文件句柄,获取文件名
- 用C++代码建立和压缩ACCESS数据库文件
- 纯 C++ 代码创建并保存 EXCEL 文件
- (深信服笔试题)简单文本文件的过滤高频率单词C++代码
- 根据文件handle获得文件名
- 自动根据视频文件类型选择不同播放器的JAVASCRIPT代码
- 使用Nhibernate.Tool.Hbm2Net来根据HBML文件生成POJO类的代码