目标检测标签格式转换 txt

阅读: 评论:0

目标检测标签格式转换 txt

目标检测标签格式转换 txt

目标检测标签格式转换 txt->xml

将YOLO格式的标签转换成VOC格式的标签,用于适应多种算法的目标检测

# _*_ coding:utf-8 _*_
ElementTree as ET
import os
import cv2
"""
标签格式转换:txt->xml
时间:2022.04.15
作者:余小晖
"""# 增加换行符
def __indent(elem, level=0):i = "n" + level*"t"if len(elem):if  or strip(): = i + "t"if not elem.tail or not elem.tail.strip():elem.tail = ifor elem in elem:__indent(elem, level+1)if not elem.tail or not elem.tail.strip():elem.tail = ielse:if level and (not elem.tail or not elem.tail.strip()):elem.tail = idef txt_xml(img_size, txt_file_path):# object-class> <x_center> <y_center> <width> <height>bboxs = []  # cls_name, xmin, ymin, xmax, ymaxwidth, height= img_size[1], img_size[0]     # 获取对应图像的宽高with open(txt_file_path, 'r', encoding='UTF-8')as f:lines = f.readlines()   # 可能含有空的txt文件,空txt文件将直接返回空bboxs列表# 读取txt文件中每一行数据,每一行数据包含有一个目标for line in lines :line= line.split()line = [float(i) for i in line ]cls_name= int(line[0])xmin = int((line[1]- line[3]/2)* width)xmax = int((line[1]+ line[3]/2)* width)ymin = int((line[2]- line[4]/2)* height)ymax = int((line[2]+ line[4]/2)* height)bbox = [cls_name, xmin, ymin, xmax, ymax]bboxs.append(bbox)return bboxsdef write_xml(img_path, txt_path, xml_save_path):txt_files = os.listdir(txt_path)# txt_files.sort(key=lambda x: int(x.split('_')[-1][:-4]))  # 按照数字排序for num, txt_file in enumerate(txt_files):txt_name_list = txt_file.split('.')xml_name = txt_name_list[0]+ '.xml'img_name = txt_name_list[0]+ '.jpg' # 图片后缀为jpg时# 获取图像尺寸width、height、depthimage = cv2.imread(img_path+ img_name)img_size = image.shapetxt_file_path = txt_path+ txt_filebboxs = txt_xml(img_size, txt_file_path)root = ET.Element('annotation')tree = ET.ElementTree(root)# 添加root子节点filenamefilename = ET.Element('filename') = img_nameroot.append(filename)#添加root子节点sizesize = ET.Element('size')img_width = ET.Element('width') = str(img_size[1])size.append(img_width)img_height = ET.Element('height') = str(img_size[0])size.append(img_height)img_depth = ET.Element('depth') = str(img_size[-1])size.append(img_depth)root.append(size)# 添加root子节点objectfor i in range(len(bboxs)):#添加所有的object子节点object = ET.Element('object')cls_name = ET.Element('name') = cls_dict[str(bboxs[i][0])]object.append(cls_name)difficult = ET.Element('difficult') = str(0)object.append(difficult)bndbox = ET.Element('bndbox')element_list = ['xmin','ymin', 'xmax', 'ymax']for j, element in enumerate(element_list):ele = ET.Element( = str(bboxs[i][j+1])bndbox.append(ele)object.append(bndbox)root.append(object)__indent(root)  # 增加换行符tree.write(xml_save_path+ xml_name, encoding='utf-8', xml_declaration=True)print('num------------------------',num+1,'==',txt_file)if __name__ == '__main__':txt_path= './face_mask-1/ann_txt/'  #txt标签路径xml_save_path = './face_mask-1/ann_xml-1/'  #xml文件保存路径img_path = './face_mask-1/images/'  #图像路径if not ists(xml_save_path):os.makedirs(xml_save_path)cls_dict = {'0': 'face', '1': 'face_mask'}  #ID以及对应类别write_xml(img_path, txt_path, xml_save_path)

本文发布于:2024-03-09 10:42:19,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/1710226543135527.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:格式转换   目标   标签   txt
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23