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();
}