severstal谢韦尔金属数据集CSV格式转YOLO格式

2024-04-20 00:52

本文主要是介绍severstal谢韦尔金属数据集CSV格式转YOLO格式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

谢韦尔数据集

在kaggle上即可找到,在csdn、百度、知乎上搜索都能搜到,这里不附下载链接了
谢韦尔数据集的标注为CSV文件,格式如下:
谢韦尔数据集格式
谢韦尔数据集为分割数据集,像素编码格式

格式

谢韦尔数据集为像素编码格式,使用YOLO相关模型进行检测任务,需要进行格式转换。
YOLO的格式为:
类别id 坐标1x 坐标1y 坐标2x 坐标2y 坐标3x 坐标3y 坐标4x 坐标4y…

像素编码格式为:
29102 12 ,为一对,从第29102开始往后数12个像素。

要直接转成YOLO格式的顶点坐标有点困难,所以我采用了先转换为掩码形式,然后再寻找顶点。

处理代码

import os
import cv2
import numpy as np
import pandas as pd
from PIL import Image
from PIL import Image, ImageOpsdef mask_pil2xy(mask_pil,ImageId,ClassId,save_txtfolder):# 转换为 NumPy 数组mask_np = np.array(mask_pil)# 使用阈值化将图像转换为二值图像_, binary_image = cv2.threshold(mask_np, 200, 255, cv2.THRESH_BINARY)# 查找轮廓contours, _ = cv2.findContours(binary_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 存储有效区域的顶点坐标valid_vertices = []# 设置最小轮廓点数阈值(根据需要调整)min_contour_points = 3label_name=os.path.splitext(ImageId)[0]+ ".txt"save_path = os.path.join(save_txtfolder, label_name)#保存到文件with open(save_path, 'a') as f:# 遍历每个轮廓for contour in contours:# 忽略太小的轮廓if len(contour) < min_contour_points:continue# 获取轮廓的顶点坐标approx = cv2.approxPolyDP(contour, 0.01 * cv2.arcLength(contour, True), True)# 确保轮廓有足够的顶点来形成有效区域if len(approx) >= min_contour_points:# 存储当前区域的顶点坐标# vertices_str = ""vertices_str = f"{ClassId} "for point in approx:x, y = point[0]# 归一化顶点坐标并保留小数点后6位normalized_x = round(x / 1600, 6)normalized_y = round(y / 256, 6)vertices_str += f"{normalized_x} {normalized_y} "# 移除末尾的空格vertices_str = vertices_str[:-1]# 将当前区域的顶点坐标字符串添加到列表中valid_vertices.append(vertices_str + "\n")# 输出所有有效区域的顶点坐标for vertices_str in valid_vertices:print(vertices_str)f.write(vertices_str)def rle2mask(rle, imgshape):width = imgshape[1]height = imgshape[0]mask = np.zeros(width * height, dtype=np.uint8)array = np.asarray([int(x) for x in rle.split()])starts = array[0::2]lengths = array[1::2]for index, start in enumerate(starts):mask[int(start):int(start + lengths[index])] = 1# 将掩码数组重塑为图像尺寸mask = mask.reshape(height, width)# 将 numpy 数组转换为 PIL 图像mask_pil = Image.fromarray(mask * 255)# 旋转图像以横向显示(逆时针旋转90度)mask_pil = mask_pil.rotate(90, expand=True)# 保存掩码图像前进行垂直翻转mask_pil = ImageOps.flip(mask_pil)return mask_pil#路径
# 设置保存标签文件的路径
save_txtfolder = ""
os.makedirs(save_txtfolder, exist_ok=True)  # 确保保存目录存在
save_folder = ""
os.makedirs(save_folder, exist_ok=True)  # 确保保存目录存在# 读取CSV文件
csv_path = ""
df = pd.read_csv(csv_path)# 过滤出带有有效掩码的数据
df_train = df[df['EncodedPixels'].notnull()].reset_index(drop=True)# 处理每个带有有效掩码的样本
for index in range(len(df_train)):ImageId = df_train['ImageId'].iloc[index]  # 获取图像标识ClassId = df_train['ClassId'].iloc[index]  # 获取类别 IDmaskName = ImageId.split(".")[0] + ".png"  # 生成保存的掩码文件名,去除后缀并添加文件扩展名# 生成掩码图像mask_pil = rle2mask(df_train['EncodedPixels'].iloc[index], (1600, 256))mask_pil2xy(mask_pil,ImageId,ClassId,save_txtfolder)save_path = os.path.join(save_folder, maskName)mask_pil.save(save_path)print(f"Saved mask image: {save_path}")

上述内容为作者原创,转载请附上链接

这篇关于severstal谢韦尔金属数据集CSV格式转YOLO格式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

python dict转换成json格式的实现

《pythondict转换成json格式的实现》本文主要介绍了pythondict转换成json格式的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下... 一开始你变成字典格式data = [ { 'a' : 1, 'b' : 2, 'c编程' : 3,