图像识别学习记录

  • 一.TXT to XML
  • 二.XML to TXT

最近学习图像识别在训练模型时需要将不同模型需要的标注格式来回批量转换,本文介绍了2种方法可以将XML和TXT标注信息相互转换。
网上看了很别人的例子但是发现很多都会在顶部出现,<?xml version=‘1.0’>’。

尝试了很多方法后发现https://blog.csdn.net/donkey_1993/article/details/96327270和https://blog.csdn.net/weixin_43202256/article/details/83185089的思路很有效,就是通过一个已存在的标准格式的XML文件将其他的在这上面做修改后输出成新的XML文件。这种方法就不会存在注释且简单代码量少。

————————————————
版权声明:本文为CSDN博主「和美琪一起的日子里」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_43202256/article/details/83185089

一.TXT to XML

首先介绍第一种TXT转成XML格式
我的txt文件的格式如下存储了图片信息的txt文件格式(filename x_min,y_min,x_max,y_max,label)
我做的是一个人和带帽子人的识别,0为没戴帽子的人,1为带帽子的人。

要批量转换的xml文件格式如下

from lxml.etree import Element, SubElement, tostring, ElementTree
import numpy as np
import cv2
import copydef cv_imread(file_path):cv_img=cv2.imdecode(np.fromfile(file_path,dtype=np.uint8),-1)#当图片的路径存在中文时,使用此函数读图就不会报错了return cv_img
def TXTtoXML(train_file,folderphoto,savepathfinal):with open(train_file) as f:trainfiles = f.readlines()tree = ElementTree()for line in trainfiles:trainFile = line.split()#将该行按空格切分#print(trainFile,(len(trainFile)))path = folderphoto+trainFile[0]filename=trainFile[0]print(filename)print(type(filename))photonum=filename[0:-4]jpg_dirtory = pathimg_name = jpg_dirtory.split('/')[-1]print(path)im = cv_imread(path)w = im.shape[1] #img.shape[1]是图片的宽度h = im.shape[0]#img.shape[0]是图片的高度d = im.shape[2]#img.shape[0]是图片的深度# print w,h,dtree.parse(template_file)root = tree.getroot()root.find('filename').text = img_nameroot.find('path').text = pathsz=root.find('size')sz.find('height').text = str(w)sz.find('width').text = str(h)sz.find('depth').text = str(d)print(path)print(len(trainFile))#检测到人的个数减一for i in range(1,len(trainFile),1):detail= trainFile[i].split(',')#print(type(detial))xmin = str(int(float(detail[0])))ymin = str(int(float(detail[1])))xmax = str(int(float(detail[2])))ymax = str(int(float(detail[3])))label = detail[4]#类型我这里用0表示person,1表示带hat带帽子的人print(xmin, ymin, xmax, ymax, label)  # 判断有多少个空格分隔的,第0个是文件名,第1个是第一个目标的信息,第二个是第二个目标的信息。将其用‘,’分割if i==1:#因为我这是多目标检测所以需要加个判断,当只有一个框的时候替换原来的模板上的objectobj = root.find('object')obj.find('name').text = label.replace('0', 'person').replace('1','hat')bb = obj.find('bndbox')bb.find('xmin').text = xminbb.find('ymin').text = yminbb.find('xmax').text = xmaxbb.find('ymax').text = ymaxelse:#当写入第二个以上框的数据时添加ojbectroot = tree.getroot()obj_ori = root.find('object')obj = copy.deepcopy(obj_ori)  # 注意这里深拷贝obj.find('name').text = label.replace('0', 'person').replace('1','hat')bb = obj.find('bndbox')bb.find('xmin').text = xminbb.find('ymin').text = yminbb.find('xmax').text = xmaxbb.find('ymax').text = ymaxroot.append(obj)savepath=savepathfinal+photonum+'.xml'tree.write(savepath, encoding='utf-8')if __name__ == "__main__":template_file = 'E:/000000.xml'#XML实例train_file = 'C:/Users/YXY/Desktop/TXTNEW/yidabiao.txt' # 存储了图片信息的txt文件格式(filename x_min,y_min,x_max,y_max,label)folderphoto='C:/Users/YXY/Desktop/python脚本工具/photo/'#原始图片的路径savepathfinal=r'E:/testxml/'#生成的xml文件存储路径TXTtoXML(train_file,folderphoto,savepathfinal)

二.XML to TXT

接下来介绍将XML转换成txt的代码,转换后的格式就跟最上面的txt内的内容一样。

import os
import os.path
import xml.etree.ElementTree as ET
import globdef xml_to_txt(xmlpath,txtpath):os.chdir(xmlpath)annotations = os.listdir('.')annotations = glob.glob(str(annotations)+'*.xml')file_save = '/'+'train' + '.txt'file_txt = os.path.join(txtpath, file_save)f_w = open(file_txt, 'w')for i,file in enumerate(annotations):in_file = open(file,encoding='gb18030', errors='ignore')#可能是文本中会出现的一些特殊符号超出了gbk的编码范围,可以选择编码范围更广的‘gb18030’tree=ET.parse(in_file)root = tree.getroot()L= ''filename = root.find('filename').textfor obj in root.iter('object'):name = obj.find('name').textclass_num = class_names.index(name)xmlbox = obj.find('bndbox')x1 = xmlbox.find('xmin').textx2 = xmlbox.find('xmax').texty1 = xmlbox.find('ymin').texty2 = xmlbox.find('ymax').textL+=x1+','+y1+','+x2+','+y2+','+str(class_num)+' 'f_w.write(filename+' '+L+'\n')if __name__ == "__main__":class_names = ['person','hat']#看你自己时用的哪些字符对分类进行命名对应修改。xmlpath='E:/testxml'txtpath='E:/testtxt'xml_to_txt(xmlpath,txtpath)

