UMDFaces数据集csv文件处理工具

本文介绍UMDFaces数据集的特性及应用,该数据集包含超过36万张人脸图片,适用于人脸识别研究。文中详细解析了数据集的CSV文件,并提供了处理代码,用于提取人脸特征点、检测框、姿态角和性别信息。

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版本),有需要的可以在我的资源下载


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值