> 文章列表 > labelimg 相关知识、数据处理脚本(VOC、XML)

labelimg 相关知识、数据处理脚本(VOC、XML)

labelimg 相关知识、数据处理脚本(VOC、XML)

👨‍💻个人简介: 深度学习图像领域工作者
🎉总结链接:
             链接中主要是个人工作的总结,每个链接都是一些常用demo,代码直接复制运行即可。包括:
                    📌1.工作中常用深度学习脚本
                    📌2.torch、numpy等常用函数详解
                    📌3.opencv 图片、视频等操作
                    📌4.个人工作中的项目总结(纯干活)
              链接: https://blog.csdn.net/qq_28949847/article/details/128552785
🎉视频讲解: 以上记录,通过B站等平台进行了视频讲解使用,可搜索 ‘Python图像识别’ 进行观看
              B站:Python图像识别
              抖音:Python图像识别
              西瓜视频:Python图像识别


github网址:https://github.com/heartexlabs/labelImg

相关脚本

1. 筛选出没有标签xml文件的jpg图片(xml 和 jpg 必须对应)


'''
将jpg 和 xml 对应的文件移动到另一个文件夹,用来排除掉没有标签的图片
'''
# xml路径
path_xml = r'\\\\SHARE\\public\\Time_Plus\\traindata\\bbox\\tiaoyuan\\20230418_gjx'
# 图片路径
path_img = r'\\\\SHARE\\public\\Time_Plus\\traindata\\bbox\\tiaoyuan\\20230418_gjx'
# 保存路径
save_result = r'\\\\SHARE\\public\\Time_Plus\\traindata\\bbox\\tiaoyuan\\11'for root, dirs, files in os.walk(path_xml):for file in files:file_name, file_suffix = os.path.splitext(file)if file_suffix != '.xml':continuefile_jpg = os.path.join(path_img, file_name + '.jpg')print(file_name)if file_suffix == '.xml' and os.path.exists(file_jpg):file_txt = os.path.join(root, file)shutil.move(file_jpg, os.path.join(save_result, file_name + '.jpg'))shutil.move(file_txt, os.path.join(save_result, file))

2. 删除掉xml中没有标签的图片

import os
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Elementpath_xml = r'\\\\SHARE\\public\\Time_Plus\\traindata\\bbox\\tiaoyuan\\20230418_gjx'
path_jpg = r'\\\\SHARE\\public\\Time_Plus\\traindata\\bbox\\tiaoyuan\\20230418_gjx'
for root, dirs, files in os.walk(path_xml):for file in files:filename, extension = os.path.splitext(file)if 'xml' not in extension:continuexml_file = os.path.join(root, file)tree = ET.parse(xml_file)xml_root = tree.getroot()try:object = xml_root.find('object')print(object.find('bndbox').find('xmin').text)except:print('移除文件:', xml_file)os.remove(xml_file)os.remove(os.path.join(path_jpg, filename + '.jpg'))

3. 统计文件夹下xml中所有label的数量,以及xml文件的数量

# -*- coding:utf-8 -*-
import os
import xml.etree.ElementTree as ET
import numpy as npxml_path = r'\\\\SHARE\\public\\Time_Plus\\traindata\\bbox\\tiaoma\\20230418_zxl'dic_class = {}
xml_num = 0for root, dirs, files in os.walk(xml_path):for file in files:filename, extension = os.path.splitext(file)if 'xml' not in extension:continuexml_file = os.path.join(root, file)tree = ET.parse(xml_file)objects = []for obj in tree.findall('object'):cls = obj.find('name').textif cls not in dic_class.keys():dic_class[cls] = 1else:dic_class[cls] += 1xml_num += 1print('各类标签数量为:', dic_class)
print('总标签数量为:', xml_num)

4. 修改xml文件中的某些值(打标签过程中,难免会有写标签会标错,可以用程序直接修改)

import os
import xml.etree.ElementTree as ETpath_xml = r'\\\\SHARE\\public\\Time_Plus\\traindata\\bbox\\dangang\\20230420_zxl'
save_path = r'\\\\SHARE\\public\\Time_Plus\\traindata\\bbox\\dangang\\20230420_zxl'for root, dirs, files in os.walk(path_xml):for file in files:filename, extension = os.path.splitext(file)if 'xml' not in extension:continuexml_file = os.path.join(root, file)tree = ET.parse(xml_file)folder = tree.find('folder').textfilename = tree.find('filename').textsz = tree.find('size')for object in tree.findall('object'):cls = object.find('name').textif cls == 'personf':object.find('name').text = 'person'print(file, cls, '错误标签')tree.write(os.path.join(save_path, file), encoding="utf-8", xml_declaration=True)

5. 将图片和标签分成JPEGImages和Annotations保存

import os
import shutil'''
将图片和标签文件移动到目标目录下,形成jpg放在JPEGImages下,xml放在Annotations下path_ori:是主目录,这个目录下有多个文件夹
'''
path_ori = r'\\\\SHARE\\public\\Time_Plus\\traindata\\bbox'path_dir = os.listdir(path_ori)
# 先对文件夹进行遍历
for dir in path_dir:for root, dirs, files in os.walk(os.path.join(path_ori, dir)):if len(files) > 0:imgs_dir = os.path.join(root, "JPEGImages")labs_dir = os.path.join(root, "Annotations")os.makedirs(imgs_dir)os.makedirs(labs_dir)for file in files:filename, extension = os.path.splitext(file)if 'xml' in extension:ann = os.path.join(root, file)shutil.move(ann, labs_dir)elif 'jpg' in extension:img = os.path.join(root, file)shutil.move(img, imgs_dir)elif 'json' in extension:json = os.path.join(root, file)shutil.move(json, labs_dir)