————————————————

图像识别模型中图片标注文件的txt和xml类型相互转换相关推荐

  1. XML文件转TXT,XML无图片宽高信息

    XML文件转TXT,XML无图片宽高信息 网络上有很多xml转txt的文章,不过有的xml文件不包括size信息,即图片本身的宽高,如先前提到的湛江水下目标检测大赛数据集的label文件.因此在前辈的 ...

  2. html中段落标志中标注文件子标题的是,html中段落标志中,标注文件子标题的是?()...

    html中段落标志中,标注文件子标题的是?() -Shall we join in the Green World Summer Camp? -_______. [ ]A. Good idea. B. ...

  3. unity从模型中抽取动画文件(animation)

    由于模型是由第三方的软件制作的,用unity不能直接编辑模型里的动画文件(read-ony),比如为动画绑定事件,所以要把模型中的动画文件抽取出来,这样文件是可写的了. usingUnityEdito ...

  4. 开启tomcat服务后,如何解决浏览器访问不到tomcat中图片或文件的问题,以及如何设置访问图片路径

    对于后端项目上传图片到tomcat服务器上的功能模块,为什么会访问不到图片,并且显式404报错的情况. 我总结了一下两点解决方法: 1. 确认自己在tomcat的配置文件中设置了访问路径对应的文件夹名 ...

  5. C++ 如何将一个文件夹中的所有文件(.txt或者.log)内容整合到一个文件(.txt或者.log)当中

    有时候我们希望读取一个文件夹中的所有文件,对各个文件中的数据按某种规则进行筛选,然后将筛选后的数据整合到一个文件中.这段时间正好替同事写了这一部分,在此记录下来自己的处理过程,如果有需要的朋友也可以参 ...

  6. 关于对象标注文件的转换(xml转json)

    背景介绍 手上有一个工程 https://github.com/aditya-vora/FCHD-Fully-Convolutional-Head-Detector 该工程是一个预测人头位置的目标检测 ...

  7. Ubuntu下如何将文件夹中图片索引写进txt文件中

    方法之一 sudo find dress/ -name *.jpg | cut -d '/' -f2-3 > train_dress.txt "find"后面跟的是当前文件下 ...

  8. 在android studio中如何读取asserts中图片、文件

    写一点自己在写代码中遇到的一点点小问题,有可能很简单,新手上路,我很菜,但是我很努力. 我们老大要我们在项目中加配置文件,还必须是放在asserts目录下.由于我们这个项目是在android stud ...

  9. labelimg标注的VOC格式标签xml文件和yolo格式标签txt文件相互转换

    目录 1 labelimg标注VOC格式和yolo格式介绍 1.1 voc格式 1.2 yolo数据格式介绍 2 voc格式数据和yolo格式数据相互转换 2.1 voc转yolo代码 2.2 yol ...

最新文章

  1. SAP CV02N 审批一个文档
  2. 处理您的请求时发生错误(Web Dynpro ABAP)
  3. 'objects' 报错问题
  4. 计算机文化基础课程实验,山东经贸职业学院计算机文化基础课程实验教学大纲.doc...
  5. 除冰机行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  6. 计算机程序CP电子文献,电子文献标识
  7. 希望能够在这条路上走下去
  8. pyqtSignal信号和槽
  9. 书籍-Docker 容器与容器云
  10. 21款数据恢复软件,包含电脑PC、手机安卓、与苹果IOS免费下载
  11. 用PHP抓取淘宝商品的用户晒单评论+图片实例
  12. LM358芯片中文资料(搬运)
  13. Discriminative deep metric learning for face verification in the wild 度量学习(CVPR2014)
  14. poi设置单元格下拉下表
  15. 几道加油站加油相关问题:最小加油次数、能否回到起点
  16. 【火车票】心蓝抢票软件
  17. JS [Web浏览器] “Uncaught RangeError: Maximum call stack size exceeded“ (32)
  18. FS4412开发板简介
  19. 重大喜讯!精灵云校V5.0家校互通正式上线,助力机构打造完美服务体系!
  20. 万字综述梳理ChatGPT----一文搞懂弄潮儿ChatGPT技术原理、行业现状、投资前景

热门文章

  1. 百度BML飞桨训练营(十一)paddle-OCR车牌识别
  2. npm查看以及设置当前下载源
  3. 完整版软件测试工程师培训视频教程下载
  4. 《领导力》——如何在组织中成就卓越(序一及第1章读书摘要)
  5. python程序下载_Python 基础起步 (二) 5分钟内下载环境并运行第一个Python 程序
  6. 我的基于Vue的饿了么项目有感
  7. 随身wifi,360wifi,猎豹wifi一边去,不花钱windows自带开启虚拟wifi,随身wifi功能
  8. 微信支付宝服务商哪家好 支付宝有什么优势
  9. UNO 游戏实现心得 (version 1)
  10. 寓意进军大陆市场、富士康要做电动汽车?