ORL人脸库的遍历及CSV按标准排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014045708/article/details/71941207

在做人脸识别使用ORL人脸库进行训练时,往往会遇到遍历图片生成CSV文件来训练人脸。那么我来整理一下ORL人脸库的遍历及CSV按标准排序。

1.准备工作

1.ORL人脸库,动手去搜吧

2.动手解压到该名字的文件夹,不要直接解压到当前文件夹,不然会散称40个人脸文件夹

3.Win+R,进入到你解压的人脸库;输入命令:dir /b >name.xls

4.打开xls,就会如上图所示如果用下面的代码遍历,CSV文佳就会按照这个顺序排列,所以我们需要稍作处理,然后在C列输入:="ren "&A1&" "&B1&""

               

5.将C列的代码复制,新建文本,改后缀为.bat,编辑并保存,双击运行.bat即可;你会发现,1号还是1号,3号还是3号,这就是批量改名,改完后请把.xls与.bat删除,因为等会会遍历这个文件夹

2.代码工作

#define READ_CSV_FILE "at.txt",这是将要遍历到的CSV的文件,我只是要方便用,所以用宏定义
void travelFaceFile()
{
	int num = 1;
	char* filepath = "D:\\Temp\\ORLFaceData";
	vector<string> files;
	vector <int> labels;
	ofstream off(READ_CSV_FILE, ios::out);
	getFiles(filepath, files,labels,num);
	char str[30];
	int size = files.size();
	for (int i = 0; i < size; i++)
	{
		off << files[i].c_str();
		off << ";";
		off << labels[i];
		off << "\n";
	}
	off.close();
	return ;
}
下面 这段代码就是网上流传较广的C++遍历ORL的文件 代码,我只是将其修改成适合我用,你们可以参考 
void getFiles(string path, vector<string>&files, vector<int>&labels,int &num)
{
	long hFile = 0;
	
	struct _finddata_t fileinfo;
	string p;
	if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)
	{
		do
		{
			//如果是目录,迭代之  
            		//如果不是,加入列表  
			if ((fileinfo.attrib &_A_SUBDIR))
			{
				if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
				{
					getFiles(p.assign(path).append("\\").append(fileinfo.name), files,labels,num);
					num++;
				}	
			}
			else
			{
				files.push_back(p.assign(path).append("\\").append(fileinfo.name));
				labels.push_back(num);
			}
		} while (_findnext(hFile,&fileinfo)==0);
		_findclose(hFile);
	}
}
收工了,你看项目下的at.txt ,就是按序排列了,就不用记label与Image的对应关系了




猜你喜欢

转载自blog.csdn.net/u014045708/article/details/71941207