python批量转换yolov5中detect.py生成的txt为指定的txt格式

该博客记录了一位人工智能算法标注工程师如何将Yolov5的detect.py生成的txt标注文件转换成特定格式。转换过程涉及将类别数字替换为类别名称,用逗号替换空格,并保留置信度的两位小数。转换代码详细展示了这一过程,便于日后参考。
摘要由CSDN通过智能技术生成

话不多说先上图

原txt文件格式为yolov5中的detect.py生成的txt文件格式(左侧为待转txt格式)

转换后生成我所需要的txt文件格式(右侧为转换好的txt格式)

(这里注意:左图的txt每一行分别代表:<cls><左上角x><左上角y><右下角x><右下角y><conf>

并非detect标准的cls+xywh+conf格式,这是因为我在detet.py中做了如下改动,相当于就是放弃将xyxy转成xywh,这样生成的txt文件就是上方左图的样子)

 

 

可以看出,需要转的部分有以下几点:

1、将用数字表示的cls全部替换成类别名,比如1替换成echinus等等。

2、将所有数字间的空格替换成“,”。

3、将最后表示conf的数据保留两位小数。

直接上代码:

#yolov5的detect生成的labels转成水下比赛的要求的labels格式

import os
path=r'C:/Users/GXUFE-204/Desktop/test/labels'#转换前txt保存的文件夹
save=r'C:/Users/GXUFE-204/Desktop/test/txt'#转换后txt保存的文件夹

for item in os.listdir(path):#遍历文件夹里的文件
    path_item=os.path.join(path,item)
    path_item2 = os.path.join(save, item)#保存的路径
    a = []
    with open(path_item,'r') as f1,open(path_item2,"a")as f2:
        for line in f1:
            a.append(line)

        for i in a:
            if ' ' in str(i):#遍历每一行
                b = str(i).replace(' ', ',')#这个b啊就是个字符串来的,空格换成“,”
                char = '.'
                pos = b.find(char) #小数点在字符串中所在的位置
                con=b[0:pos+3]  #置信度两位小数,还是个字符串
                #print(con)
                zz=con+"\n"
                #print(zz)

                m = list(zz)#替换每一行的第一个数字,换成对应类别的英文
                if m[0]=='0':
                    m[0]='holothurian'
                if m[0]=='1':
                    m[0]='echinus'
                if m[0]=='2':
                    m[0]='scallop'
                if m[0]=='3':
                    m[0]='starfish'
                b =''.join(m)


                print(b)
                f2.write("%s" % (b))
        print('替换完成')


 写在这里记录一下,防止以后用的时候忘记。

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值