利用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为画框过后的图片的存储路径。

原文地址:https://www.cnblogs.com/houjun/p/9847866.html

时间: 2024-10-11 03:22:05

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

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

1.索引上的合并 有时候,DataFrame中的连接键位于其索引中.在这种情况下,你可以传入left_index = True或right_index = True(或两个都传)以说明索引应该被用作连接键: In [8]: left1 = pd.DataFrame({'key': ['a', 'b', 'a', 'a', 'b', 'c'], ...: 'value':range(6)}) In [9]: right1 = pd.DataFrame({'group_val':[3.5, 7]},

利用Python对二进制数据进行按位处理

最近在用Python做数据包解析,遇到一些要按位处理二进制数据的问题.折腾了一个早上,大概有一点思路,记下来备忘吧. 我要解决的问题是判断一个字节的某几位是否为特定的值,比如判断一个字节的前四位是不是0110. 首先,创建一个文档,里面随便写点东西,保存之后用可以查看二进制数据的软件打开,我用的是notepad++里的HEX-Editor插件. 可以看到字符'a'对应的二进制数据是61(01100001).下面对这个字节的数据进行处理. 首先是打开文件,用read()函数读进去一个字节,用16进

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

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

利用Python将excel数据读取到word表格

在工作中可能需要两者对excel和word进行转化,今天介绍例如Python 将excel转word表格 看图,我需要将这份excel文档转word表格: 思路: 1.创建需要的表格: 2.读取excel文档: 3.将excel文档数据写入word表格对应的位置: 4.循环 需要用到的模块 创建表格,由于我需要的表格需要进行合并处理,所以使用merge合并单元格 接下来,读取excel文档数据 然后,将excel数据写入到已创建的word表格中 至此我们就可以将一条excel数据读取到word表

利用python获取股票数据

一.利用pandas API接口 Pandas库提供了专门从财经网站获取金融数据的API接口,可作为量化交易股票数据获取的另一种途径,该接口在urllib3库基础上实现了以客户端身份访问网站的股票数据. 通过查看Pandas的手册可以发现,第一个参数为股票代码,苹果公司的代码为"AAPL",国内股市采用的输入方式“股票代码”+“对应股市”,上证股票在股票代码后面加上“.SS”,深圳股票在股票代码后面加上“.SZ”.DataReader可从多个金融网站获取到股票数据,如“Yahoo! F

Python之JSON数据解析实例:新闻头条

一.接口相关 数据服务商:聚合数据(https://www.juhe.cn/) API部分文档: 完整API文档下载:https://files.cnblogs.com/files/qikeyishu/%E6%96%B0%E9%97%BB%E5%A4%B4%E6%9D%A1.pdf 二.代码实现 view.py:(部分代码-后台) @home.route("/")def index(): # 接口地址(PS:需要用自己的key value) url = 'http://v.juhe.c

利用Python进行数据分析---数据规整化

1.合并数据集 ①.多对一合并 我们需要用到pandas中的merge函数,merge函数默认情况下合并的是两个数据集的交集(inner连接),当然还有其他的参数: how里面有inner.outer.left.right,四个参数可以选择,分别代表:交集,并集,参与合并的左侧DataFrame,以及右侧 当列名对象相同时: df1=pd.DataFrame({'key':['a','c','a','b','a','c','b','c'],'data1':range(8)}) df2=pd.Da

Python爬虫:数据解析 之 xpath

资料: W3C标准:https://www.w3.org/TR/xpath/all/ W3School:https://www.w3school.com.cn/xpath/index.asp 菜鸟教程:https://www.runoob.com/xpath/xpath-tutorial.html xpath教程:http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html XPATH在线测试:http://www.bejson.

SOM网络聚类完整示例(利用python和java)

下面是几个城市的GDP等信息,根据这些信息,写一个SOM网络,使之对下面城市进行聚类.并且,将结果画在一个二维平面上. //表1中,X.为人均GDP(元):X2为工业总产值(亿元):X.为社会消费品零售总额(亿元):x.为批发零售贸易总额(亿元):x.为地区货运总量(万吨),表1中数据来自2002年城市统计年鉴. //城市 X1 X2 X3 Xa X5 北京 27527 2738.30 1494.83 3055.63 30500 青岛 29682 1212.02 182.80 598.06 29