YOLO标注文件清洗案例代码-学习篇

2024-09-06 13:04

本文主要是介绍YOLO标注文件清洗案例代码-学习篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景简介

YOLO标注文件清洗
训练一个人工智能算法需要一个庞大的数据集,这个数据集需要进行人为标注
但由于出现意外,造成部分数据丢失,使得标注文件和图片文件的文件名前缀不能一一对应
需要写一段代码将可以文件名前缀一一对应的文件保存到一个新的文件夹中,已完成数据的清洗

问题背景

待清洗的文件目录,images中是图片,labels中是txt标注文件,标注后images和labels中的文件名时相同的,现在数据丢失后,部分标注文件images和labels对不上了,
需要筛选出images和labels文件中img和txt文件名字相同的文件,
在这里插入图片描述
比对完导出的文件目录
在这里插入图片描述

代码文件如下:

#抽取的公共方法,拼接返回某个文件夹下所有的文件的路径集合
def get_info(root_from):file_full_path_list = []for root, dirs, files in os.walk(root_from):for file in files:file_full_path = os.path.join(root, file)file_full_path1 = file_full_path.split('\\')file_short_path  = os.path.join(file_full_path1[-2],file_full_path1[-1])#以\\分隔路径后,获取倒数第一第二个元素 拼接起来file_i_name = file_short_path.split(".")[0] #以.分隔字符串,去掉后缀file_full_path_list.append(file_i_name)return file_full_path_listroot_path_from = r'./fire_yolo_format' #待清洗的目录
root_path_save = r'./clean_data'  #清洗后保存的目录
#拼接出待清洗的文件夹下的子文件夹
root_images_from = os.path.join(root_path_from,'images')
root_labels_from = os.path.join(root_path_from,'labels')
#拼接出清洗后存储的子文件夹
root_images_save = os.path.join(root_path_save,'images')
root_labels_save = os.path.join(root_path_save,'labels')print(root_images_from)
print(root_labels_from)
print(root_images_save)
print(root_labels_save)#循环遍历创建清洗后文件存储文件夹
"""dir_list_1 = ['images','labels']
dir_name_list = ['train','test','val']
for dir1 in dir_list_1:for dir2 in dir_name_list:dir_full_path = os.path.join(root_path_save,dir1,dir2)if not os.path.exists(dir_full_path):os.makedirs(dir_full_path)"""#遍历待清洗的图片文件夹下的文件
image_file_full_path_list = get_info(root_images_from)
#print(image_file_full_path_list)
labels_file_full_path_list = get_info(root_labels_from)
print(labels_file_full_path_list)
#labels下的txt和images下的图片名称比较,只比较\\val\\small (28).txt 后面的这部分
#使用集合做交集比较
image_set = set(image_file_full_path_list)
label_set = set(labels_file_full_path_list)
intersection_set = image_set & label_set
print(len(image_set))
print(len(label_set))
print(len(intersection_set))print(intersection_set)#这些是两个集合里都有的,是能一一对上的。
#把这些路径拼接成完整路径再复制到clean_data文件夹
for intersection_i in intersection_set:#file_yolo_format中的能一一对上的文件intersection_i_image_full_path_from = os.path.join(root_images_from,intersection_i) + '.jpg'intersection_i_label_full_path_from = os.path.join(root_labels_from,intersection_i) + '.txt'#要保存到的clean_data的文件完整路径intersection_i_image_full_path_save = os.path.join(root_images_save, intersection_i) + '.jpg'intersection_i_label_full_path_save = os.path.join(root_labels_save, intersection_i) + '.txt'shutil.copy(intersection_i_image_full_path_from, intersection_i_image_full_path_save)shutil.copy(intersection_i_label_full_path_from, intersection_i_label_full_path_save)

这篇关于YOLO标注文件清洗案例代码-学习篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1142084

相关文章

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

Springboot3 ResponseEntity 完全使用案例

《Springboot3ResponseEntity完全使用案例》ResponseEntity是SpringBoot中控制HTTP响应的核心工具——它能让你精准定义响应状态码、响应头、响应体,相比... 目录Spring Boot 3 ResponseEntity 完全使用教程前置准备1. 项目基础依赖(M

MyBatis中的两种参数传递类型详解(示例代码)

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安... 目录✅ android方式一:使用Map<String, Object>✅ 方式二:使用@Param

SpringBoot实现图形验证码的示例代码

《SpringBoot实现图形验证码的示例代码》验证码的实现方式有很多,可以由前端实现,也可以由后端进行实现,也有很多的插件和工具包可以使用,在这里,我们使用Hutool提供的小工具实现,本文介绍Sp... 目录项目创建前端代码实现约定前后端交互接口需求分析接口定义Hutool工具实现服务器端代码引入依赖获

利用Python在万圣节实现比心弹窗告白代码

《利用Python在万圣节实现比心弹窗告白代码》:本文主要介绍关于利用Python在万圣节实现比心弹窗告白代码的相关资料,每个弹窗会显示一条温馨提示,程序通过参数方程绘制爱心形状,并使用多线程技术... 目录前言效果预览要点1. 爱心曲线方程2. 显示温馨弹窗函数(详细拆解)2.1 函数定义和延迟机制2.2

C++11中的包装器实战案例

《C++11中的包装器实战案例》本文给大家介绍C++11中的包装器实战案例,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录引言1.std::function1.1.什么是std::function1.2.核心用法1.2.1.包装普通函数1.2.

Springmvc常用的注解代码示例

《Springmvc常用的注解代码示例》本文介绍了SpringMVC中常用的控制器和请求映射注解,包括@Controller、@RequestMapping等,以及请求参数绑定注解,如@Request... 目录一、控制器与请求映射注解二、请求参数绑定注解三、其他常用注解(扩展)四、注解使用注意事项一、控制

Redis 命令详解与实战案例

《Redis命令详解与实战案例》本文详细介绍了Redis的基础知识、核心数据结构与命令、高级功能与命令、最佳实践与性能优化,以及实战应用场景,通过实战案例,展示了如何使用Redis构建高性能应用系统... 目录Redis 命令详解与实战案例一、Redis 基础介绍二、Redis 核心数据结构与命令1. 字符

通过DBeaver连接GaussDB数据库的实战案例

《通过DBeaver连接GaussDB数据库的实战案例》DBeaver是一个通用的数据库客户端,可以通过配置不同驱动连接各种不同的数据库,:本文主要介绍通过DBeaver连接GaussDB数据库的... 目录​一、前置条件​二、连接步骤​三、常见问题与解决方案​1. 驱动未找到​2. 连接超时​3. 权限不