#注:此代码稍作修改也可以用于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是标注文件的路径。标注文件内容如下:

 0--Parade/0_Parade_marchingband_1_849.jpg
1
449 330 122 149 0 0 0 0 0 0
0--Parade/0_Parade_Parade_0_904.jpg
1
361 98 263 339 0 0 0 0 0 0
0--Parade/0_Parade_marchingband_1_799.jpg
21
78 221 7 8 2 0 0 0 0 0
78 238 14 17 2 0 0 0 0 0
113 212 11 15 2 0 0 0 0 0
134 260 15 15 2 0 0 0 0 0
163 250 14 17 2 0 0 0 0 0
201 218 10 12 2 0 0 0 0 0
182 266 15 17 2 0 0 0 0 0
245 279 18 15 2 0 0 0 0 0
304 265 16 17 2 0 0 0 2 1
328 295 16 20 2 0 0 0 0 0
389 281 17 19 2 0 0 0 2 0
406 293 21 21 2 0 1 0 0 0
436 290 22 17 2 0 0 0 0 0
522 328 21 18 2 0 1 0 0 0
643 320 23 22 2 0 0 0 0 0
653 224 17 25 2 0 0 0 0 0
793 337 23 30 2 0 0 0 0 0
535 311 16 17 2 0 0 0 1 0
29 220 11 15 2 0 0 0 0 0
3 232 11 15 2 0 0 0 2 0
20 215 12 16 2 0 0 0 2 0
0--Parade/0_Parade_marchingband_1_117.jpg
9
69 359 50 36 1 0 0 0 0 1
227 382 56 43 1 0 1 0 0 1
296 305 44 26 1 0 0 0 0 1
353 280 40 36 2 0 0 0 2 1
885 377 63 41 1 0 0 0 0 1
819 391 34 43 2 0 0 0 1 0
727 342 37 31 2 0 0 0 0 1
598 246 33 29 2 0 0 0 0 1
740 308 45 33 1 0 0 0 2 1
.....................

其中,第一行为图片路径,第二行为框的数量,紧接着是框。

以此类推。详见Widerface README.md文件。

source_dir为存储图片的根目录。

target_dir为画框过后的图片的存储路径。

利用python对WiderFace数据解析及画框的更多相关文章

  1. 利用python将excel数据解析成json格式

    利用python将excel数据解析成json格式 转成json方便项目中用post请求推送数据自定义数据,也方便测试: import xlrdimport jsonimport requests d ...

  2. 【Python】 用python实现定时数据解析服务(前言)

    一.Why do it? 背景:项目里上传上来的数据都是未解析的数据,而且数据量还算挺庞大的,每天上传的数据有5kw左右,如果用数据库自带的作业来解析的话,数据库会造成严重的阻塞.因此打算把数据读到外 ...

  3. 利用Python读取外部数据文件

      不论是数据分析,数据可视化,还是数据挖掘,一切的一切全都是以数据作为最基础的元素.利用Python进行数据分析,同样最重要的一步就是如何将数据导入到Python中,然后才可以实现后面的数据分析.数 ...

  4. 070.Python聚焦爬虫数据解析

    一 聚焦爬虫数据解析 1.1 基本介绍 聚焦爬虫的编码流程 指定url 基于requests模块发起请求 获取响应对象中的数据 数据解析 进行持久化存储 如何实现数据解析 三种数据解析方式 正则表达式 ...

  5. Python网络爬虫数据解析的三种方式

    request实现数据爬取的流程: 指定url 基于request发起请求 获取响应的数据 数据解析 持久化存储 1.正则解析: 常用的正则回顾:https://www.cnblogs.com/wqz ...

  6. python之xml数据解析

    因为项目需求需要查询一些网站的ALEXA排名,百度后得到的方法是,访问http://data.alexa.com/data?cli=10&dat=snbamz&url=%YOURURL ...

  7. paper 161:python的Json数据解析

    概念 序列化(Serialization):将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以是JSON.XML等.反序列化就是从存储区域(JSON,XML)读取反序列化对象的状态 ...

  8. 利用Python读取json数据并求数据平均值

    要做的事情:一共十二个月的json数据(即12个json文件),json数据的一个单元如下所示.读取这些数据,并求取各个(100多个)城市年.季度平均值. { "time_point&quo ...

  9. 利用Python进行数据分析——数据规整化:清理、转换、合并、重塑(七)(1)

    数据分析和建模方面的大量编程工作都是用在数据准备上的:载入.清理.转换以及重塑.有时候,存放在文件或数据库中的数据并不能满足你的数据处理应用的要求.很多人都选择使用通用编程语言(如Python.Per ...

随机推荐

  1. hdu 1068 Girls and Boys (二分匹配)

    Girls and Boys Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  2. 转:概率主题模型简介 --- ---David M. Blei所写的《Introduction to Probabilistic Topic Models》的译文

    概率主题模型简介 Introduction to Probabilistic Topic Models      转:http://www.cnblogs.com/siegfang/archive/2 ...

  3. [洛谷P3261][JLOI2015]城池攻占

    题目大意:有$n$个点的树,第$i$个节点有一个权值$h_i$,$m$个骑士,第$i$个骑士攻击力为$v_i$,一个骑士可以把从它开始的连续的父亲中比它小的节点攻破,攻破一个节点可以把攻击力加或乘一个 ...

  4. BZOJ3040:最短路——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3040 题意rt,使用pb_ds的堆解决本问题. 所以其实就是mark一下的. 不过有人确认过官方不 ...

  5. 51NOD 1594:Gcd and Phi——题解

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1594 参考及详细推导:http://www.cnblogs.com/ri ...

  6. Consul 入门(二)

    KV 存储 通过命令行操作 $ consul kv put hello world # 设置数据 Success! Data written to: hello $ consul kv get hel ...

  7. CentOS 6.5 下安装 QT 4

    1. 获取下载地址 从我到网盘下载:  qt-creator-opensource-linux-x86_64-3.5.1.run            qt-everywhere-opensource ...

  8. hdu 5616

    Jam's balance Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  9. *和&的使用

    给变量起一个别名: int a = 2; int &b = a; 取a的地址,实参是一个指针: void chage(int *data) { } void main() { int a = ...

  10. Spark Streaming 的一些问题

    Spark Streaming 的一些问题,做选型前关注这些问题可以有效的降低使用风险. checkpoint checkpoint 是个很好的恢复机制.但是方案比较粗暴,直接通过序列化的机制写入到文 ...