使用tensorflow对目标检测图像进行数据训练时,需要标注大量的图像。这个工作量实在是不少。为了更加简便的标注图像,或者说增加训练集:

做如下操作:
先对每类图像各标注100-200张进行训练。
训练准确度提升完成后,将未标注的图像(测试集)进行预测。
人工分出预测对的图像,根据检测对的图像的检测框数据生成新的xml用来增加训练集。

由于之前有相应的xml文件模板,所以我们只需要修改之前的xml文件即可。
修改代码:

import os
from xml.etree.ElementTree import ElementTree,Elementdef read_xml(in_path):'''''读取并解析xml文件in_path: xml路径return: ElementTree'''tree = ElementTree()tree.parse(in_path)return treedef write_xml(tree, out_path):'''''将xml文件写出tree: xml树out_path: 写出路径'''tree.write(out_path, encoding="utf-8", xml_declaration=True)def if_match(node, kv_map):'''''判断某个节点是否包含所有传入参数属性node: 节点kv_map: 属性及属性值组成的map'''for key in kv_map:if node.get(key) != kv_map.get(key):return Falsereturn True# ----------------search -----------------
def find_nodes(tree, path):'''''查找某个路径匹配的所有节点tree: xml树path: 节点路径'''return tree.findall(path)def get_node_by_keyvalue(nodelist, kv_map):'''''根据属性及属性值定位符合的节点,返回节点nodelist: 节点列表kv_map: 匹配属性及属性值map'''result_nodes = []for node in nodelist:if if_match(node, kv_map):result_nodes.append(node)return result_nodes# ---------------change ----------------------
def change_node_properties(nodelist, kv_map, is_delete=False):'''修改/增加 /删除 节点的属性及属性值nodelist: 节点列表kv_map:属性及属性值map'''for node in nodelist:for key in kv_map:if is_delete:if key in node.attrib:del node.attrib[key]else:node.set(key, kv_map.get(key))def change_node_text(nodelist, text, is_add=False, is_delete=False):'''''改变/增加/删除一个节点的文本nodelist:节点列表text : 更新后的文本'''for node in nodelist:if is_add:node.text += textelif is_delete:node.text = ""else:node.text = textdef create_node(tag, property_map=None, content=None):'''新造一个节点tag:节点标签property_map:属性及属性值mapcontent: 节点闭合标签里的文本内容return 新节点'''element = Element(tag,content, property_map)element.text = Nonereturn elementdef add_child_node(nodelist, element):'''''给一个节点添加子节点nodelist: 节点列表element: 子节点'''for node in nodelist:node.append(element)def del_node_by_tagkeyvalue(nodelist, tag, kv_map):'''''同过属性及属性值定位一个节点,并删除之nodelist: 父节点列表tag:子节点标签kv_map: 属性及属性值列表'''for parent_node in nodelist:children = parent_node.getchildren()for child in children:if child.tag == tag and if_match(child, kv_map):parent_node.remove(child)def get_xml(input_dir):xml_path_list = []for (root_path,dirname,filenames) in os.walk(input_dir):for filename in filenames:if filename.endswith('.xml'):xml_path = root_path+"/"+filenamexml_path_list.append(xml_path)return  xml_path_listif __name__ == "__main__":input_dir ="./"xml_path_list = get_xml(input_dir)for xml_file in xml_path_list:################ 1. 读取xml文件  ##########root = read_xml(xml_file)data = [[1, 1, 1],["abc",1, 1, 1,1],["ABC",1, 1, 1,1]]# 修改图像属性size = root.find('size')size.find('height').text = "new text111"size.find('width').text = "new text111"size.find('depth').text = "new text111"# Find annotations.Object = root.findall('object')for i in range(len(Object)):if len(Object) ==2:# change_node_text(Object[i].find('name'),str(data[i+1][0]))Object[i].find('name').text = str(data[i+1][0])                 # 修改节点名Object[i].find('bndbox').find('ymin').text = str(data[i+1][1])  # 修改节点文本Object[i].find('bndbox').find('xmin').text = str(data[i+1][2])Object[i].find('bndbox').find('ymax').text = str(data[i+1][3])Object[i].find('bndbox').find('xmax').text = str(data[i+1][4])else:# change_node_text(Object[0].find('name'),"new text")Object[0].find('name').text = str(data[1][0])                 # 修改节点名Object[0].find('bndbox').find('ymin').text = str(data[1][1])  # 修改节点文本Object[0].find('bndbox').find('xmin').text = str(data[1][2])Object[0].find('bndbox').find('ymax').text = str(data[1][3])Object[0].find('bndbox').find('xmax').text = str(data[1][4])del_parent_nodes1 = find_nodes(Object[1], "object/name")del_parent_nodes2 = find_nodes(Object[1], "object/pose")del_parent_nodes3 = find_nodes(Object[1], "object/truncated")del_parent_nodes4 = find_nodes(Object[1], "object/difficult")del_parent_nodes5 = find_nodes(Object[1], "object/bndbox")del_parent_nodes6 = find_nodes(Object[1], "object/bndbox/ymin")del_parent_nodes7 = find_nodes(Object[1], "object/bndbox/xmin")del_parent_nodes8 = find_nodes(Object[1], "object/bndbox/ymax")del_parent_nodes9 = find_nodes(Object[1], "object/bndbox/xmax")Element.remove(del_parent_nodes1)Element.remove(del_parent_nodes2)Element.remove(del_parent_nodes3)Element.remove(del_parent_nodes4)Element.remove(del_parent_nodes5)Element.remove(del_parent_nodes6)Element.remove(del_parent_nodes7)Element.remove(del_parent_nodes8)Element.remove(del_parent_nodes9)################ 输出到结果文件  ##########write_xml(root, "HKEN111113.xml")

