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

【YOLO脚本】yolo格式数据集删除缺失删除图片和标签

两个变量记录图片和标签地址。统计数据集,并且删除没有标签的图片和没有图片的标签。

import os
import shutil
from collections import defaultdictdef analyze_and_clean_yolo_dataset(image_dir, label_dir, dry_run=True):"""分析并清理YOLO格式数据集,删除无标签的图片和无图片的标签参数:image_dir (str): 图片文件夹路径label_dir (str): 标签文件夹路径dry_run (bool): 是否执行实际删除操作,True表示只显示统计信息不删除"""# 定义支持的图片格式IMAGE_EXTS = {'.jpg', '.jpeg', '.png', '.bmp', '.JPG', '.JPEG', '.PNG', '.BMP'}# 收集图片和标签文件image_files = {}label_files = {}# 收集图片文件(不包含扩展名的文件名作为键)for filename in os.listdir(image_dir):name, ext = os.path.splitext(filename)if ext in IMAGE_EXTS:image_files[name] = filename# 收集标签文件(不包含扩展名的文件名作为键)for filename in os.listdir(label_dir):name, ext = os.path.splitext(filename)if ext == '.txt':label_files[name] = filename# 统计分析stats = defaultdict(int)stats['total_images'] = len(image_files)stats['total_labels'] = len(label_files)# 找出无标签的图片images_without_labels = []for name in image_files:if name not in label_files:images_without_labels.append(image_files[name])stats['images_without_labels'] = len(images_without_labels)# 找出无图片的标签labels_without_images = []for name in label_files:if name not in image_files:labels_without_images.append(label_files[name])stats['labels_without_images'] = len(labels_without_images)# 找出空标签文件empty_labels = []for name, filename in label_files.items():if name in image_files:  # 只检查有对应图片的标签label_path = os.path.join(label_dir, filename)try:if os.path.getsize(label_path) == 0:empty_labels.append(filename)except OSError:continuestats['empty_labels'] = len(empty_labels)# 打印统计结果print("===== 数据集统计 =====")print(f"总图片数: {stats['total_images']}")print(f"总标签数: {stats['total_labels']}")print(f"无标签的图片数: {stats['images_without_labels']}")print(f"无图片的标签数: {stats['labels_without_images']}")print(f"空标签文件数: {stats['empty_labels']}")# 执行清理操作if not dry_run:print("\n===== 执行清理 =====")# 删除无标签的图片for filename in images_without_labels:file_path = os.path.join(image_dir, filename)try:os.remove(file_path)print(f"已删除图片: {filename}")except Exception as e:print(f"删除图片 {filename} 失败: {e}")# 删除无图片的标签for filename in labels_without_images:file_path = os.path.join(label_dir, filename)try:os.remove(file_path)print(f"已删除标签: {filename}")except Exception as e:print(f"删除标签 {filename} 失败: {e}")# 删除空标签文件for filename in empty_labels:file_path = os.path.join(label_dir, filename)try:os.remove(file_path)print(f"已删除空标签: {filename}")except Exception as e:print(f"删除空标签 {filename} 失败: {e}")print("\n清理完成!")else:print("\n=== 干运行模式,未执行实际删除操作 ===")print("若要执行清理,请将 dry_run 参数设置为 False")# 使用示例
if __name__ == "__main__":# 请修改为你的图片和标签路径IMAGE_DIR = "images"LABEL_DIR = "labels"# 先进行干运行,查看统计信息analyze_and_clean_yolo_dataset(IMAGE_DIR, LABEL_DIR, dry_run=True)# 如果统计结果符合预期,可以取消注释下面的行执行实际清理# analyze_and_clean_yolo_dataset(IMAGE_DIR, LABEL_DIR, dry_run=False)    
http://www.dtcms.com/a/271983.html

相关文章:

  • 青岛门卫事件后:高温晕厥救援技术突破
  • 文件系统----底层架构
  • 如何处理mocking is already registered in the current thread
  • IDEA 安装AI代码助手GitHub Copilot和简单使用体验
  • Apache http 强制 https
  • 百度文心ERNIE4.5部署与性能白皮书:FastDeploy加速方案+全系列模型实测数据对比
  • DVWA靶场通关笔记-弱会话IDs(Weak Session IDs Medium级别)
  • mmu 是什么?core和die是什么?
  • 计算机网络实验——无线局域网安全实验
  • UE 植物生长 Motion Design
  • 深度学习-正则化
  • 【SkyWalking】服务端部署与微服务无侵入接入实战指南
  • 【spring boot】三种日志系统对比:ELK、Loki+Grafana、Docker API
  • 【世纪龙科技】汽车信息化综合实训考核平台(机电方向)-学测
  • 零基础入门物联网-远程门禁开关:云平台创建
  • selenium中xpath的用法大全
  • anchor 智能合约案例5 之 vesting
  • 汽车加气站操作工历年考试真题及答案
  • CSS表达式——下篇【selenium】
  • WebSocket实战:实现实时聊天应用 - 双向通信技术详解
  • 【C++】——类和对象(上)
  • C 语言基础:操作符、进制与数据表示通俗讲解
  • AI【应用 03】Windows环境部署 TTS CosyVoice2.0 详细流程记录(Matcha-TTS、spk2info.pt等文件分享)
  • Qt中处理多个同类型对象共享槽函数应用
  • git多分支管理
  • 缺陷的生命周期(Bug Life Cycle)是什么?
  • Java 正则表达式白皮书:语法详解、工程实践与常用表达式库
  • WWDC 25 风云再起:SwiftUI 7 Charts 心法从 2D 到 3D 的华丽蜕变
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(四十二) -> 动态修改编译配置
  • 全面解析 wxPython:构建原生桌面应用的 Python GUI 框架