zoukankan      html  css  js  c++  java
  • 利用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为画框过后的图片的存储路径。

  • 相关阅读:
    halcon机器视觉工程开发思路
    创建子窗口新线程-线程间操作无效:从不是创建控件的线程访问它
    c#多个按钮执行同一类事件-按钮按下和弹起
    winform子窗口与父窗口的交互-使用委托与事件
    winform子窗口调用父窗口的控件及方法-一般调用
    Lambda表达式的用法
    c#WinForm中TeeChart控件的注册和使用
    c#实现串口通信
    [Revit]开始:编写一个简单外部命令
    [Revit]Autodesk Revit 二次开发整理(资料、准备工作和环境搭建)
  • 原文地址:https://www.cnblogs.com/houjun/p/9847866.html
Copyright © 2011-2022 走看看