Matlab批量读取元胞数组中数据保存到txt文件中(WIDER FACE数据集中,读取人脸标注矩形框信息)

http://blog.csdn.net/xzzppp/article/details/51888603

WIDER FACE:http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/

1、文件说明:

"wider_face_split.zip" 文件包含三个子文件:

wider_face_train.mat, wider_face_val.mat, andwider_face_test.mat.

其中,每个子文件中元胞数组:

The 'event_list'包含61个种类的文件夹名

The 'face_bbx_list' 包含每个种类中图片中人脸的标注矩形框

The 'file_list' 包含每个种类中图片名

标注的矩形框的格式如下:

.

参考地址:http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/support/example/README.txt

 

2、  要求

导出数据为如下格式

格式:event_list\file_list\face_bbx_list


注:

event_list、file_list、face_bbx_list三个元胞数组里面的内容是一一对应的,切记要一一对应。

对应图片:http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/


matlab程序:

[plain]  view plain  copy
  1. %功能描述,读取'wider_face_train.mat'文件中存储的文件夹名、文件图片名及标注矩形框位置(每个图片一行)  
  2. clc;clear;  
  3. wider_face_val = load('wider_face_val.mat')  %加载'wider_face_val.mat'文件  
  4. fid = fopen('val.txt','w');  %以只读方式打开文件'val.txt'  
  5. for i = 1:61  %文件夹个数  
  6.     num_j = length(wider_face_val.file_list{i,1})  %每个文件夹中图片个数  
  7.     for j = 1:num_j  %遍历每个文件夹中图片  
  8.         %[num_k, num_un] = size(wider_face_val.face_bbx_list{i,1}{j,1})  %取每个图片中人脸个数,即标注矩形框个数  
  9.         fprintf(fid, '%s%s', wider_face_val.event_list{i,1},'\');  %写入文件夹名  
  10.         fprintf(fid, '%s%s ', wider_face_val.file_list{i,1}{j,1},'.jpg');  %写入图片名  
  11.         fprintf(fid, '%g ', wider_face_val.face_bbx_list{i,1}{j,1});  %写入标注矩形框坐标  
  12.         fprintf(fid, '\n');  %换行  
  13.     end  
  14. end  
  15. fclose(fid);  %关闭文件  

[plain]  view plain  copy
  1. %功能描述,读取'wider_face_train.mat'文件中存储的文件夹名、文件图片名及标注矩形框位置(每个人脸矩形框一行)  
  2. clc;clear;  
  3. wider_face_train = load('wider_face_train.mat')  %加载'wider_face_train.mat'文件  
  4. fid = fopen('train.txt','w');  %以只读方式打开文件'train.txt'  
  5. for i = 1:61  %文件夹个数  
  6.     num_j = length(wider_face_train.file_list{i,1})  %每个文件夹中图片个数  
  7.     for j = 1:num_j  %遍历每个文件夹中图片  
  8.         [num_k, num_un] = size(wider_face_train.face_bbx_list{i,1}{j,1})  %取每个图片中人脸个数,即标注矩形框个数  
  9.         if num_k == 1  
  10.             fprintf(fid, '%s%s', wider_face_train.event_list{i,1},'\');  %写入文件夹名  
  11.             fprintf(fid, '%s%s ', wider_face_train.file_list{i,1}{j,1},'.jpg');  %写入图片名  
  12.             fprintf(fid, '%g ', wider_face_train.face_bbx_list{i,1}{j,1});  %写入标注矩形框坐标  
  13.             fprintf(fid, '\n');  %换行  
  14.         else  
  15.             for k = 1:num_k  %遍历每个图片中标注框  
  16.                 %a =  wider_face_train.face_bbx_list{i,1}{j,1}( k, :);  
  17.                 fprintf(fid, '%s%s', wider_face_train.event_list{i,1},'\');  
  18.                 fprintf(fid, '%s%s ', wider_face_train.file_list{i,1}{j,1},'.jpg');  
  19.                 fprintf(fid, '%g ', wider_face_train.face_bbx_list{i,1}{j,1}( k, :));  %写入该图片中第k个标注框位置  
  20.                 fprintf(fid, '\n');  
  21.             end  
  22.         end  
  23.     end  
  24. end  
  25. fclose(fid);  %关闭文件  
[plain]  view plain  copy
  1. %功能描述:读取'wider_face_train.mat'文件中存储的图片名及标注矩形框位置(每个人脸矩形框一行)  
  2. %格式形如“name.jpg x y x+w y+h”,且x,y,w,h都为整数    
  3. clc;clear;  
  4. wider_face_train = load('wider_face_train.mat');  
  5. fid = fopen('11.txt','w');  
  6. for i = 1:61  
  7.     num_j = length(wider_face_train.file_list{i,1});  
  8.     for j = 1:num_j  
  9.         [num_k, num_un] = size(wider_face_train.face_bbx_list{i,1}{j,1});  
  10.         if num_k == 1  
  11.             %fprintf(fid, '%s%s', wider_face_val.event_list{i,1},'\');  
  12.             fprintf(fid, '%s%s ', wider_face_train.file_list{i,1}{j,1},'.jpg');  
  13.             fprintf(fid, '%g ', int16(wider_face_train.face_bbx_list{i,1}{j,1}( num_k, 1 )));  
  14.             fprintf(fid, '%g ', int16(wider_face_train.face_bbx_list{i,1}{j,1}( num_k, 2 )));  
  15.             fprintf(fid, '%g ', int16(wider_face_train.face_bbx_list{i,1}{j,1}( num_k, 1 ) + wider_face_train.face_bbx_list{i,1}{j,1}( num_k, 3 )));  
  16.             fprintf(fid, '%g', int16(wider_face_train.face_bbx_list{i,1}{j,1}( num_k, 2 ) + wider_face_train.face_bbx_list{i,1}{j,1}( num_k, 4 )));  
  17.             fprintf(fid, '\n');  
  18.         else  
  19.             for k = 1:num_k  
  20.                 %fprintf(fid, '%s%s', wider_face_val.event_list{i,1},'\');  
  21.                 fprintf(fid, '%s%s ', wider_face_train.file_list{i,1}{j,1},'.jpg');  
  22.                 fprintf(fid, '%g ', int16(wider_face_train.face_bbx_list{i,1}{j,1}(  k, 1 )));  
  23.                 fprintf(fid, '%g ', int16(wider_face_train.face_bbx_list{i,1}{j,1}(  k, 2 )));  
  24.                 fprintf(fid, '%g ', int16(wider_face_train.face_bbx_list{i,1}{j,1}(  k, 1 ) + wider_face_train.face_bbx_list{i,1}{j,1}(  k, 3 )));  
  25.                 fprintf(fid, '%g', int16(wider_face_train.face_bbx_list{i,1}{j,1}(  k, 2 ) + wider_face_train.face_bbx_list{i,1}{j,1}(  k, 4 )));  
  26.                 fprintf(fid, '\n');  
  27.             end  
  28.         end  
  29.     end  
  30. end  
  31. fclose(fid);  

[plain]  view plain  copy
  1. %功能描述:读取'wider_face_train.mat'文件中存储的图片名及标注矩形框位置(每个人脸矩形框一行)  
  2. %格式形如“name.jpg x y w h”,且x,y,w,h都为整数  
  3. %要求:去掉x,y小于0,且w,h为0的人脸框  
  4. clc;clear;  
  5. wider_face_train = load('wider_face_val.mat');  
  6. fid = fopen('val_chenqi.txt','w');  
  7. for i = 1:61  
  8.     num_j = length(wider_face_train.file_list{i,1});  
  9.     for j = 1:num_j  
  10.         [num_k, num_un] = size(wider_face_train.face_bbx_list{i,1}{j,1});  
  11.         if num_k == 1  
  12.             %fprintf(fid, '%s%s', wider_face_val.event_list{i,1},'\');  
  13.             if int16(wider_face_train.face_bbx_list{i,1}{j,1}( num_k, 3 ))==0 | int16(wider_face_train.face_bbx_list{i,1}{j,1}( num_k, 4 ))==0  
  14.                 continue;  
  15.             end  
  16.             a1 = int16(wider_face_train.face_bbx_list{i,1}{j,1}( num_k, 1 ));  
  17.             if a1 < 0  
  18.                 a1 = 0;  
  19.             end  
  20.             b1 = int16(wider_face_train.face_bbx_list{i,1}{j,1}( num_k, 2 ));  
  21.             if b1 < 0  
  22.                 b1 = 0;  
  23.             end  
  24.             fprintf(fid, '%s%s ', wider_face_train.file_list{i,1}{j,1},'.jpg');  
  25.             fprintf(fid, '%g ', a1 );  
  26.             fprintf(fid, '%g ', b1 );  
  27.             fprintf(fid, '%g ', int16(wider_face_train.face_bbx_list{i,1}{j,1}( num_k, 3 )));  
  28.             fprintf(fid, '%g',  int16(wider_face_train.face_bbx_list{i,1}{j,1}( num_k, 4 )));  
  29.             fprintf(fid, '\n');  
  30.         else  
  31.             for k = 1:num_k  
  32.                 %fprintf(fid, '%s%s', wider_face_val.event_list{i,1},'\');  
  33.                 if int16(wider_face_train.face_bbx_list{i,1}{j,1}( k, 3 ))==0 | int16(wider_face_train.face_bbx_list{i,1}{j,1}( k, 4 ))==0  
  34.                     continue;  
  35.                 end  
  36.                 a2 = int16(wider_face_train.face_bbx_list{i,1}{j,1}( k, 1 ));  
  37.                 if a2 < 0  
  38.                     a2 = 0;  
  39.                 end  
  40.                 b2 = int16(wider_face_train.face_bbx_list{i,1}{j,1}( k, 2 ));  
  41.                 if b2 < 0  
  42.                     b2 = 0;  
  43.                 end  
  44.                     fprintf(fid, '%s%s ', wider_face_train.file_list{i,1}{j,1},'.jpg');  
  45.                     fprintf(fid, '%g ', a2 );  
  46.                     fprintf(fid, '%g ', b2 );  
  47.                     fprintf(fid, '%g ', int16(wider_face_train.face_bbx_list{i,1}{j,1}(  k, 3 )));  
  48.                     fprintf(fid, '%g',  int16(wider_face_train.face_bbx_list{i,1}{j,1}(  k, 4 )));  
  49.                     fprintf(fid, '\n');  
  50.             end  
  51.         end  
  52.     end  
  53. end  
  54. fclose(fid);  

你可能感兴趣的:(MATLAB,人脸检测,机器学习)