利用python对WiderFace数据解析及画框
Posted HOU_JUN
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用python对WiderFace数据解析及画框相关的知识,希望对你有一定的参考价值。
#注:此代码稍作修改也可以用于WFLW人脸数据集的标注文件解析,
#参见其README.md文件了解其每一行的信息,从中解析出相应字
#段即可。
import os import cv2 def draw(image_list,src_img_dir = None, tar_img_dir = None): if not os.path.exists(tar_img_dir): os.mkdir(tar_img_dir) for item in image_list: sub_path = item["path"] path_seg = sub_path.split("/") path = os.path.join(src_img_dir,sub_path) boxes = item["boxes"] img = cv2.imread(path) for box in boxes: ord = box.split(" ") x, y, w, h = int(ord[0]),int(ord[1]),int(ord[2]),int(ord[3]) cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0), 1) tar_dir = os.path.join(tar_img_dir,path_seg[0]) if not os.path.exists(tar_dir): os.mkdir(tar_dir) tar_path = os.path.join(tar_dir,path_seg[1]) cv2.imwrite(tar_path,img) def parse(label_file_path, src_img_dir, tar_img_dir): fr = open(label_file_path,‘r‘) image_list = [] line = fr.readline().rstrip() while line: mdict = {} path = line mdict["path"] = path num = fr.readline().rstrip() boxes_list = [] for n in range(int(num)): box = fr.readline().rstrip() boxes_list.append(box) mdict["boxes"]=boxes_list image_list.append(mdict) line = fr.readline().rstrip() draw(image_list,src_img_dir,tar_img_dir) if __name__=="__main__": file_path = "/projects/DSOD/wider_face/datasets/wider_face_split/wider_face_train_bbx_gt.txt" source_img_dir = "/projects/DSOD/wider_face/datasets/train/images" target_img_dir = "/projects/DSOD/wider_face/datasets/drew" parse(file_path,source_img_dir,target_img_dir)
其中,file_path是标注文件的路径。标注文件内容如下:
1 0--Parade/0_Parade_marchingband_1_849.jpg 2 1 3 449 330 122 149 0 0 0 0 0 0 4 0--Parade/0_Parade_Parade_0_904.jpg 5 1 6 361 98 263 339 0 0 0 0 0 0 7 0--Parade/0_Parade_marchingband_1_799.jpg 8 21 9 78 221 7 8 2 0 0 0 0 0 10 78 238 14 17 2 0 0 0 0 0 11 113 212 11 15 2 0 0 0 0 0 12 134 260 15 15 2 0 0 0 0 0 13 163 250 14 17 2 0 0 0 0 0 14 201 218 10 12 2 0 0 0 0 0 15 182 266 15 17 2 0 0 0 0 0 16 245 279 18 15 2 0 0 0 0 0 17 304 265 16 17 2 0 0 0 2 1 18 328 295 16 20 2 0 0 0 0 0 19 389 281 17 19 2 0 0 0 2 0 20 406 293 21 21 2 0 1 0 0 0 21 436 290 22 17 2 0 0 0 0 0 22 522 328 21 18 2 0 1 0 0 0 23 643 320 23 22 2 0 0 0 0 0 24 653 224 17 25 2 0 0 0 0 0 25 793 337 23 30 2 0 0 0 0 0 26 535 311 16 17 2 0 0 0 1 0 27 29 220 11 15 2 0 0 0 0 0 28 3 232 11 15 2 0 0 0 2 0 29 20 215 12 16 2 0 0 0 2 0 30 0--Parade/0_Parade_marchingband_1_117.jpg 31 9 32 69 359 50 36 1 0 0 0 0 1 33 227 382 56 43 1 0 1 0 0 1 34 296 305 44 26 1 0 0 0 0 1 35 353 280 40 36 2 0 0 0 2 1 36 885 377 63 41 1 0 0 0 0 1 37 819 391 34 43 2 0 0 0 1 0 38 727 342 37 31 2 0 0 0 0 1 39 598 246 33 29 2 0 0 0 0 1 40 740 308 45 33 1 0 0 0 2 1 41 .....................
其中,第一行为图片路径,第二行为框的数量,紧接着是框。
以此类推。详见Widerface README.md文件。
source_dir为存储图片的根目录。
target_dir为画框过后的图片的存储路径。
以上是关于利用python对WiderFace数据解析及画框的主要内容,如果未能解决你的问题,请参考以下文章
win10下用yolov3训练WiderFace数据集来实现人脸检测(TensorFlow版本,darkface作为测试集)
win10下用yolov3训练WiderFace数据集来实现人脸检测(TensorFlow版本,darkface作为测试集)