学习笔记——标签格式转换:csv标签转yolo-txt

数据格式如下,且一张样本里只有1个目标

import os

# 适用数据格式: file_name	width	height	x1	y1	x2	y2	category  均为原始尺寸

csv_file = r'/home/luoye/myProject/ultralytics-main/annotations.csv'
save_folder = r'/home/luoye/myProject/ultralytics-main/labels'

with open(csv_file, 'r') as f:
    for i, line in enumerate(f):
        if i == 0:  # 跳过第一行
            continue
        # print(line)
        line = line.split(',')
        # print(line)
        txt_name = line[0][:-4]  # 支持后缀长度3的图像名.png

        save_path = save_folder + '/'+ txt_name + '.txt'  # 拼接保存路径
        print(save_path)

        img_w = int(line[1])  # 图片的宽和高
        img_h = int(line[2])

        x1, y1, x2, y2 = float(line[3]) / img_w, float(line[4]) / img_h, float(line[5]) / img_w, float(line[6]) / img_h  # 转float,归一化

        w = x2 - x1
        h = y2 - y1

        centerX, centerY, w, h = x1 + w / 2, y1 + h / 2, w, h

        label = line[-1][:-1] # 去掉最后的\n
        print(label)

        with open(save_path,'w')as f:
            f.write(f'{label} {centerX} {centerY} {w} {h}')

画GT框——验证转换是否正确

import os
import cv2
import numpy as np


def read_gt(path_root_imgs,path_root_labels):# 总的检测根目录

    type_object = '.txt'

    gt_dict=dict()
    for ii in os.walk(path_root_imgs):
        for j in ii[2]:
            type = j.split(".")[1]#判断遍历内容是否都为图像
            if type != 'png':
                continue
            path_img = os.path.join(path_root_imgs, j)
            # print(path_img)
            label_name = j[:-4]+type_object
            label_num=j[:-4][6:]
            path_label = os.path.join(path_root_labels, label_name)
            # print(path_label)
            f = open(path_label, 'r+', encoding='utf-8')
            if os.path.exists(path_label) == True:

                img = cv2.imread(path_img)
                w = img.shape[1]
                h = img.shape[0]
                # new_lines = []
                img_tmp = img.copy()
                # gt_boxes = []#初始化boxes
                while True:
                    line = f.readline()
                    if line:
                        msg = line.split(" ")
                        # print(x_center,",",y_center,",",width,",",height)
                        x1 = int((float(msg[1]) - float(msg[3]) / 2) * w)  # x_center - width/2
                        y1 = int((float(msg[2]) - float(msg[4]) / 2) * h)  # y_center - height/2
                        x2 = int((float(msg[1]) + float(msg[3]) / 2) * w)  # x_center + width/2
                        y2 = int((float(msg[2]) + float(msg[4]) / 2) * h)  # y_center + height/2
                        gt_box=[x1,y1,x2,y2]
                        # gt_boxes.append(gt_box)
                        # print(x1,",",y1,",",x2,",",y2)
                        d = {'Caitlyn': 21, 'Darius': 45, 'Bard': 33, 'Ezreal': 24, 'Akali': 31, 'Fiora': 43}
                        cv2.rectangle(img_tmp,(x1,y1),(x2,y2),(0,0,255),1)
                    else :
                        break
                # gt_dict[int(label_num)]=gt_boxes#全部box传入字典


            cv2.imshow("show", img_tmp)
            c = cv2.waitKey(0)

    cv2.destroyAllWindows()
    # gt_dict={k: gt_dict[k] for k in sorted(gt_dict.keys())}
    # return gt_dict
    # gt_box=gt_dict.values()
    # print(gt_box)
    # print(gt_dict[0])
    # print(gt_box.shape)
    # return gt_dict
    # print(len(gt_dict))