批量修改 labelImg 生成的xml文件相关推荐

  1. python实现对LabelImg标注的xml文件修改其标签名字

    使用labelImg标注数据时,通过python批量修改已经标注的数据标签名字,例如,本程序将标注生成的xml文件中的目标名字"zero"批量修改为"num", ...

  2. HTML批量删除标记,批量删除LabelImg制作的.xml中的部分标签值(删除.xml的节点值)...

    概述 自己在用labelImg打好标签后,想只用其中几类训练,不想训练全部类别,又不想重新打标生成.xml文件,因此想到这个办法:直接在.xml文件中删除原有的不需要的标签类及其属性. 打标时标签名出 ...

  3. python批量导入图片_Python批量导入图片生成PowerPoint 2007+文件

    原标题:Python批量导入图片生成PowerPoint 2007+文件 说明:本文是"Python批量爬取微信公众号文章中的图片"的后续文章,用来把从公众号批量抓取的图片还原为P ...

  4. 【数据库2】生成txt/xml文件,ftp,oracle安装/表操作/虚表/日期/序列/索引/视图/链路/同义词/高可用性,mysql/文件入库/清理/表结构设计/交换/收集

    文章目录 1.生成数据:crontab 2.ftp:ftp是tcp/ip协议族中一员,分客户端和服务端 2.1 安装:linux操作系统的用户也是ftp的用户,可以配置专用的ftp用户,专用的ftp用 ...

  5. 使用Eclipse创建Web工程后未生成web.xml文件

    使用Eclipse创建Web工程后未生成web.xml文件 鼠标右击项目,按照如下操作生成web.xml项目:

  6. 修改Android中strings.xml文件, 动态改变数据

    有些朋友可能会动态的修改Android中strings.xml文件中的值,在这里给大家推荐一种简单的方法. strings.xml中节点是支持占位符的,如下所示: <string name=&q ...

  7. matlab分析xml文件_修改Java中的XML文件(DOM分析器)

    matlab分析xml文件 We can modify XML file in Java using DOM parser. We can add elements, remove elements, ...

  8. 微软 crm开发笔记 创建查询条件,生成Fetch.XML文件

    创建查询条件,生成Fetch.XML文件 可生成: <fetch version="1.0" output-format="xml-platform" m ...

  9. SEO优化之根据网址自动生成sitemap.xml文件

    背景: 公司要做一个电商的网站,而该项目是由J2EE架构完成,项目经理说要让Java代码自助每天生成电子商务网站的Sitemap文件,然后开始上网各种查资料!!!然而,终于碰上了本人有生以来第一个在网 ...

最新文章

  1. mysql修改用户密码
  2. ios 自定义拍照页面_无需解锁也能使用的iOS实用小组件
  3. RxSwift之UI控件UISlider与UIStepper扩展的使用
  4. 9.1 LSMW程序创建操作手册 第1 2步
  5. html5表单修改颜色,在css中更改输入搜索表单的背景色
  6. 旅行 jzoj 1281
  7. 我35岁了,依然可以“横行职场”
  8. 创建线程的3种方式,线程池的参数详解
  9. 图解sql内外连接和左连接left join和右连接right join
  10. 数字通信原理_推荐 | 从飞鸽传书到数字信号,你不得不懂的通信原理
  11. 德标螺纹规格对照表_德标、欧标、国际、国标对照表
  12. 监视及系统响应的补充FMEA (FMEA-MSR)
  13. 在电脑上怎样将长方形图片裁剪成圆形的图片?
  14. 基于kettle的数据集成平台(汇总)
  15. 宏观分析(美债利率、美元、黄金、石油、标普500的相关性)
  16. 2021-06-10 MYSQL存储过程与触发器作业
  17. 涉密计算机能用固态硬盘,电脑硬盘有坏道还能继续使用吗?不要抱侥幸心理,可能后悔莫及...
  18. 网络信息安全攻防学习平台——基础关
  19. Oracle 时间差计算 数据库关于时间计算
  20. 东方财富、同花顺、大智慧、通达信的Level2行情接口哪个好?

热门文章

  1. 软工实践第八次作业——项目需求答辩
  2. 定义一个集合类setColour,要求元素为枚举类型值
  3. 【读过的书,留下的迹】高性能MySQL(第3版)
  4. 书论75 钱泳《书学》
  5. 小学计算机第二课堂内容,小学第二课堂活动实施方案
  6. 利用js 获取本日 本周 本月时间代码
  7. android 距离测量工具,手机上有个小功能,可以精确的测量距离,比卷尺还要好用...
  8. 学python是属于什么行业_学Python能挣多少钱?哪些人适合学Python?
  9. python中间件有哪些_python 中间件
  10. 网站服务器怎么恢复原来数据库,五步骤完成WordPress网站和数据库备份、搬迁恢复访问...