从目标检测数据集中选出指定类别的图片和标签

embedded/2024/10/16 2:24:19/

以VOC2007数据集为例,如果我们只想要车辆行人检测,那么只需要从其中选取有行人,自行车,车辆等目标的图片和标签,于是直接上代码:

 

import os
import shutil
import xml.etree.ElementTree as ETdef extract_objects(image_folder, xml_folder, output_image_folder, output_xml_folder, classes):# 创建输出图片文件夹和输出XML文件夹if not os.path.exists(output_image_folder):os.makedirs(output_image_folder)if not os.path.exists(output_xml_folder):os.makedirs(output_xml_folder)# 遍历xml文件夹中的每个XML文件for xml_file in os.listdir(xml_folder):print("Processing:", xml_file)xml_path = os.path.join(xml_folder, xml_file)# 解析XML文件tree = ET.parse(xml_path)root = tree.getroot()# 检查每个object标签,如果其中包含目标类别,则复制对应的图片和XML文件到输出文件夹found_objects = Falsefor obj in root.findall('object'):obj_class = obj.find('name').text.lower()if obj_class in classes:found_objects = Trueprint("Found object:", obj_class)image_name = os.path.splitext(xml_file)[0] + '.jpg'  # 假设图片文件和XML文件名一致,后缀不同image_path = os.path.join(image_folder, image_name)output_image_path = os.path.join(output_image_folder, image_name)output_xml_path = os.path.join(output_xml_folder, xml_file)# 打印路径以进行调试print("Copying from:", image_path)print("Copying to:", output_image_path)print("Copying to:", output_xml_path)# 复制图片和XML文件到输出文件夹try:shutil.copy(image_path, output_image_path)shutil.copy(xml_path, output_xml_path)except Exception as e:print("Error copying files:", str(e))break  # 只要一个目标被提取,即可跳出内循环if not found_objects:print("No target objects found in:", xml_file)# 设置输入文件夹路径和输出文件夹路径
image_folder = 'VOCdevkit/VOC2007/JPEGImages/'
xml_folder = 'VOCdevkit/VOC2007/Annotations/'
output_image_folder = 'VOCdevkit/voc/JPEGImages/'
output_xml_folder = 'VOCdevkit/voc/Annotations/'# 指定需要提取的类别
classes = ['person', 'bicycle', 'bus', 'car', 'motorbike']# 执行提取操作
extract_objects(image_folder, xml_folder, output_image_folder, output_xml_folder, classes)


http://www.ppmy.cn/embedded/39976.html

相关文章

使用python将`.mat`文件转换成`.xlsx`格式的Excel文件!!

要将.mat文件转换成.xlsx格式的Excel文件 第一步:导入必要的库第二步:定义函数来转换.mat文件第三步:调用函数注意事项 要将.mat文件转换成.xlsx格式的Excel文件,并保持文件名一致,你可以使用scipy.io.loadmat来读取.m…

Imitation Learning学习记录(理论例程)

前言 最近还是衔接着之前的学习记录,这次打算开始学习模仿学习的相关原理,参考的开源资料为 TeaPearce/Counter-Strike_Behavioural_Cloning: IEEE CoG & NeurIPS workshop paper ‘Counter-Strike Deathmatch with Large-Scale Behavioural Clonin…

Double 4 VR情景智能互动教学系统在商务旅行课堂中的应用

一、提高学生的学习兴趣 传统的商务旅行课堂教学方式往往是教师讲授理论知识,学生被动接受。这种方式很难激发学生的学习兴趣,而Double 4 VR情景智能互动教学系统则可以通过虚拟现实技术,将商务旅行的场景生动地展示给学生,让学生…

绍兴ISO27001认证:信息安全认证的金钥匙

🌈🌈绍兴ISO27001认证:✌️信息安全认证的金钥匙🔑 💘随着信息技术的飞速发展,💁信息安全问题日益凸显。🔐为了提升信息安全管理水平,👮保障企业数据资产安全…

Java高并发场景(银行转账问题)

最近面试问到了银行转账的高并发问题,回答的不是很理想,小编整理了下,题目大概如下: 有一张银行账号表(银行账号字段、金额字段),A账号要给B账号转账,A扣款,B收款&#x…

在多线程程序中,如何保证线程的安全?

在多线程程序中保证线程安全通常涉及以下一些关键技术和策略: 1. 使用同步机制 同步方法:通过在方法签名前添加 synchronized 关键字,确保一次只有一个线程能够执行该方法。同步代码块:通过 synchronized 关键字同步一个代码块&…

[蓝桥杯]真题讲解:AB路线(BFS+分层图)

[蓝桥杯]真题讲解&#xff1a;AB路线&#xff08;BFS分层图&#xff09; 一、视频讲解二、正解代码1、C2、python33、Java 一、视频讲解 [蓝桥杯]真题讲解&#xff1a;AB路线&#xff08;BFS分层图&#xff09; 二、正解代码 1、C #include<bits/stdc.h> #define INF …

sql注入之bool盲注

目录 盲注步骤 1、进入靶场 2、如下图所示输入&#xff1f;id1‘ 判断此时存在注入点 3、判断列数 ​编辑 4、开始盲注 普通的python脚本 代码思想 结果 二分查找python脚本 二分查找算法思想简介 二分查找与普通查找的主要差距 代码思想 代码 结果​编辑 下面以…