Python生成PASCAL VOC格式的xml标注文件

简介: Python生成PASCAL VOC格式的xml标注文件PASCAL VOC数据集的标注文件是xml格式的。对于py-faster-rcnn,通常以下示例的字段是合适的: GTSDB 000001.jpg 500 375 3 mouse 0 99 358 135 375 怎样从csv或者txt格式的文件,读取bbox信息,生成xml格式的annotation文件呢?直接逐行写文件肯定可以,但是以后改起来并不太方便,\t和空格的替换也不太方便。

Python生成PASCAL VOC格式的xml标注文件

PASCAL VOC数据集的标注文件是xml格式的。对于py-faster-rcnn,通常以下示例的字段是合适的:

<annotation>
  <folder>GTSDB</folder>
  <filename>000001.jpg</filename>
  <size>
    <width>500</width>
    <height>375</height>
    <depth>3</depth>
  </size>
  <object>
    <name>mouse</name>
    <difficult>0</difficult>
    <bndbox>
      <xmin>99</xmin>
      <ymin>358</ymin>
      <xmax>135</xmax>
      <ymax>375</ymax>
    </bndbox>
  </object>
</annotation>

怎样从csv或者txt格式的文件,读取bbox信息,生成xml格式的annotation文件呢?直接逐行写文件肯定可以,但是以后改起来并不太方便,\t和空格的替换也不太方便。

xml.etree.ElementTree这个包似乎挺好用的,解析和生成xml都可以。但是会产生<?xml version="1.0" ?>这样一行头部版本信息。我们不需要这个信息。使用lxml包替代xml,可以去掉它。

下面给出了一个例子。

安装依赖项

sudo pip install lxml

生成xml示例代码

#!/usr/bin/env python
# coding:utf-8

#from xml.etree.ElementTree import Element, SubElement, tostring
from lxml.etree import Element, SubElement, tostring
import pprint
from xml.dom.minidom import parseString

node_root = Element('annotation')

node_folder = SubElement(node_root, 'folder')
node_folder.text = 'GTSDB'

node_filename = SubElement(node_root, 'filename')
node_filename.text = '000001.jpg'

node_size = SubElement(node_root, 'size')
node_width = SubElement(node_size, 'width')
node_width.text = '500'

node_height = SubElement(node_size, 'height')
node_height.text = '375'

node_depth = SubElement(node_size, 'depth')
node_depth.text = '3'

node_object = SubElement(node_root, 'object')
node_name = SubElement(node_object, 'name')
node_name.text = 'mouse'
node_difficult = SubElement(node_object, 'difficult')
node_difficult.text = '0'
node_bndbox = SubElement(node_object, 'bndbox')
node_xmin = SubElement(node_bndbox, 'xmin')
node_xmin.text = '99'
node_ymin = SubElement(node_bndbox, 'ymin')
node_ymin.text = '358'
node_xmax = SubElement(node_bndbox, 'xmax')
node_xmax.text = '135'
node_ymax = SubElement(node_bndbox, 'ymax')
node_ymax.text = '375'

xml = tostring(node_root, pretty_print=True)  #格式化显示,该换行的换行
dom = parseString(xml)
print xml
目录
相关文章
|
18天前
|
自然语言处理 数据挖掘 大数据
​「Python大数据」VOC数据统计聚类
使用Python脚本`learning.py`对VOC数据进行分词处理和聚类分析,借助jieba库去除停用词并统计词频。前处理后,筛选出频率最高的2000个名词存入`名词top2000.txt`。关键步骤包括加载自定义词典`luyouqi.txt`和停用词列表`stopwordsfull`。
18 0
​「Python大数据」VOC数据统计聚类
|
17天前
|
数据格式 Python
【Python】已解决:Excel无法打开文件test.xIsx“,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。
【Python】已解决:Excel无法打开文件test.xIsx“,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。
59 0
|
9天前
|
消息中间件 分布式计算 DataWorks
DataWorks产品使用合集之如何使用Python和阿里云SDK读取OSS中的文件
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
13天前
|
安全 网络安全 数据安全/隐私保护
`certifi`是一个Python包,它提供了一个包含Mozilla证书颁发机构(CA)Bundle的PEM文件。
`certifi`是一个Python包,它提供了一个包含Mozilla证书颁发机构(CA)Bundle的PEM文件。
|
13天前
|
存储 对象存储 Python
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
|
23天前
|
JSON 数据格式 Python
Flask实现内部接口----pycharm安装及新建,location代表着文件路径,下面是Python的环境,Flask是由Python开发的框架,Python文件接口ython通过GET发送
Flask实现内部接口----pycharm安装及新建,location代表着文件路径,下面是Python的环境,Flask是由Python开发的框架,Python文件接口ython通过GET发送
|
19天前
|
缓存 Shell 开发工具
[oeasy]python024_vim读取文件_从头复制到尾_撤销_重做_reg_寄存器
[oeasy]python024_vim读取文件_从头复制到尾_撤销_重做_reg_寄存器
20 5
|
16天前
|
Python
python存取yaml文件
python存取yaml文件
|
18天前
|
数据采集 存储 自然语言处理
​「Python大数据」VOC数据清洗
使用Python进行数据清洗,脚本涉及VOC数据的读取与分词。通过jieba进行中文分词,去除停用词,将清洗后的评论存入新Excel列。执行`clean.py`脚本,读取Excel文件,对每个sheet的评论内容进行处理,保留名词并移除停用词和标点,结果保存至`clean/cleaned_voc.xlsx`。关键文件包括自定义词典`luyouqi.txt`和停用词列表`stopwordsfull`。
15 0
​「Python大数据」VOC数据清洗
|
23天前
|
语音技术 Python
语音识别,python字面量,注释,变量,python变量的格式是变量名 = 变量值,加减乘除的输入方式
语音识别,python字面量,注释,变量,python变量的格式是变量名 = 变量值,加减乘除的输入方式