脚本功能:
针对目录下的所有yolo格式的txt标签文件,将class类别的id修改为指定id。
实际应用常见不多
代码
# -*- coding: utf-8 -*-
# @Time : 2023/9/11 10:58
# @Author : CLW
# @FileName: change_txt_label.py
# @Software: PyCharm
import os
'''
算法功能:
针对目录下的所有yolo格式的txt标签文件,将类别的id修改为指定id
要求:old_class_idx与reset_class_idx的分别表示修改前的id和修改后的id,需要做到一一对应。
old_class_idx = [0, 1],reset_class_idx = [2, 3]
表示原有txt标签的0都替换成2, 原有txt标签的1都替换成3
'''
'''
#################### 输入参数设置(开始) ####################
'''
org_label_dir = r'/test_data/change_txt_label'
new_label_dir = r'/test_data/change_txt_label/new_labels'
label_type = 'txt'
old_class_idx = [0, 1]
reset_class_idx = [2, 3] # 一一对应进行修改
'''
#################### 输入参数设置(结束) ####################
'''
if not os.path.exists(new_label_dir):
os.mkdir(new_label_dir)
for root, dir, files in os.walk(org_label_dir):
for file in files:
print(file)
if file[-3:] == label_type:
txt_file = os.path.join(root,file)
with open(txt_file, 'r') as f:
objects = f.readlines()
outlines = []
for object in objects:
object = object.strip().split(' ')
for i in range(len(old_class_idx)):
if object[0] == str(old_class_idx[i]):
object[0] = str(reset_class_idx[i]);
outlines.append( " ".join([str(a) for a in object]) + '\n')
txt_path = file[:-3] + 'txt' # xml文件路径
txt_path = os.path.join(new_label_dir, txt_path)
with open(txt_path, 'w') as out_txt:
out_txt.writelines(outlines)