利用Python进行图像和XML标注数据的批量处理

  在机器学习项目中,特别是涉及到图像识别和分类的领域,经常需要对大量数据进行预处理。这些数据预处理可能包括图像转换、格式化标签、数据集划分等。本文将介绍一个基于Python的脚本,该脚本能够自动化这些常见任务,并且还支持多进程处理以加速这些操作。

脚本核心功能

  该脚本具有以下核心功能:
  (1)读取XML标注文件,提取类标签,确保标注的一致性。
  (2)将XML标注文件转换为YOLO格式。
  (3)对图像数据进行处理,如移动和重命名。
  (4)划分数据集为训练集和验证集。
  (5)支持多进程处理,提高处理效率。

主要函数解析

  以下是一些核心函数的解析,它们构成了脚本的主要功能:
  (1)revise_data(path)
  该函数遍历指定路径下的所有XML标注文件,提取其中的类标签,并确保类的一致性。这对于数据清洗和一致性核对是非常有用的。
  (2)convert_annotation(image_id, father_dir, classes)
  通过这个函数,可以将指定图像的XML标注文件转换为YOLO格式的标签文件。YOLO格式是深度学习中常用的,适用于目标检测任务。
  (3)process_image(sub_dir, data_dir, temp_dir)
  此函数用于处理图像数据,主要包括复制图像到临时文件夹,对图像进行必要的预处理,之后清除原始图像文件夹,并将处理后的图像移动到原始位置。
  (4)split_train_val_datasets_multiprocessing(all_datasets_image_path, Number_of_intervals, num_processes)
  数据集划分非常重要,它决定了训练集和验证集的数据。这个函数可以自动化这一过程,并且支持多进程,以便在处理大规模数据集时加快速度。
  (5)transfer_labels_multiprocessing(image_path, classes, num_processes)
  当需要将XML格式的标注数据转换为YOLO格式时,这个函数可以把该过程多进程化,显著提升效率。

使用案例

  如果你有一个包含图片和XML标注文件的大型数据集,并想要转换标注格式,清洗数据,并分割数据集,你可以这样使用脚本:
  (1)设置dataDir, temp_dir, saveDir, sub_list等变量,确保它们指向正确的文件夹路径。
  (2)调用revise_data()来清洗和核对XML标注。
  (3)然后使用transfer_labels_multiprocessing()函数批量转换标注格式。
  (4)利用split_train_val_datasets_multiprocessing()函数划分数据集。
  (5)最后通过process_image_multiprocessing()处理图像数据。

代码

