【转载】lableImg常用操作

目录

统计标签类别名称和数量

修改标签名称

检查JPG与标签XML一致


统计标签类别名称和数量

统计XML文件内标签的种类和其数量_鲁破特之泪的博客-CSDN博客_统计xml

import os
from tqdm import tqdm
import xml.dom.minidom


def ReadXml(FilePath):
    if os.path.exists(FilePath) is False:
        return None
    dom = xml.dom.minidom.parse(FilePath)
    root_ = dom.documentElement
    object_ = root_.getElementsByTagName('object')
    info = []
    for object_1 in object_:
        name = object_1.getElementsByTagName("name")[0].firstChild.data
        bndbox = object_1.getElementsByTagName("bndbox")[0]
        xmin = int(bndbox.getElementsByTagName("xmin")[0].firstChild.data)
        ymin = int(bndbox.getElementsByTagName("ymin")[0].firstChild.data)
        xmax = int(bndbox.getElementsByTagName("xmax")[0].firstChild.data)
        ymax = int(bndbox.getElementsByTagName("ymax")[0].firstChild.data)
        info.append([xmin, ymin, xmax, ymax, name])
    return info


def CountLabelKind(Path):
    LabelDict = {}
    print("Star to count label kinds....")
    for root, dirs, files in os.walk(Path):
        for file in tqdm(files):
            if file[-1] == 'l':
                Infos = ReadXml(root + "\\" + file)
                for Info in Infos:
                    if Info[-1] not in LabelDict.keys():
                        LabelDict[Info[-1]] = 1
                    else:
                        LabelDict[Info[-1]] += 1

    return dict(sorted(LabelDict.items(), key=lambda x: x[0]))


if __name__ == '__main__':

    SrcDir = "./Annotations"

    LabelDict = CountLabelKind(SrcDir)
    KeyDict = sorted(LabelDict)
    print("%d kind labels and %d labels in total:" % (len(KeyDict), sum(LabelDict.values())))
    print(KeyDict)
    print("Label Name and it's number:")
    for key in KeyDict:
        print("%s\t: %d" % (key, LabelDict[key]))

修改标签名称

python实现对LabelImg标注的xml文件修改其标签名字_一颗小萌新的博客-CSDN博客_labelimg修改标签名称

通过python批量修改已经标注的数据标签名字 

import os.path
import glob
import xml.etree.ElementTree as ET

path = './Annotations' # 存储标签的路径,修改为自己的Annotations标签路径

for xml_file in glob.glob(path + '/*.xml'):
    # 返回解析树
	tree = ET.parse(xml_file)
	# 获取根节点
	root = tree.getroot()
	# 对所有目标进行解析
	for member in root.findall('object'):
		objectname = member.find('name').text
		if objectname == '原来的标签名字':  # 原来的标签名字
			print(objectname)
			member.find('name').text = str('替换的标签名字')  # 替换的标签名字
			tree.write(xml_file)

检查JPG与标签XML一致

检查JPG与其标签的XML是否一一对应_鲁破特之泪的博客-CSDN博客

在手动标注自己的数据集,或请人帮忙标注数据集之后,应对检查是否每一个JPG文件都有一个对应的XML文件(检查是否标全),每一个XML文件是否都对应一个JPG文件(图片标了觉得图片太模糊而将图片删除,会遗留多余的XML文件)
修改JpgDir为JPG所在目录,XmlDir为XML文件所在目录,具体代码如下:

import os

XmlDir = "./Annotations"
JpgDir = "./images"

NoXml = []
NoJpg = []

for root, dirs, files in os.walk(JpgDir):
    for file in files:
        if file[-1] == 'g':
            if os.path.exists(XmlDir + "\\"+file[:-3] + "xml") is False:
                NoXml.append(XmlDir+"\\"+file)

for root, dirs, files in os.walk(XmlDir):
    for file in files:
        if file[-1] == 'l':
            if os.path.exists(JpgDir + "\\"+file[:-3] + "jpg") is False:
                NoJpg.append(JpgDir+"\\"+file)
if len(NoXml) == 0:
    print("All jpg are labeled")
else:
    print("%d unlabeled" % len(NoXml))
    print(NoXml)

if len(NoJpg) == 0:
    print("All xml have a jpg")
else:
    print("%d xmls have no jpg" % len(NoJpg))
    print(NoJpg)

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值