Yolov8数据集 xml 文件转 txt 文件

        Yolo网络的数据集是txt文本,当训练自己的模型时,如果网上找的数据都是xml格式,这时候我们需要对数据进行处理,得到我们想要的数据格式。

一、数据处理流程

        1.读取xml文件,解析xml 得到图片的宽,高,标定框的坐标信息
        2.数据归一化
        3.写入txt文件

二、xml文件数据格式

        如上图所示,是voc数据集中xml文件的数据,我们只需要得到object中的name信息,和size中的width,heightbndbox中的坐标信息。

三、代码

# 导入相关库
import os
from lxml import etree
from tqdm import tqdm


def voc2txt():
    # 获取xml文件夹下的所有xml文件名,存入列表
    xmls_list = os.listdir(xmls_ori_path)
    for xml_name in tqdm(xmls_list):
        # 打开写入文件
        txt_name = xml_name.replace('xml', 'txt')

        f = open(os.path.join(txts_save_path, txt_name), 'w')  # 代开待写入的txt文件
        with open(os.path.join(xmls_ori_path, xml_name), '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])
            # 获取对象标签
            obj = xml.xpath('//object')
            for each in obj:
                name = each.xpath("./name/text()")[0]
                classes = dic[name]
                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')
        f.close()  # 关闭txt文件


if __name__ == '__main__':
    dic = {'cardbord': "0",  # 创建字典用来对类型进行转换
           'glass': "1",     # 此处的字典要与自己的classes.txt文件中的类对应,且顺序要一致
           'metal': "2",
           'paper': "3",
           'plastic': "4",
           'trash': "5",
          }

    xmls_ori_path = r"/test"  # xml文件所在的文件夹
    txts_save_path = r"/txt"  # txt文件所在的文件夹

    os.mkdir(txts_save_path) if not os.path.exists(txts_save_path) else None

    voc2txt()

结论

        以上就是xml转txt文件的全部内容,在使用过程中出现什么问题,可以在评论区留言。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
yolov8xml文件化为txt的方法如下所示: 1. 首先,你需要下载并安装yolov8的代码库。你可以在GitHub上找到这个库。 2. 接下来,你需要准备一个Python脚本来进行换。以下是一个参考代码示例: ```python import xml.etree.ElementTree as ET import os def convert_xml_to_txt(xml_folder, txt_folder): for file in os.listdir(xml_folder): if file.endswith(".xml"): xml_file = os.path.join(xml_folder, file) tree = ET.parse(xml_file) txt_file = os.path.splitext(file)[0 + ".txt" txt_file = os.path.join(txt_folder, txt_file) with open(txt_file, "w") as f: root = tree.getroot() for obj in root.findall("object"): class_name = obj.find("name").text bbox = obj.find("bndbox") xmin = bbox.find("xmin").text ymin = bbox.find("ymin").text xmax = bbox.find("xmax").text ymax = bbox.find("ymax").text f.write(f"{class_name} {xmin} {ymin} {xmax} {ymax}\n") # 使用示例 xml_folder = "/path/to/xml/folder" txt_folder = "/path/to/txt/folder" convert_xml_to_txt(xml_folder, txt_folder) ``` 3. 将上述代码保存为一个Python脚本,并将其中的`/path/to/xml/folder`和`/path/to/txt/folder`替换为你自己的文件夹路径。 4. 运行脚本,它将读取xml文件夹中的所有xml文件,并将它们换为对应的txt文件,保存在txt文件夹中。 请注意,这只是一个简单的示例,可能需要根据你的具体需求进行修改。另外,确保你的xml文件遵循yolov8的标签格式,包括类别名称和边界框坐标。 希望这个方法能帮到你!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [txt数据集格式化为xml数据集格式,yolov5数据集化为coco数据集](https://download.csdn.net/download/u011406896/87757696)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【yolo数据集xml格式txt,划分数据集,亲测有效](https://blog.csdn.net/m0_60798622/article/details/129369371)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值