首先需要有训练图片以及其对应的darknet格式的label(图片名与label名相同)
import os
label_path = '/Datadarknet/test/labels' #label 地址
name = '/darknet/model/name.txt' #类别txt地址
result_path = '/darknet/test/result' #存放的result地址,没有则会自动创建
key =[]
value =[]
i = 0
with open(name, "r") as f:
lines = f.readlines()
#获取类别
for line in lines:
cat = line.split('\n')[0]
i += 1
# category.append(cat)
key.append(str(i-1))
value.append(cat)
category = dict(zip(key,value)) #demo:{'0': 'yes', '1': 'no'}
if not os.path.exists(result_path):
os.makedirs(result_path)
#分类别存个数
for root ,dir ,files in os.walk(label_path):
for file in files:
label_ = os.path.join(root,file)
with open(label_,'r') as f:
l = f.readlines()
for k in l:
lb_class = k.split(' ')[0] #类别序号 0
lb_category = category[lb_class] #类别名称 yes
path = os.path.join(result_path,lb_category+'.txt') #生成各个类别的txt
with open(path,'a') as f2:
try: #防止有的label 为空
line_write = file[:-4] + k[1:] #将每一行写入txt文件,格式为:文件名 中心点x,中心点y,x/图片宽,y/图片高
f2.write(line_write)
except TypeError:
continue
f2.close()
print('转换完成')
for root ,dir ,files in os.walk(result_path):
for name in files: #dfhifvuer5.txt
txt_path = os.path.join(root,name)
txt = open(txt_path)
num = len(txt.readlines())
if num != 0 :
print(name[:-4],num) #yes 55
else:
continue
运行代码:
生成后的result结果: