news 2026/8/7 7:43:03

数据集格式转化 xml转换txt xml转换txt 转换代码示例参考 VOC(xml)格式如何转换yolo(txt )格式 (1)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据集格式转化 xml转换txt xml转换txt 转换代码示例参考 VOC(xml)格式如何转换yolo(txt )格式 (1)

如何三图 一套代码 来进行xml转换txt 转换代码示例参考。VOC(xml)格式如何转换yolo(txt )格式 的转换?

首先你得有数据集吧。

然后先进行数据集的标注,在分类到训练集 测试集 ,验证集。最起码要搞个yaml,里面路径和yaml搞好,对不。然后训练不会出现路径报错类似于这样的问题,对不对?

答疑解惑同学经常问的问题:

另外VOC格式(XML)和YOLO(txt)格式,可以互转,不要忘记了!还有,YOLO数据集通用YOLOV5-YOLOV12都可以。
另外呢,附一个代码,让你知道如何XML格式,转换TXT的yolo格式。

这里以 帽子和人 CLASSES = [“hat”, “person”] 两类数据集作为示例:如何转换格式:

**

第一步:

**

第二步:这里假设hat person 是smoke 和 fire

第三步:修改路径

importxml.etree.ElementTree as ETimportpickleimportos from osimportlistdir, getcwd from os.pathimportjoinimportrandom from shutilimportcopyfile from PILimportImage

只要改下面的CLASSES和PATH就可以了,其他的不用改,这个脚本会自动划分数据集,生成YOLO格式的标签文件

分类名称 这里改成数据集的分类名称,一定要改!!!请查看数据集目录下的txt文件

CLASSES=["hat","person"]

数据集目录 这里改成数据集的根目录,根目录下有两个文件夹Annotations和JPEGImages,一定要改!!!

PATH=r'C:\Users\87018\Desktop\xml2txt'

训练集占比80% 训练集:验证集=8:2 这里划分数据集 不用改

TRAIN_RATIO=80def clear_hidden_files(path): dir_list=os.listdir(path)foriindir_list: abspath=os.path.join(os.path.abspath(path), i)ifos.path.isfile(abspath):ifi.startswith("._"): os.remove(abspath)else: clear_hidden_files(abspath)def convert(size, box): dw=1. / size[0]dh=1. / size[1]x=(box[0]+ box[1])/2.0y=(box[2]+ box[3])/2.0w=box[1]- box[0]h=box[3]- box[2]x=x * dw w=w * dw y=y * dh h=h * dhreturn(x, y, w, h)def convert_annotation(image_id):# Assuming the image format is jpgimage_path=os.path.join(image_dir, f"{image_id}.jpg")img=Image.open(image_path)w, h=img.size in_file=open(PATH+'/Annotations/%s.xml'% image_id,encoding='utf-8')out_file=open(PATH+'/YOLOLabels/%s.txt'% image_id,'w',encoding='utf-8')tree=ET.parse(in_file)root=tree.getroot()size=root.find('size')# w = int(size.find('width').text)# h = int(size.find('height').text)difficult=0forobjinroot.iter('object'):ifobj.find('difficult'): difficult=obj.find('difficult').text cls=obj.find('name').textifcls notinCLASSES or int(difficult)==1:continuecls_id=CLASSES.index(cls)xmlbox=obj.find('bndbox')b=(float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text), float(xmlbox.find('ymax').text))bb=convert((w,h),b)out_file.write(str(cls_id)+" "+" ".join([str(a)for a in bb])+'\n')in_file.close()out_file.close()wd=os.getcwd()wd=os.getcwd()work_sapce_dir=os.path.join(wd,PATH+"/")annotation_dir=os.path.join(work_sapce_dir,"Annotations/")if not os.path.isdir(annotation_dir):os.mkdir(annotation_dir)clear_hidden_files(annotation_dir)image_dir=os.path.join(work_sapce_dir,"JPEGImages/")if not os.path.isdir(image_dir):os.mkdir(image_dir)clear_hidden_files(image_dir)yolo_labels_dir=os.path.join(work_sapce_dir,"YOLOLabels/")if not os.path.isdir(yolo_labels_dir):os.mkdir(yolo_labels_dir)clear_hidden_files(yolo_labels_dir)yolov5_train_dir=os.path.join(work_sapce_dir,"train/")if not os.path.isdir(yolov5_train_dir):os.mkdir(yolov5_train_dir)clear_hidden_files(yolov5_train_dir)yolov5_images_train_dir=os.path.join(yolov5_train_dir,"images/")if not os.path.isdir(yolov5_images_train_dir):os.mkdir(yolov5_images_train_dir)clear_hidden_files(yolov5_images_train_dir)yolov5_labels_train_dir=os.path.join(yolov5_train_dir,"labels/")if not os.path.isdir(yolov5_labels_train_dir):os.mkdir(yolov5_labels_train_dir)clear_hidden_files(yolov5_labels_train_dir)yolov5_test_dir=os.path.join(work_sapce_dir,"val/")if not os.path.isdir(yolov5_test_dir):os.mkdir(yolov5_test_dir)clear_hidden_files(yolov5_test_dir)yolov5_images_test_dir=os.path.join(yolov5_test_dir,"images/")if not os.path.isdir(yolov5_images_test_dir):os.mkdir(yolov5_images_test_dir)clear_hidden_files(yolov5_images_test_dir)yolov5_labels_test_dir=os.path.join(yolov5_test_dir,"labels/")if not os.path.isdir(yolov5_labels_test_dir):os.mkdir(yolov5_labels_test_dir)clear_hidden_files(yolov5_labels_test_dir)train_file=open(os.path.join(wd,"yolov5_train.txt"),'w',encoding='utf-8')test_file=open(os.path.join(wd,"yolov5_valid.txt"),'w',encoding='utf-8')train_file.close()test_file.close()train_file=open(os.path.join(wd,"yolov5_train.txt"),'a',encoding='utf-8')test_file=open(os.path.join(wd,"yolov5_valid.txt"),'a',encoding='utf-8')list_imgs=os.listdir(image_dir)# list image files prob=random.randint(1,100)print("数据集:%d个"%len(list_imgs))foriinrange(0, len(list_imgs)): path=os.path.join(image_dir, list_imgs[i])ifos.path.isfile(path): image_path=image_dir + list_imgs[i]voc_path=list_imgs[i](nameWithoutExtention, extention)=os.path.splitext(os.path.basename(image_path))(voc_nameWithoutExtention, voc_extention)=os.path.splitext(os.path.basename(voc_path))annotation_name=nameWithoutExtention +'.xml'annotation_path=os.path.join(annotation_dir, annotation_name)label_name=nameWithoutExtention +'.txt'label_path=os.path.join(yolo_labels_dir, label_name)prob=random.randint(1,100)print("Probability: %d"% prob, i, list_imgs[i])if(prob<TRAIN_RATIO):# train datasetifos.path.exists(annotation_path): train_file.write(image_path +'\n')convert_annotation(nameWithoutExtention)# convert labelcopyfile(image_path, yolov5_images_train_dir + voc_path)copyfile(label_path, yolov5_labels_train_dir + label_name)else:# test datasetifos.path.exists(annotation_path): test_file.write(image_path +'\n')convert_annotation(nameWithoutExtention)# convert labelcopyfile(image_path, yolov5_images_test_dir + voc_path)copyfile(label_path, yolov5_labels_test_dir + label_name)train_file.close()test_file.close()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 7:42:38

面试Leetcode - Graph

图&#xff08;Graph&#xff09; 图是 点&#xff08;Vertex / Node&#xff09;和 边&#xff08;Edge&#xff09;组成的结构 树其实是图的特例 树 连通且无环的无向图。 存储 邻接表 * graph { 0: [1, 2], 1: [0, 3], 2: [0], 3: [1] } 含义&#xff1a;0 与 1、2 相…

作者头像 李华
网站建设 2026/8/7 7:42:18

2026最新视频重点整理工具口碑推荐 | 经过筛选的实用选择建议

2026年经过筛选的视频重点整理实用工具中&#xff0c;听脑在录音类视频的重点提取整理场景适配度靠前&#xff0c;其余工具各有对应适配场景。适合需要整理会议、访谈、课堂类视频重点的效率工具爱好者&#xff0c;核心依据是其覆盖从转写到重点提取、待办梳理的完整流程。不适…

作者头像 李华
网站建设 2026/8/7 7:40:58

寻找靠谱的阜南网站建设公司指南:如何避免踩坑并打造高转化官网

在这个互联网早已渗透进我们生活方方面面的时代,无论是县城的特产店、本地的装修公司,还是提供专业服务的律师事务所,大家都明白一个理儿:手里没个像样的网站,出门都不好意思跟人谈数字化转型。特别是对于咱们阜南的企业老板或者创业新手来说,想在本地乃至更广阔的市场里…

作者头像 李华
网站建设 2026/8/7 7:38:52

分式函数值域求解全攻略:四大核心方法与实战避坑指南

1. 从一道“送分题”说起&#xff1a;为什么值域总让人头疼&#xff1f; 很多同学在高中阶段&#xff0c;一看到求函数值域&#xff0c;尤其是分式函数的值域&#xff0c;心里就开始打鼓。课本上的例题看起来步骤清晰&#xff0c;但一到自己做题&#xff0c;尤其是遇到稍微复杂…

作者头像 李华
网站建设 2026/8/7 7:35:54

Socket网络编程核心:TCP与UDP协议原理、Go实战与生产环境指南

1. 从“打电话”到“发快递”&#xff1a;理解Socket的本质 如果你刚开始接触网络编程&#xff0c;看到“Socket”这个词可能会觉得有点神秘。其实&#xff0c;把它想象成打电话或者寄快递&#xff0c;就非常容易理解了。简单来说&#xff0c; Socket&#xff08;套接字&#…

作者头像 李华