当前位置: 首页 > news >正文

目标检测——清洗数据

清洗VOC格式数据集代码示例

import os
import xml.etree.ElementTree as ET

def process_annotations(image_folder, annotation_folder):
    # 遍历标签文件夹中的所有XML文件
    for xml_file in os.listdir(annotation_folder):
        if not xml_file.endswith('.xml'):
            continue
        
        xml_path = os.path.join(annotation_folder, xml_file)
        tree = ET.parse(xml_path)
        root = tree.getroot()
        
        # 标记是否保留该文件
        keep_file = False
        
        # 遍历所有<object>标签
        for obj in root.findall('object'):
            name = obj.find('name').text
            if name == 'person':  # 需修改,保留哪个类别就写哪个类别
                keep_file = True
            else:
                root.remove(obj)  # 移除非Pedestrian的<object>
        
        # 如果没有Pedestrian类别,删除对应的图片和标签
        if not keep_file:
            image_name = root.find('filename').text
            image_path = os.path.join(image_folder, image_name)
            if os.path.exists(image_path):
                os.remove(image_path)
            os.remove(xml_path)
        else:
            # 保存修改后的XML文件
            tree.write(xml_path)

# 示例用法
image_folder = r'D:\BaiduNetdiskDownload\VOCdevkit\VOCdevkit\VOC2007\JPEGImages'  # 替换为图片文件夹路径
annotation_folder = r'D:\BaiduNetdiskDownload\VOCdevkit\VOCdevkit\VOC2007\Annotations'  # 替换为标签文件夹路径
process_annotations(image_folder, annotation_folder)

 需根据自己的数据集修改name及文件路径!!!

清洗YOLO格式数据集代码示例

import os

def process_labels(image_folder, label_folder):
    # 遍历标签文件夹中的所有标签文件
    for label_file in os.listdir(label_folder):
        if not label_file.endswith('.txt'):
            continue
        
        label_path = os.path.join(label_folder, label_file)
        image_name = os.path.splitext(label_file)[0] + '.png'
        image_path = os.path.join(image_folder, image_name)
        
        # 读取标签文件内容
        with open(label_path, 'r') as f:
            lines = f.readlines()
        
        # 需修改!!!根据自己想要的类别保留!筛选类别为0的行
        filtered_lines = [line for line in lines if line.strip().split()[0] == '0']
        
        # 如果没有类别为0的行,删除对应的图片和标签
        if not filtered_lines:
            if os.path.exists(image_path):
                os.remove(image_path)
            os.remove(label_path)
        else:
            # 保存修改后的标签文件
            with open(label_path, 'w') as f:
                f.writelines(filtered_lines)

# 示例用法
label_folder = r'D:\BaiduNetdiskDownload\annotations_trainval2017\txt'  # 替换为图片文件夹路径
image_folder = r'D:\BaiduNetdiskDownload\val2017\val2017'  # 替换为标签文件夹路径
process_labels(image_folder, label_folder)

 需根据自己的数据集修改line及文件路径!!!

相关文章:

  • Java 填充 PDF 模版
  • Python个人学习笔记(18):模块(异常处理、traceback、日志记录)
  • MAC-在使用@Async注解的方法时,分布式锁管理和释放
  • STM32原理性知识
  • 一种基于大规模语言模型LLM的数据分析洞察生成方法
  • 如何在 Node.js 中使用 .env 文件管理环境变量 ?
  • Rust嵌入式开发环境搭建指南(基于Stm32+Vscode)
  • ASP3605同步降压调节器——满足汽车电子严苛要求的电源芯片方案
  • 数学之握手问题
  • Java替换jar包中class文件
  • Matlab概率区间预测全家桶更新了,新增光伏出力区间预测,4种分布可供预测
  • 【单片机通信技术应用——学习笔记三】液晶屏显示技术,取模软件的应用
  • AI重构工程设计、施工、总承包行业:从智能优化到数字孪生的产业革命
  • 【C++】八大常见的设计模式的实现与实践指南
  • Flink 内存管理
  • 3.18练习
  • 实现图片多种处理需求的实用工具
  • 功能安全实战系列06-英飞凌Tricore系列SMU详解
  • cc1.日期和进制问题———选择题。
  • Hadoop 启动,发现 namenode、secondary namenodes,这两个没有启动,报错超时。
  • 我国对国家发展规划专门立法
  • 他比李白接地气,比杜甫乐观,比白居易刚毅
  • 以军称若停火谈判无进展,将大幅扩大加沙军事行动
  • 持续更新丨伊朗官员:港口爆炸事件已致5人死亡
  • 精准滴灌“种企业”,苏南强县常熟新的进阶密码
  • 经济日报刊文:积极应对稳住外贸基本盘