将VOC数据集xml标签转为YOLO数据集txt标签

import os
from lxml import etree

# 设置输入的xml文件夹,输出的txt的文件夹的位置
path = "G:/BaiduNetdiskDownload/FallDown/Annotations"   #xml文件夹
write_path = "/BaiduNetdiskDownload/FallDown/labels"    #要存放的txt文件夹

# 切换工作目录
os.chdir(path)

# 获取xml文件夹下的所有文件名
filenames = os.listdir(path)
for filename in filenames:
    # 打开写入文件
    new_name = filename.split('.')[0] + '.txt'
    if not os.path.exists(write_path):
        os.mkdir(write_path)
    f = open(write_path + '\\' + new_name, 'w')
    with open(filename, 'rb') as fp:
        # 开始解析xml文件
        xml = etree.HTML(fp.read())
        width = int(xml.xpath('//size/width/text()')[0])
        height = int(xml.xpath('//size/height/text()')[0])
        if width == 0 or height == 0:
            continue
        # 获取对象标签
        obj = xml.xpath('//object')
        print(len(obj))
        for each in obj:
            name = each.xpath("./name/text()")[0]
            if name == 'down':                    #xml中的标签名称,有几类标签写几个
                classes = 0
            if name == 'person':
                classes = 1
            if classes == 0 or classes == 1:
                xmin = int(each.xpath('./bndbox/xmin/text()')[0])
                xmax = int(each.xpath('./bndbox/xmax/text()')[0])
                ymin = int(each.xpath('./bndbox/ymin/text()')[0])
                ymax = int(each.xpath('./bndbox/ymax/text()')[0])

                # 归一化(可选)
                dw = 1 / width
                dh = 1 / height
                x_center = (xmin + xmax) / 2
                y_center = (ymax + ymin) / 2
                w = (xmax - xmin)
                h = (ymax - ymin)
                x, y, w, h = x_center * dw, y_center * dh, w * dw, h * dh
                # 写入
                f.write(str(classes) + ' ' + str(x) + ' ' + str(y) + ' ' + str(w) + ' ' + str(h) + ' ' + '\n')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lucky169

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值