if __name__ == '__main__':
    read_gt(r'E:\datasets\archive(yolo)\images',r'E:\datasets\archive(yolo)\labels')

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: yolo-txtcoco-json工具是一种将YOLO格式的文本标注文件换为COCO格式的JSON标注文件的工具。YOLO(You Only Look Once)是一种目标检测算法,而COCO(Common Objects in Context)是一个常见的目标检测和图像分割数据集。有时候我们从YOLO标注工具中获得的标注结果是文本文件的形式,而在使用COCO数据集进行训练和评估时,我们需要将标注结果化为COCO格式的JSON文件。 这个工具可以实现这样的换过程,首先读取YOLO格式的文本文件并解析每个物体的位置、类别和边界框信息。然后根据这些信息结构化生成COCO JSON文件,其中包含了每个物体的类别、标签和位置信息。这样换之后,我们就可以直接使用COCO数据集上的目标检测算法进行训练或者评估。 使用yolo-txtcoco-json工具可以大大简化我们在YOLO和COCO之间进行标注格式转换的过程,省去了手动编写换代码的复杂性和耗时。此外,将标注结果换为COCO格式也使得我们能够更加方便地使用COCO数据集的相关工具和算法进行目标检测任务的处理。 总之,yolo-txtcoco-json工具是一个方便实用的工具,可以帮助我们轻松地将YOLO格式的文本标注文件换为COCO格式的JSON标注文件,提高了目标检测任务的效率和准确性。 ### 回答2: yolo-txtcoco-json工具是一种用于将YOLO格式的标注文件换为COCO格式的工具。YOLO(You Only Look Once)是一种目标检测算法,其标注文件是以txt格式存储的,而COCO(Common Objects in Context)是一种通用的目标检测数据格式,其标注文件以json格式存储。 使用yolo-txtcoco-json工具可以方便地将YOLO标注文件换为COCO格式,以便于在COCO格式下进行目标检测任务或者使用COCO预训练模型进行迁移学习。 这个工具的主要功能是将YOLO标注文件中的目标边界框的位置信息、类别信息等提取出来,并按照COCO格式的要求,将这些信息整理为json格式的标注文件。 具体使用这个工具的步骤是:首先,将YOLO标注文件和对应的图片放置在同一个目录下;然后,运行工具提供的命令或脚本,指定输入目录和输出目录;最后,工具会自动遍历输入目录下的所有YOLO标注文件,将其换为相应的COCO格式,并输出到指定的输出目录中。 通过使用yolo-txtcoco-json工具,可以减少手动地从YOLO格式转换为COCO格式的工作量,提高工作效率。同时,换后的COCO格式标注文件可以更方便地与其他基于COCO格式的目标检测算法或工具进行兼容和集成,便于进一步的数据处理和模型训练。 ### 回答3: yolo-txtcoco-json工具是一种用于将YOLO格式的标注文件换为COCO格式的标注文件的工具。YOLO格式的标注文件通常是一种纯文本文件,其中包含了每个目标物体的类别、位置和大小等信息。而COCO格式的标注文件是一种结构化的JSON文件,用于存储目标检测任务中的图像标注信息。 这个工具的主要功能是将YOLO格式的标注文件解析,并根据解析结果生成对应的COCO格式的标注文件。在换过程中,它会将YOLO的坐标信息进行换,以适应COCO标注的要求。同时,它还会将目标物体的类别信息换为COCO数据集中所使用的类别编码。换完成后,可以方便地使用生成的COCO格式的标注文件进行目标检测任务的训练和评估。 使用这个工具的好处是可以快速、准确地将YOLO格式的标注文件换为COCO格式的标注文件,从而方便地在COCO数据集上进行目标检测任务。这对于需要使用COCO格式数据集训练模型的研究人员和开发者来说非常有帮助。 总之,yolo-txtcoco-json工具是一种方便的工具,用于将YOLO格式的标注文件换为COCO格式的标注文件,使得目标检测任务的数据处理更加便捷高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值