失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python批量实现labelImg标注的 xml格式数据转换成 txt格式保存

python批量实现labelImg标注的 xml格式数据转换成 txt格式保存

时间:2023-05-19 10:58:58

相关推荐

python批量实现labelImg标注的 xml格式数据转换成 txt格式保存

labelImg标注的 xml格式数据如下:

单个xml文件数据打开如下:

python实现labelImg标注的 xml格式数据转换成 txt格式数据的代码xml2txt.py如下:

# -*- coding: utf-8 -*-import osimport xml.etree.ElementTree as ETdirpath = 'raw_data/xml_raw' # 原来存放xml文件的目录newdir = 'raw_data/txt'# 修改label后形成的txt目录if not os.path.exists(newdir):os.makedirs(newdir)dict_info = {'1': 0, '2': 1, '0': 2} # 有几个 属性 填写几个label namesfor fp in os.listdir(dirpath):if fp.endswith('.xml'):root = ET.parse(os.path.join(dirpath, fp)).getroot()xmin, ymin, xmax, ymax = 0, 0, 0, 0sz = root.find('size')width = float(sz[0].text)height = float(sz[1].text)filename = root.find('filename').textfor child in root.findall('object'): # 找到图片中的所有框sub = child.find('bndbox') # 找到框的标注值并进行读取label = child.find('name').textlabel_ = dict_info.get(label)if label_:label_ = label_else:label_ = 0xmin = float(sub[0].text)ymin = float(sub[1].text)xmax = float(sub[2].text)ymax = float(sub[3].text)try: # 转换成yolov3的标签格式,需要归一化到(0-1)的范围内x_center = (xmin + xmax) / (2 * width)x_center = '%.6f' % x_centery_center = (ymin + ymax) / (2 * height)y_center = '%.6f' % y_centerw = (xmax - xmin) / widthw = '%.6f' % wh = (ymax - ymin) / heighth = '%.6f' % hexcept ZeroDivisionError:print(filename, '的 width有问题')with open(os.path.join(newdir, fp.split('.xml')[0] + '.txt'), 'a+') as f:f.write(' '.join([str(label_), str(x_center), str(y_center), str(w), str(h) + '\n']))print('ok')

转换后完成如下:

单个txt文件数据打开如下:

转载自:/weixin_42812527/article/details/103719299

感谢大佬“后青春诗ing”

如果觉得《python批量实现labelImg标注的 xml格式数据转换成 txt格式保存》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。