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

来源:互联网 发布:淘宝店铺如何刷信誉 编辑:程序博客网 时间:2024/06/05 06:00

在做人脸识别使用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的对应关系了




0 0
原创粉丝点击