首先我应该说没有直接的方法可以将这些格式转换为 csv。你应该读取文件并解析它们的数据。
第 1 步:导入库
我们需要从目录中读取 txt 文件(yolo 标签)并将它们保存到 csv 中。所以我们需要这些库:
import os
import glob
import pandas as pd
import numpy as np
第 2 步:获取 yolo 标签列表
使用OS 库打开您的yolo 标签并使用glob 读取txt 文件的目录:
os.chdir(r'D:\karami\Labeled\train1\labels')
myFiles = glob.glob('*.txt')
我的标签在我的标签文件夹中,所以我将该目录设置为该目录。
第 3 步:读取行和拆分数据
你在 myFiles 变量中有你的标签列表
您应该对其进行迭代并读取每个文件的第一行并拆分其数据。
在您分享的图像中,我们有边界框的绝对坐标。根据我们拥有的 yolo 暗网文档:
对象类 x_center y_center width height
x_center,y_center,width,height - 相对于宽度的浮点值和
图像的高度,它可以等于(0.0 到 1.0] 例如:=
/ 或 = /
你可以在here看到完整的描述
所以我们需要将坐标乘以图像的宽度和高度。
yolo 文件不包含图像大小,因此您应该在之前定义它们
之后使用您的拆分字符串。然后保存您的数据框。代码:
width=1024
height=1024
image_id=0
final_df=[]
for item in myFiles:
row=[]
bbox_temp=[]
with open(item, 'rt') as fd:
first_line = fd.readline()
splited = first_line.split();
row.append(image_id)
row.append(width)
row.append(height)
try:
bbox_temp.append(float(splited[1])*width)
bbox_temp.append(float(splited[2])*height)
bbox_temp.append(float(splited[3])*width)
bbox_temp.append(float(splited[4])*height)
row.append(bbox_temp)
final_df.append(row)
except:
print("file is not in YOLO format!")
df = pd.DataFrame(final_df,columns=['image_id', 'width', 'height','bbox'])
df.to_csv("saved.csv",index=False)
这是我的 csv 文件: