Mtripix库使用之VOC(.xml)与YOLO(.txt)互相转换

镇楼之宝
刘亦菲镇!!!

好了开始正题,我们发现很多人对目标检测网络和分割网络需要的数据不太清楚,导致大家想用yolo训练,但标注的数据是voc格式,然后就是疯狂找脚本或者写脚本进行转换,事实上,这样十分浪费时间,于是Mtripix库应运而生。下边我们将仔细介绍里边包含的几种数据转换方式

来源

先简单介绍下来源:

西安三重像素科技有限公司
Xi’an Triple Pixel Technology Co.,
@PIPIPINoBrain
联系方式:PIPIPINoBrain@163.com
当然有什么项目也可以联系这个邮箱

依赖及安装

由于涉及到各种转换,所需要安装的依赖还是挺多的,不过基本都是常规的库

import json
import os.path
import PIL
import imgviz
import numpy as np
import cv2
import lxml.etree as ET
import math
from lxml.etree import Element, SubElement, tostring, ElementTree
从引用的内容可以看出需要的依赖,pip install 即可

而安装也很简单,当前版本是0.0.8,安装指令在需要的环境下:

pip install Mtripix

Mtripix 安装
安装结束!!!完结!!

开玩笑,后边讲使用方式

内置函数及使用方式

统一调用

import os
import Mtripix.Mutils as MMT

VOC(.xml)转YOLO(.txt)

直接从xml转换txt开始看, 我们需要知道数据集的信息,数据集里边的类别或者自己需要的类别有哪些,比如我的voc(.xml)数据集是两类"AliveAmpullariaGigas", “AmpullariaGigas”,想要yolo(.txt)对应的标签为0,1,Mtripix提供了以下的接口转换。
voc2yolo
类别与标签对应的字典也同样提供了接口进行统计:
labels2dict

path_xmls = "./xmls"                       #xml文件的文件夹
path_txts = "./txts"                       #生成txt存放文件夹
keys = ["AliveAmpullariaGigas", "AmpullariaGigas"]       #数据集中的两种类别
idxs = ["0", "1"]                                        #每个类别对应的标签
DIC = MMT.Mtrans.labels2dict(keys, idxs)                 #生成的类别与标签对应的字典
names = os.listdir(path_xmls)
for name in names:
    p_xml  = os.path.join(path_xmls, name)
    p_txt = os.path.join(path_txts, name[:-4] + ".txt")
    MMT.Mtrans.voc2yolo(p_xml, p_txt, DIC)

运行:

打印出DIC得到{'AliveAmpullariaGigas': '0', 'AmpullariaGigas': '1'}

转换结果,对于没有标签的,生成的txt为空
空1
对于有标签的,按照类别识别标签转换:
有1

YOLO(.txt)转VOC(.xml)

我们使用上边转换后的yolo数据进行测试,流程其实大同小异,先上介绍:
yolo2voc
不同的是多增加了图像地址的输入,以及namedict好像和voc2yolo相反(key与value互换),直接上代码。

path_txts = "./txts"                       #你的yolo格式的txt存放文件夹
path_imgs = "./images"                     #对应的图片存放文件夹
path_xmls = "./xmls_2"                       #生成xml的文件夹

keys= ['0', '1']
idxs = ["AliveAmpullariaGigas", "AmpullariaGigas"]
DIC = MMT.Mtrans.labels2dict(keys, idxs)
imgs = os.listdir(path_imgs)
for img in imgs:
    p_img = os.path.join(path_imgs, img)
    p_txt = os.path.join(path_txts, img[:-4] + ".txt")
    p_xml  = os.path.join(path_xmls, img[:-4] + ".xml")
    MMT.Mtrans.yolo2voc(p_img, p_txt, p_xml, DIC)               #转换关键代码
print("Finished")

运行:
打印DIC{'0': 'AliveAmpullariaGigas', '1': 'AmpullariaGigas'}
转换结果,对于没有标签的,生成的xml为:

空2
对于有标签的,生成的xml为:

有2

  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值