目标检测——清洗数据

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

python 复制代码
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格式数据集代码示例

python 复制代码
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及文件路径!!!

相关推荐
通信小呆呆10 分钟前
动态目标检测与跟踪:基于卡尔曼滤波的门限关联与可视化全流程
人工智能·目标检测·机器学习
格林威21 分钟前
液态透镜技术在工业镜头中的应用?
人工智能·数码相机·opencv·计算机视觉·视觉检测·相机·工业镜头
Single33 分钟前
从“端到端”到“人到人”:一种以需求直接满足为核心的新一代人机交互范式
人工智能·物联网·人机交互·具身智能
北京耐用通信1 小时前
自动化通信谜团:耐达讯自动化Modbus RTU如何变身 Profibus连接触摸屏
人工智能·网络协议·自动化·信息与通信
忆~遂愿1 小时前
谷歌云+Apache Airflow,数据处理自动化的强力武器
人工智能·python·深度学习·opencv·自动化·apache
sensen_kiss1 小时前
INT305 Machine Learning 机器学习 Pt.1 导论与 KNN算法
人工智能·算法·机器学习
拉姆哥的小屋2 小时前
VAE-NPN跨域室内定位的实战与思考
人工智能·毕设
IT_陈寒2 小时前
JavaScript性能优化:这7个V8引擎技巧让我的应用速度提升了50%
前端·人工智能·后端
拉姆哥的小屋2 小时前
突破传统!基于SAM架构的双模态图像分割:让AI“看见“红外与可见光的完美融合
人工智能·架构
AI数据皮皮侠4 小时前
中国上市公司数据(2000-2023年)
大数据·人工智能·python·深度学习·机器学习