import cv2
import os
import glob
import shutil
import os.path
import os.path
import numpy as np
from tqdm import tqdm
from pathlib import Path
from multiprocessing import Pool
import xml.etree.ElementTree as ETglobal namesdef revise_data(path):class_label_list = []for xml_file in tqdm(glob.glob(path + '/*.xml')):tree = ET.parse(xml_file)root = tree.getroot()for member in root.findall('object'):objectname = member.find('name').textclass_label_list.append(objectname)tree.write(xml_file, encoding="UTF-8")list_class = list(set(class_label_list))print(len(list_class))print(list_class)return list_classdef get_file_list(file_path):dir_list = os.listdir(file_path)if not dir_list:returnelse:dir_list = sorted(dir_list, key=lambda x: os.path.getmtime(os.path.join(file_path, x)))return dir_listdef bnd_box_to_yolo_line(size, box):x_min = max(0, min(box[0], size[0]))x_max = max(0, min(box[1], size[0]))y_min = max(0, min(box[2], size[1]))y_max = max(0, min(box[3], size[1]))x_center = float((x_min + x_max)) / 2 / size[0]y_center = float((y_min + y_max)) / 2 / size[1]w = float((x_max - x_min)) / size[0]h = float((y_max - y_min)) / size[1]return x_center, y_center, w, hdef convert_annotation(image_id, father_dir, classes):in_file = open(father_dir + '/annotations/%s.xml' % (image_id))out_file = open(father_dir + '/labels/%s.txt' % (image_id), 'w')tree = ET.parse(in_file)root = tree.getroot()size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)for obj in root.iter('object'):difficult = obj.find('difficult').textcls = obj.find('name').textif cls not in classes or int(difficult) == 1:continuecls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = (float(xmlbox.find('

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/812081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS导读 (元素显示模式 下)

(大家好,今天我们将继续来学习CSS的相关知识,大家可以在评论区进行互动答疑哦~加油!💕) 目录 3.6 元素显示模式转换 3.7 (一个小技巧)单行文字垂直居中的代码 3.8 单行文字垂直居中的原理 3.9 小案例…

leaflet知识点:地图窗格panes的应用

一,需求背景 地图中存在无人机,停机坪,航线三个图层,需要实现无人机图层显示在最上面,停机坪图层显示在最下面,航线图层显示在中间。 二,遇到问题 由下图可知航线图层所在overlayPane窗格的z-…

mac下docker搭建nginx+php+mysql,并实现nginx负载均衡

一 环境 系统:macOS Sonoma 14.3芯片:Apple M3 Prodocker 版本:25.0.5 二 软件 OrbStack [推荐,一款轻量化的docker管理软件,还是docker的命令]item2 三 步骤 拉取 nginx 镜像 docker pull nginx新建一个 nginx …

openjudge_2.5基本算法之搜索_1789:算24

题目 1789:算24 总时间限制: 3000ms 内存限制: 65536kB 描述 给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。 这里加减乘除以及括号的运算结…

工控 modbusTCP 报文

Tx 发送报文:00 C9 00 00 00 06 01 03 00 00 00 02 Rx 接收报文:00 C9 00 00 00 07 01 03 04 01 4D 00 01 Tx 发送报文:00 C9 00 00 00 06 01 03 00 00 00 02 00 C9 事务处理标识符 2字节 00 00 协议标识符 2字节 固定 00 00 00 06 长度 2字节 表示之后的字节总数 (…

大数据之ClickHouse

大数据之ClickHouse 简介 ClickHouse是一种列式数据库管理系统,专门用于高性能数据分析和数据仓库应用。它是一个开源的数据库系统,最初由俄罗斯搜索引擎公司Yandex开发,用于满足大规模数据分析和报告的需求。 特点 开源的列式存储数据库…

elementUI 下拉框加提示文案

效果如下&#xff1a; 展示文案在最下面&#xff0c;跟选项有个分割线 <el-select v-model"value" placeholder"请选择" clearable popper-class"addNotice" class"addNoticeS" visible-change"(v) >selectNotice(v,展示…

Testng测试框架(7)--测试运行

忽略测试 TestNG可以让你忽略类、特殊包、包及其子中的所有Test方法。 当在测试方法级别使用Ignore 注解&#xff0c;在功能上与Test(enabledfalse).一样。 以下例子将忽略类中所有tests。 import org.testng.annotations.Ignore; import org.testng.annotations.Test; Ign…

秦朗丢寒假作业系摆拍 博主被处罚

大家好&#xff01; 我是老洪&#xff0c;刚看到秦朗丢寒假作业系摆拍博主被处罚。 据央视财经媒体报道&#xff0c;近期&#xff0c;“秦朗丢寒假作业”事件被证实为自导自编的摆拍视频。 图片来源央视财经公众号截图 该博主与同事薛某&#xff0c;为了吸引更多的粉丝和流量&a…

Lua语法(二)——闭包/日期和时间

参考链接: 系列链接: Lua语法(一) 系列链接: Lua语法(二)——闭包/日期和时间 系列链接: Lua语法(三)——元表与元方法 系列链接: Lua语法(四)——协程 系列链接: Lua语法(五)——垃圾回收 系列链接: Lua语法(六)——面相对象编程 Lua语法 目录二 概述闭包模块和包模块和包相关…

基于SSM的旅游管理系统论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对旅游信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差&am…

Go语言中忘记字符串格式化可能产生的副作用

格式化字符串是开发人员经常要进行操作,无论是返回错误还是记录消息。但在处理并发应用程序时,开发人员很容易忘记字符串格式化带来的潜在副作用。下面将看到两个具体示例:一个是读取etcd存储导致数据竞争,另一个是导致死锁的情况。 1. etcd数据竞争 etcd是一个用Go实现的…

解决cmd输入py文件路径不能执行,使用anaconda prompt 能执行

究其原因&#xff0c;是因为没有配置环境&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 第一步&#xff1a;配置环境变量 操作步骤如下&#xff1a; 1、右击此电脑 ---->属性 2、高级系统设置 3、点击环境变量 4、选择 …

代码随想录--数组--长度最小的子数组

题目 给定一个含有 n 个正整数的数组和一个正整数 s &#xff0c;找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组&#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0。 示例&#xff1a; 输入&#xff1a;s 7, nums [2,3,1,2,4,3] 输出&#…

Java学习笔记03:核心类

4.1 基本类型的封装类 // 字符串转int Integer obj new Intreger("10"); int n new Integer("10"); int num Integer.parseInt("10"); // 字符串转float float fl loat.parseFloat("10.0"); float f2 new Float("10.0"…

【论文笔记】ResRep: Lossless CNN Pruning via Decoupling Remembering and Forgetting

Abstract 提出了ResRep&#xff0c;一种无损通道修剪的新方法&#xff0c;它通过减少卷积层的宽度&#xff08;输出通道数&#xff09;来缩小CNN的尺寸。 建议将CNN重新参数化为记忆部分和遗忘部分&#xff0c;前者学习保持性能&#xff0c;后者学习修剪。通过对前者使用常规 …

[BT]BUUCTF刷题第16天(4.12)

第16天 Web [MRCTF2020]Ezpop 打开网站就是一段泄露的源代码&#xff1a; <?php //flag is in flag.php //WTF IS THIS? //Learn From https://ctf.ieki.xyz/library/php.html#%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95 //And Crack…

「49」一拆为九,探索直播内容的商业价值

「49」拆分变现:一拆为九探索直播内容的商业价值 直播已经成为现代社交互动的热门方式,然而,直播内容一经结束,是否可以为我们带来更多的价值? 这篇文章将探究如何发挥创意,将直播内容变现为多种形式,例如电子书、实体书、课程和短视频、文章、音频等,让我们一起来一…

数字化转型(二)-华为发布的数字化转型:从战略到执行

个人认为这是一篇很好&#xff0c;值得看的文章&#xff0c;但是没啥大用&#xff0c;可供参考。 数字化转型是一个复杂而全面的过程&#xff0c;它涉及到从战略规划到具体执行的多个层面。根据提供的信息&#xff0c;我们可以从以下几个方面来理解和探讨数字化转型的从战略到执…

文件名乱码危机:数据恢复全攻略

在数字化时代的浪潮中&#xff0c;电脑文件成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;有时我们会突然遭遇一个令人头疼的问题&#xff1a;原本清晰易读的文件名突然变成了乱码。这些乱码文件名不仅让我们无法准确识别文件内容&#xff0c;更可能意味着数据丢…