UMDFaces数据集csv文件处理工具

来源:互联网 发布:网络主播招聘文案 编辑:程序博客网 时间:2024/06/05 22:42

UMDFaces数据集:

该数据集包含367920张人脸,分别类属于8501个事件类别。提供的人脸信息包括,人脸框,人脸姿势,(yaw,pitch,roll),21个关键点,性别信息等。由于图片尺度,方向等的问题,使得该数据集不适合做人脸检测的训练,适合做人脸识别。
数据集下载地址,数据集下载地址
该数据集,主要是使用GoogleScraper从网络爬下的图片,作者使用了DP2MFD model(Deep Pyramid Deformable Parts Model for Face Detection)和AMT(AmazonMechanical Turk)详情参考

数据集csv文件处理工具

数据集中包含了三个文件,Umdfaces_files_bc1,Umdfaces_files_bc2,Umdfaces_files_bc3,文件里面

其中文件夹包含了umdfaces_batch1_ultraface.csv 文件

文件里面包含信息: detection confidences, face bounding boxes, ultraface fiducial points, pose, and gender

如今我们需要解析这个文件,使它生成我们需要的数据:人脸特征点,人脸检测框,人脸姿态,和性别.

处理代码如下:

void CprocessImg::dataForUMDFace(string file, string dst){    ifstream infolder;    infolder.open(file);    if (infolder.fail())        return;    string b;    int np = 0;    getline(infolder, b);    while (getline(infolder, b))    {        if (np % 100 == 0)            cout << "文件正在处理中。。。。:" << np << endl;        np++;        vector<string> result;        //数据排序:        //result[1],表示图片名称        //result[4~7] faceRect;        //result[8~10] 角度        //result[11~73] x,y,v        //result[74~75] 性别        for (int k = 0; k < 76; k++)        {            int a = b.find_first_of(",");            string out = b.substr(0, a);            result.push_back(out);            b = b.substr(a + 1);        }        string fileName = result[1];        int pos = fileName.find_last_of("/");//      cout << pos << endl;        string folderName = fileName.substr(0, pos); //获取文件夹        string picName = fileName.substr(pos + 1);  //获取文件名        //创建文件夹        string fder = dst + "/" + folderName;        _mkdir(fder.c_str());        //创建人脸框文件        string faceRect_file = dst + "/" + fileName.replace(fileName.find_last_of("."), 4, ".txt");        ofstream out;        out.open(faceRect_file);        out << result[4] << " " << result[5] << " " << result[6] << " " << result[7] << endl;        //创建特征点文件        string faceLandmarks = dst + "/" + fileName.replace(fileName.find_last_of("."), 4, ".pts");        out.close();        ofstream fl;        fl.open(faceLandmarks);        fl << "version: " << 1 << endl;        fl << "n_points: " << 21 << endl;        fl << "{" << endl;        for (int k = 0; k < 21; k++)        {            fl << result[3 * k + 11] << " " << result[3 * k + 12] << endl;        }        fl << "}" << endl;        fl.close();        //创建姿态角文件        string facePos = dst + "/" + fileName.replace(fileName.find_last_of("."), 4, "_pos.txt");        ofstream posOut;        posOut.open(facePos);        posOut << result[8] << " " << result[9] << " " << result[10];        posOut.close();        //创建性别文件        string faceSet = dst + "/" + fileName.replace(fileName.find_last_of("."), 4, "_sex.txt");        ofstream posSet;        posSet.open(faceSet);        posSet << result[74] << " " << result[75];        posSet.close();    }}

代码验证通过,同时为了方便大家更好的去利用这个数据库,我已经生成可执行文件(win 7版本),有需要的可以在我的资源下载


1 0
原创粉丝点击