当前位置: 首页 > news >正文

目标检测篇:如何根据xml标注文件生成类别classes的json文件

1. 介绍

之前在做目标检测任务的时候,发现很多的数据集仅有数据(只有图片+标注的xml文件),没有关于类别的json文件,为了以后方便使用,这里记录一下

一般来说,yolo标注的数据集,只有第一个是数字类别,要是没有classes对应的类别,只能根据图片一个个输入。

对于xml解释性标签文件,标注的时候,object下面的name就是目标检测框的分类,所以这里只有xml生成类别json文件的代码

2. 实现代码

代码实现简单,仅有50行,这里简单介绍

这里root传入的是数据集的xml目录,因为训练集包含本检测任务的所有分类,这里传入的是目录

if __name__ == "__main__":root = './my_xml_dataset/train/annotations'          # 数据集的 xml 目录xml2json(root)

下面读取xml文件的内容,这里的data以及将单个xml文件全部解析出来

  • open里面的encoding和errors参数是因为本实验的xml包含中文字符,这样可以防止报错,正常的话不需要这两个参数,如果xml编码不一样,根据报错信息,百度一下传入不同编码就行了
  • parse_xml_to_dict  为自定义函数,后面会贴所有代码,这里只需要知道利用递归将xml文件解析成字典文件即可,看下面的data打印信息

接着开始读取单个xml的所有目标类别,如下

classes需要去除重复的目标,生成单个的classes文件

最好生成json文件即可

可以看出,测试数据的目标共有10347个

生成的json文件如下:

3. 完整代码

如下:

import os
from tqdm import tqdm
from lxml import etree
import json# 读取 xml 文件信息,并返回字典形式
def parse_xml_to_dict(xml):if len(xml) == 0:  # 遍历到底层,直接返回 tag对应的信息return {xml.tag: xml.text}result = {}for child in xml:child_result = parse_xml_to_dict(child)  # 递归遍历标签信息if child.tag != 'object':result[child.tag] = child_result[child.tag]else:if child.tag not in result:  # 因为object可能有多个,所以需要放入列表里result[child.tag] = []result[child.tag].append(child_result[child.tag])return {xml.tag: result}# 提取xml中name保留为json文件
def xml2json(data):xml_path = [os.path.join(data, i) for i in os.listdir(data)]classes = []      # 目标类别num_object = 0for xml_file in tqdm(xml_path, desc="loading..."):with open(xml_file,encoding='gb18030',errors='ignore') as fid:      # 防止出现非法字符报错xml_str = fid.read()xml = etree.fromstring(xml_str)data = parse_xml_to_dict(xml)["annotation"]  # 读取xml文件信息for j in data['object']:        # 获取单个xml文件的目标信息ob = j['name']num_object +=1if ob not in classes:classes.append(ob)print(num_object)# 生成json文件labels = {}for index,object in enumerate(classes):labels[index] = objectlabels = json.dumps(labels,indent=4)with open('class_indices.json','w') as f:f.write(labels)if __name__ == "__main__":root = './my_xml_dataset/train/annotations'          # 数据集的 xml 目录xml2json(root)

下载地址:关于目标检测:如何根据XML标签文件生成检测类别的json字典文件,包含数据集、测试代码以及生成好的json文件

相关文章:

目标检测篇:如何根据xml标注文件生成类别classes的json文件

1. 介绍 之前在做目标检测任务的时候,发现很多的数据集仅有数据(只有图片标注的xml文件),没有关于类别的json文件,为了以后方便使用,这里记录一下 一般来说,yolo标注的数据集,只有第一个是数字类别&#x…...

spring见解2基于注解的IOC配置

3.基于注解的IOC配置 学习基于注解的IOC配置&#xff0c;大家脑海里首先得有一个认知&#xff0c;即注解配置和xml配置要实现的功能都是一样的&#xff0c;都是要降低程序间的耦合。只是配置的形式不一样。 3.1.创建工程 3.1.1.pom.xml <?xml version"1.0" en…...

Uncaught TypeError: Cannot read property ‘snj‘ of null

项目场景&#xff1a; 项目相关背景&#xff1a; 调试项目时&#xff0c;控制台出现红色报错信息 问题描述 问题&#xff1a; 调试项目时&#xff0c;控制台出现如下所示的报错信息&#xff1a; Uncaught TypeError: Cannot read property snj of nullat T.Inj.Ya [as Inj…...

Jenkins基础教程

目录 第一章、快速了解Jenkins1.1&#xff09;Jenkins中一些概念介绍1.2&#xff09;Jenkins和maven用途上的区别1.3&#xff09;为什么使用Jenkins1.4&#xff09;学习过程中的疑问 第二章、安装Jenkins2.1&#xff09;安装之前的准备2.2&#xff09;Windows中Jenkins下载安装…...

嵌入式C语言--WatchDog最全概念

