1.python解析xml

    img_path='./data/001.tif'xml_path='./xml/001.xml'img=cv2.imread(img_path)# cv2.imshow('img', img)# cv2.waitKey(0)print(img.shape)try:xmlp = ET.XMLParser(encoding="utf-8")tree = ET.parse(xml_path, parser=xmlp)root = tree.getroot()print(tree)print(root)except Exception as e:print(e, xml_path)content_info={}for i in tree.iterfind('.//正文组/正文'):print("i.attrib['篇目号']", i.attrib['篇目号'])for j in i.findall('篇目坐标'):print(j.text)print(type(j.text))content_info[i.attrib['篇目号']] =j.textprint('content_info=',content_info)

若要更改xml内容,可以

new_point='1,2,3,4'
j.text = new_point
tree.write('output_test.xml', encoding='utf-8')

2. 得到pascal voc xml格式用于目标检测

img_dir = "./images/train"
csv_dir = "./train_xml.csv"
xml_dir = "./Annotations"
if not os.path.exists(xml_dir):os.mkdir(xml_dir)imgs_path_Lists = [os.path.join(img_dir,i) for i in os.listdir(img_dir)]df=pd.read_csv(csv_dir).copy()
df_value=df.values
print(df_value.shape)
coord_h,coord_w=df_value.shape
print(df_value[:2])
for img_path_List in imgs_path_Lists:im = Image.open(img_path_List)width, height = im.sizeimg_name=img_path_List.split('/')[-1]# write in xml filexml_file = open((xml_dir + '/' + img_name.split('.jpg')[0] + '.xml'), 'w')xml_file.write('<annotation>\n')xml_file.write('    <folder>steel</folder>\n')xml_file.write('    <filename>' + img_name + '</filename>\n')xml_file.write('    <size>\n')xml_file.write('        <width>' + str(width) + '</width>\n')xml_file.write('        <height>' + str(height) + '</height>\n')xml_file.write('        <depth>3</depth>\n')xml_file.write('    </size>\n')for i in df_value:if i[0].split('/')[-1]==img_name:xmin=i[1]ymin=i[2]xmax=i[3]ymax=i[4]class_name=i[-1]# write the region of image on xml filexml_file.write('    <object>\n')xml_file.write('        <name>' + class_name + '</name>\n')xml_file.write('        <pose>Unspecified</pose>\n')xml_file.write('        <truncated>0</truncated>\n')xml_file.write('        <difficult>0</difficult>\n')xml_file.write('        <bndbox>\n')xml_file.write('            <xmin>' + str(xmin) + '</xmin>\n')xml_file.write('            <ymin>' + str(ymin) + '</ymin>\n')xml_file.write('            <xmax>' + str(xmax) + '</xmax>\n')xml_file.write('            <ymax>' + str(ymax) + '</ymax>\n')xml_file.write('        </bndbox>\n')xml_file.write('    </object>\n')xml_file.write('</annotation>')

3.美化xml

原始xml如下

<?xml version='1.0' encoding='utf-8'?>
<lab><person name='Blue'><age>22</age><gender>male</gender></person><person name='Yellow'><age>22</age><gender>female</gender></person></lab>

代码:

def prettyXml(element, indent, newline, level = 0): # elemnt为传进来的Elment类,参数indent用于缩进,newline用于换行if element:  # 判断element是否有子元素if element.text == None or element.text.isspace(): # 如果element的text没有内容element.text = newline + indent * (level + 1)else:element.text = newline + indent * (level + 1) + element.text.strip() + newline + indent * (level + 1)#else:  # 此处两行如果把注释去掉,Element的text也会另起一行#element.text = newline + indent * (level + 1) + element.text.strip() + newline + indent * leveltemp = list(element) # 将elemnt转成listfor subelement in temp:if temp.index(subelement) < (len(temp) - 1): # 如果不是list的最后一个元素,说明下一个行是同级别元素的起始,缩进应一致subelement.tail = newline + indent * (level + 1)else:  # 如果是list的最后一个元素, 说明下一行是母元素的结束,缩进应该少一个subelement.tail = newline + indent * levelprettyXml(subelement, indent, newline, level = level + 1) # 对子元素进行递归操作
def testXML():from xml.etree import ElementTree as ETtree = ET.parse('test.xml')root = tree.getroot()print(root)# #查看tag和attrib# for person in root:#     print(person.tag, person.attrib)ZF_COORD = ET.Element('字符坐标')ZWZ = ET.SubElement(ZF_COORD, '正文组')#这里需要把001变成需要的篇目号ZW = ET.SubElement(ZWZ , '正文',{'篇目号':"001"})#栏目LM=ET.SubElement(ZW, '栏目')LM.text = '12,12,334,123;12,34,45,56'#引题YT=ET.SubElement(ZW,'引题')YT.text='12,12,334,123;12,34,45,56'# 标题BT = ET.SubElement(ZW, '标题')BT.text = '12,12,334,123;12,34,45,56'# 副题FT = ET.SubElement(ZW, '副题')FT.text = '12,12,334,123;12,34,45,56'# 小标题XBT = ET.SubElement(ZW, '小标题')XBT.text = '12,12,334,123;12,34,45,56'# 作者author = ET.SubElement(ZW, '作者')author.text = '12,12,334,123;12,34,45,56'# # 向根节点添加新的子节点 root.append(ZF_COORD)# 写入 tree.write('./sample.xml', encoding="utf-8",xml_declaration=True)#美化作用tree = ET.parse('./sample.xml')  # 解析test.xml这个文件,该文件内容如上文root = tree.getroot()  # 得到根元素,Element类prettyXml(root, '\t', '\n')  # 执行美化方法# ET.dump(root)tree.write('./sample.xml', encoding="utf-8",xml_declaration=True)

