您的位置:首页 > Web前端

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

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  caffe 文件列表 图片