嵌入式C语言–WatchDog最全概念 嵌入式C语言--WatchDog最全概念 嵌入式C语言--WatchDog最全概念一. 什么是Watchdog1&#xff09;什么是“被狗咬”2&#xff09;什么是喂狗 二. 基本思想三. 作用四. 监视目标1) 监视一个进程2&#xff09;监视一个操作系统 五. 系统初始化时关闭…...

数据结构【树篇】(二)

数据结构【树篇】(二&#xff09; 文章目录 数据结构【树篇】(二&#xff09;前言为什么突然想学算法了&#xff1f;为什么选择码蹄集作为刷题软件&#xff1f; 目录树(一)、树的存储(二)、树和森林的遍历——并查集(三)、并查集的优化 结语 前言 为什么突然想学算法了&#xf…...

2024上海城博会|上海国际城市与建筑博览会-官 网

2024上海城博会|上海国际城市与建筑博览会 时间&#xff1a;2024年10月30日-11月1日 地点&#xff1a;上海世博展览馆 主办单位&#xff1a;联合国人居署 上海市住房和城乡建设管理委员会 协办单位&#xff1a;上海世界城市日事务协调中心 展会介绍 上海国际城市与建筑博览…...

Dockerfile - 基于 SpringBoot 项目自定义镜像(项目上线全过程)

目录 一、Dockerfile 自定义项目镜像 1.1、创建 SpringBoot 项目并编写 1.2、打包项目&#xff08;jar&#xff09; 1.3、编写 Dockerfile 文件&#xff0c;构建镜像 1.4、运行镜像并测试 一、Dockerfile 自定义项目镜像 1.1、创建 SpringBoot 项目并编写 a&#xff09;简…...

论文查重降重写成大白话可以吗

大家好&#xff0c;今天来聊聊论文查重降重写成大白话可以吗&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 论文查重降重&#xff1a;用大白话解析 一、引言 写论文是每个…...

【WPF.NET开发】WPF中的命令

本文内容 什么是命令WPF 中的简单命令示例WPF 命令中的四个主要概念命令库创建自定义命令 命令是 Windows Presentation Foundation (WPF) 中的一种输入机制&#xff0c;与设备输入相比&#xff0c;它提供的输入处理更侧重于语义级别。 示例命令如许多应用程序均具有的“复制…...

怎么将epub转换成txt文件?

怎么将epub转换成txt文件&#xff1f;在当前时代&#xff0c;各种各样的电子书是很多人都喜欢接触并阅读的&#xff0c;但很少有人知道电子书格式的不同&#xff0c;其中就包括epub和txt格式&#xff0c;这两种格式虽然都可以展示文本但能达到的效果完全不一样&#xff0c;在某…...

Java单词排序

【问题描述】 编写一个程序&#xff0c;从一个文件中读入单词&#xff08;即&#xff1a;以空格分隔的字符串&#xff09;&#xff0c;并对单词进行排序&#xff0c;删除重复出现的单词&#xff0c;然后将结果输出到另一个文件中。 【输入形式】从一个文件sort.in中读入单词。 …...

Moonsong Labs与Web3演变

作者&#xff1a;Derek Yoo 创建Moonsong Labs的理由 我们创建了Moonsong Labs&#xff0c;其使命是创建推动Web3采用的软件基础设施协议。我们的动力来自这样一个观念&#xff0c;即Web3使人类相互交往更加透明、高效和公正。这无疑是一个值得努力实现的目标&#xff0c;但更…...

流媒体学习之路(WebRTC)——GCC分析(4)

流媒体学习之路(WebRTC)——GCC分析&#xff08;4&#xff09; —— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost目标&#xff1a;可以让大家熟悉各类Qos能力、带宽估计能力&#xff0c;提供每个环节关键参数调节接口并实现一个json全配置…...

k8s持久化存储(NFS-StorageClass)

一、StatefulSet由以下几个部分组成&#xff1a; 用于定义网络标志&#xff08;DNS domain&#xff09;的Headless Service用于创建PersistentVolumes的volumeClaimTemplates定义具体应用的StatefulSet 二、StatefulSet 特点 StatefulSet 适用于有以下某个或多个需求的应用&a…...

java servlet软件缺陷库管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java servlet软件缺陷库管理系统是一套完善的java web信息管理系统 系统采用serlvetdaobean&#xff08;mvc模式)&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOM…...

19|BabyAGI:根据气候变化自动制定鲜花存储策略

19&#xff5c;BabyAGI&#xff1a;根据气候变化自动制定鲜花存储策略 随着 ChatGPT 的崭露头角&#xff0c;我们迎来了一种新型的代理——Autonomous Agents&#xff08;自治代理或自主代理&#xff09;。这些代理的设计初衷就是能够独立地执行任务&#xff0c;并持续地追求长…...

面试经典150题(62-64)

leetcode 150道题 计划花两个月时候刷完&#xff0c;今天&#xff08;第三十天&#xff09;完成了3道(62-64)150&#xff1a; 62.&#xff08;226. 翻转二叉树&#xff09;题目描述&#xff1a; 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其…...

流量困境下,2024年餐饮商家的直播带货生意到底怎么做?

据官方数据显示&#xff0c;截至2023年2月&#xff0c;抖音生活服务餐饮商家直播间数量达到43万&#xff0c;2023年7月&#xff0c;抖音生活服务餐饮行业自播商家数较1月增长134%。可以说&#xff0c;直播带货已经成为餐饮商家的常态化的线上营销模式&#xff0c;也成为各大餐饮…...

C++ 具名要求-基本概念-指定该类型对象可以默认构造

指定该类型对象可以默认构造 要求 以下情况下&#xff0c;类型 T 满足可默认构造 (DefaultConstructible) &#xff1a; 给定 任意标识符 u&#xff0c; 下列表达式必须合法且拥有其指定的效果 表达式后条件T u对象 u 被默认初始化。T u{}对象 u 被值初始化或聚合初始化。…...

AI辅助开发:打造你的智能编程技能教练——基于快马平台实践

最近在学编程时&#xff0c;发现一个痛点&#xff1a;遇到问题经常要反复查文档、搜论坛&#xff0c;效率很低。刚好体验了InsCode(快马)平台的AI辅助功能&#xff0c;用它做了个"智能编程教练"的小项目&#xff0c;效果意外地好。分享下具体实现思路和实际体验&…...

Rk3566 yolov5部署(一)Ubuntu系统镜像烧录与串口调试实战

1. 准备工作&#xff1a;硬件与软件清单 在开始RK3566开发板的Ubuntu系统镜像烧录之前&#xff0c;我们需要准备好必要的硬件和软件工具。我刚开始接触这块开发板时&#xff0c;就因为漏掉了几个小配件耽误了一整天时间&#xff0c;所以特别提醒大家要仔细检查以下清单。 硬件部…...

雀魂智能辅助:从零构建你的AI麻将教练系统

雀魂智能辅助&#xff1a;从零构建你的AI麻将教练系统 【免费下载链接】Akagi A helper client for Majsoul 项目地址: https://gitcode.com/gh_mirrors/ak/Akagi 想在雀魂对局中获得实时AI分析与策略指导&#xff1f;雀魂智能辅助系统通过深度学习技术&#xff0c;为玩…...

dygraphs核心架构解析:理解Canvas渲染机制与高性能图表实现

dygraphs核心架构解析&#xff1a;理解Canvas渲染机制与高性能图表实现 【免费下载链接】dygraphs Interactive visualizations of time series using JavaScript and the HTML canvas tag 项目地址: https://gitcode.com/gh_mirrors/dy/dygraphs dygraphs是一个基于HTM…...

[技术突破]obs-multi-rtmp:解决多平台直播资源浪费问题的高效分发方案

[技术突破]obs-multi-rtmp&#xff1a;解决多平台直播资源浪费问题的高效分发方案 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 行业痛点诊断 直播行业正面临多平台分发的严峻挑战&a…...

【agent原理】OpenClaw之agent全链路详解

未来已来,只需一句指令,养龙虾专栏导航,持续更新ing… openclaw的术语约定 专业术语 类比 核心作用 不用的后果 Agent Bootstrapping AI员工的入职仪式 给AI办工牌、定岗位职责、录用户信息、建工作文件夹,只执行一次 手动建文件格式错乱、agent读不到规则、配置不统一、重…...

RevokeMsgPatcher:突破微信消息限制的高效管理工具

RevokeMsgPatcher&#xff1a;突破微信消息限制的高效管理工具 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitcode.com/G…...

某高校学生考微软MOS认证加学分

临近毕业季&#xff0c;到底是谁的学分还没有修够&#xff1f;微软MOS认证证书也可以加学分&#xff0c;每天学习两个小时&#xff0c;一周就可以完成考试&#xff0c;当天就出证书&#xff01;&#x1f4cc;关于难度选择版本难度&#xff1a;2016 < 2019 < 365&#xff…...

SAP IDoc入站出站处理全流程拆解:从WE19测试到IDOC_INPUT_函数调试

SAP IDoc接口开发实战&#xff1a;从零构建到生产环境调试全指南 在SAP系统集成领域&#xff0c;IDoc&#xff08;Intermediate Document&#xff09;作为企业级数据交换的标准载体&#xff0c;其重要性不言而喻明。不同于简单的文件传输&#xff0c;一个健壮的IDoc接口需要开发…...

vLLM-v0.17.1参数详解:--disable-log-stats与--log-level日志调优

vLLM-v0.17.1参数详解&#xff1a;--disable-log-stats与--log-level日志调优 1. vLLM框架简介 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库&#xff0c;以其出色的吞吐量和易用性著称。这个项目最初由加州大学伯克利分校的天空计算实验室开发&#xff0c;现在…...