新生成xml如下

<?xml version='1.0' encoding='utf-8'?>
<lab><person name="Blue"><age>22</age><gender>male</gender></person><person name="Yellow"><age>22</age><gender>female</gender></person><字符坐标><正文组><正文 篇目号="001"><栏目>12,12,334,123;12,34,45,56</栏目><引题>12,12,334,123;12,34,45,56</引题><标题>12,12,334,123;12,34,45,56</标题><副题>12,12,334,123;12,34,45,56</副题><小标题>12,12,334,123;12,34,45,56</小标题><作者>12,12,334,123;12,34,45,56</作者></正文></正文组></字符坐标>
</lab>

python解析xml+得到pascal voc xml格式用于目标检测+美化xml相关推荐

  1. COCO和 PASCAL VOC标注格式的学习笔记

    1 致谢 感谢网友"嘿芝麻"的帮助, 原文链接如下: https://blog.csdn.net/zw__chen/article/details/82856231 2 前言 感觉 ...

  2. [数据集][VOC]高质量的目标检测数据集合集(持续更新)

    [1][数据集名称]数据集VOC正版消防灭火器数据集VOC格式-5156张 [数据集信息]数据集格式:Pascal VOC格式(仅包含jpg图片和对应的xml) 图数量(jpg文件个数 xml文件个数 ...

  3. 9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测

    9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测(击中与击不中) 文章目录 9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测(击中与击不中) 1 算 ...

  4. RCNN系列实验的PASCAL VOC数据集格式设置

    我们在做RCNN系列的实验时,往往需要把数据集的格式设置为和PASCAL VOC数据集一样的格式,其实当然也可以修改读取数据的代码,只是这样更为麻烦,自己的数据格式变了又得修改.  首先以VOC200 ...

  5. 将PASCAL VOC数据集格式转换为YOLOV5 所需的格式

    1. VOC数据集 VOC数据集格式如下(以2007为例): 其中JPEGImages文件夹存放图片,Anootations下放的是标注框的信息,格式为xml:但YOLOv5所需要的格式为txt,且t ...

  6. 目标检测(四)——xml快速上手(可完整实现)

    文章目录 什么是xml xml解析讲解 一.标签介绍 filename标签 size标签 object标签 二.xml解析的API xml单个文件的解析 构建类别索引(category_id) 构建x ...

  7. 实战解析:真实AI场景下,极小目标检测与精度提升 | 百度AI公开课

    主讲人 | 哈利 百度高级研发工程师 量子位整理编辑 | 公众号 QbitAI 目前,各个企业行业在AI落地应用中,常常会遇到极小目标检测问题.在这些AI应用中,都需要在一个大图中精准识别出极小目标, ...

  8. 目标检测:XML文件矩形框在图片上的简单可视化

    代码如下: 需要改的就是开头的四行 可视化结果只有框,没有类别 用于验证 自己写的,亲测可用 import xml.etree.ElementTree as ET import os import c ...

  9. 目标检测--将xml文件中标签(矩形框)在其原图片上显示并另存

    """ 目的:将原图片(img)与其xml(xml),合成为打标记的图片(labelled),矩形框标记用红色即可 已有:(1)原图片文件夹(imgs_path),(2) ...

最新文章

  1. 手机移动防卫盾安全需求分析文档
  2. BZOJ4860 Beijing2017树的难题(点分治+单调队列)
  3. 数据格式转换(一)PDF转换技术
  4. MyBatis的初始化方式
  5. leetcode74. 搜索二维矩阵 ,你见过吗
  6. 搜狐视频怎么设置自动连播
  7. 实践中整理出tomcat集群和负载均衡
  8. linux计划任务crond服务
  9. Memcache安全性
  10. React.memo 是个啥么鬼?有什么用???
  11. 计算机标准差平方差怎么按,数学标准差公式
  12. java将明文变为密文,使用java编程实现明文和密文之间的互转
  13. matlab 绘图与动画制作
  14. 去除取消WPS的广告推送、WPS热点以及推荐软件等骚扰功能
  15. 过拟合与欠拟合及解决方法
  16. 风场可视化:绘制粒子
  17. 商业智能助力 银行业数据“挖金”
  18. javascript教程系列-1.JavaScript基础
  19. oracle mysql limit用法_mysql以及oracle数据分页的sql示例(limit和Rownum的用法) | Soo Smart!...
  20. R----stringr包介绍学习

热门文章

  1. 新手福利:百度官方中文教程,过年也要深度学习!
  2. python 两个字典的合并 update
  3. 注意力机制-深度学习中的注意力机制+注意力机制在自然语言处理中的应用
  4. RNN循环神经网络(吴恩达《序列模型》笔记一)
  5. MongoDB:SpringBoot有关@Document(collection = )与@Document(collation= )注解的区别
  6. 15 操作系统第四章 文件管理 文件的物理结构 文件存储空间管理
  7. LeetCode算法
  8. you *might* want to use the less safe log_bin_trust_function_creators variable
  9. USACO 1.2 Milking Cows (枚举)
  10. 数据结构-王道2017-第5章 图