描述

和voc数据集制作有一点不同的是,因为参加的比赛中坐标给了4个,也就是说目标的形状可能是是平行四边形。所以和voc数据集有点不同啊。放出一张.txt文件的形式

最后的结果大致是这样的(和上面的图片不是对应的啊)

简介

这个代码的功能有两个

(1)将图片重新命名和图片位置更改

(2).txt文件变为.xml文件

代码

import xml.dom
import xml.dom.minidom
import os
import cv2
# xml文件规范定义#.txt和.jpg文件存放的地址
_TXT_PATH= 'label'
_IMAGE_PATH= 'image'_INDENT= ''*4
_NEW_LINE= '\n'
_FOLDER_NODE= 'VOC2007'
_ROOT_NODE= 'annotation'
_DATABASE_NAME= 'LOGODection'
_ANNOTATION= 'PASCAL VOC2007'
_AUTHOR= 'zhangyu'
_SEGMENTED= '0'
_DIFFICULT= '0'
_TRUNCATED= '0'
_POSE= 'Unspecified'#.xml文件和图片重命名文件的存放地址
_IMAGE_COPY_PATH= 'JPEGImages'
_ANNOTATION_SAVE_PATH= 'Annotations'# 封装创建节点的过�?
def createElementNode(doc,tag, attr):  # 创建一个元素节�?element_node = doc.createElement(tag)# 创建一个文本节�?text_node = doc.createTextNode(attr)# 将文本节点作为元素节点的子节�?element_node.appendChild(text_node)return element_node# 封装添加一个子节点的过�?
def createChildNode(doc,tag, attr,parent_node):child_node = createElementNode(doc, tag, attr)parent_node.appendChild(child_node)# object节点比较特殊def createObjectNode(doc,attrs):object_node = doc.createElement('object')createChildNode(doc, 'name', attrs['classification'],object_node)createChildNode(doc, 'pose',_POSE, object_node)createChildNode(doc, 'truncated',_TRUNCATED, object_node)createChildNode(doc, 'difficult',_DIFFICULT, object_node)bndbox_node = doc.createElement('bndbox')createChildNode(doc, 'x1', attrs['x1'],bndbox_node)createChildNode(doc, 'y1', attrs['y1'],bndbox_node)createChildNode(doc, 'x2', attrs['x2'],bndbox_node)createChildNode(doc, 'y2', attrs['y2'],bndbox_node)createChildNode(doc, 'x3', attrs['x3'],bndbox_node)createChildNode(doc, 'y3', attrs['y3'],bndbox_node)createChildNode(doc, 'x4', attrs['x4'],bndbox_node)createChildNode(doc, 'y4', attrs['y4'],bndbox_node)object_node.appendChild(bndbox_node)return object_node# 将documentElement写入XML文件�?
def writeXMLFile(doc,filename):tmpfile =open('tmp.xml','w')doc.writexml(tmpfile, addindent=''*4,newl = '\n',encoding = 'utf-8')tmpfile.close()# 删除第一行默认添加的标记fin =open('tmp.xml')fout =open(filename, 'w')lines = fin.readlines()for line in lines[1:]:if line.split():fout.writelines(line)# new_lines = ''.join(lines[1:])# fout.write(new_lines)fin.close()fout.close()def getFileList(path):fileList = []files = os.listdir(path)for f in files:if (os.path.isfile(path + '/' + f)):fileList.append(f)# print len(fileList)return fileListif __name__ == "__main__":fileList = getFileList(_TXT_PATH)if fileList == 0:os._exit(-1)current_dirpath = os.path.dirname(os.path.abspath('__file__'))if not os.path.exists(_ANNOTATION_SAVE_PATH):os.mkdir(_ANNOTATION_SAVE_PATH)if not os.path.exists(_IMAGE_COPY_PATH):os.mkdir(_IMAGE_COPY_PATH)for xText in range(len(fileList)):saveName= "%05d" %(xText+1)pos = fileList[xText].rfind(".")textName = fileList[xText][:pos]ouput_file = open(_TXT_PATH + '/' + fileList[xText])# ouput_file =open(_TXT_PATH)lines = ouput_file.readlines()xml_file_name = os.path.join(_ANNOTATION_SAVE_PATH, (saveName + '.xml'))img=cv2.imread(os.path.join(_IMAGE_PATH,(textName+'.jpg')))#因为数据集中有的图片不显示,因为数据集中有的图片不显示,没有image.shapetry:height,width,channel=img.shapeexcept AttributeError:continueprint(os.path.join(_IMAGE_COPY_PATH,(textName+'.jpg')))cv2.imwrite(os.path.join(_IMAGE_COPY_PATH,(saveName+'.jpg')),img)my_dom = xml.dom.getDOMImplementation()doc = my_dom.createDocument(None,_ROOT_NODE,None)# 获得根节�?root_node = doc.documentElement# folder节点createChildNode(doc, 'folder',_FOLDER_NODE, root_node)# filename节点createChildNode(doc, 'filename', saveName+'.jpg',root_node)# source节点source_node = doc.createElement('source')# source的子节点createChildNode(doc, 'database',_DATABASE_NAME, source_node)createChildNode(doc, 'annotation',_ANNOTATION, source_node)createChildNode(doc, 'image','flickr', source_node)createChildNode(doc, 'flickrid','NULL', source_node)root_node.appendChild(source_node)# owner节点owner_node = doc.createElement('owner')# owner的子节点createChildNode(doc, 'flickrid','NULL', owner_node)createChildNode(doc, 'name',_AUTHOR, owner_node)root_node.appendChild(owner_node)# size节点size_node = doc.createElement('size')createChildNode(doc, 'width',str(width), size_node)createChildNode(doc, 'height',str(height), size_node)createChildNode(doc, 'depth',str(channel), size_node)root_node.appendChild(size_node)# segmented节点createChildNode(doc, 'segmented',_SEGMENTED, root_node)for line in lines:s = line.rstrip('\n')array = s.split(',')print(array)attrs = dict()attrs['x1']= array[0]attrs['y1']= array[1]attrs['x2']= array[2]attrs['y2']= array[3]attrs['x3']= array[4]attrs['y3']= array[5]attrs['x4']= array[6]attrs['y4']= array[7]attrs['classification'] = array[8]# 构建XML文件名称print(xml_file_name)# 创建XML文件# createXMLFile(attrs, width, height, xml_file_name)# object节点object_node = createObjectNode(doc, attrs)root_node.appendChild(object_node)# 写入文件writeXMLFile(doc, xml_file_name)

提示

(1)因为.txt文件分开的形式是逗号(,),所以代码是这样的

array = s.split(',')

(2)因为部分图片不显示,会出现问题,然后使用try accept解决了

 #因为数据集中有的图片不显示,因为数据集中有的图片不显示,没有image.shapetry:height,width,channel=img.shapeexcept AttributeError:continue

(3)做了一些小测试,理解这些代码

#测试这段代码    saveName= "%05d" %(xText+1)
xText = 0
savename =  "%05d" %(xText+1)
print(savename)
#测试这段代码  pos = fileList[xText].rfind(".")
str = 'sdasdjaklda.jpg'
#pos = str.rfind('.')
pos = str.find('.')
textName = str[:pos]
print(textName)

参考的博客,但是代码写的是真的好啊。只改了一点点

https://blog.csdn.net/yjl9122/article/details/56842098

比赛中学习(2)-voc数据集制作中将.txt文件变为.xml文件相关推荐

  1. TWINCAT3中使用FIFO收集三轴的位置信息,XML文件的生成,解决常见报错

    TWINCAT3中使用FIFO收集三轴的位置信息,XML文件的生成,解决常见报错 1.首先到官网下载程序 很多时候我们用twincat不具备硬件条件,需要用到虚轴进行测试,但是对于初学者来说,用twi ...

  2. 比赛中学习(1)-使用python将大量图片重命名

    最近参加了一个比赛,中间的过程需要制作voc数据集,然后进行训练.由于比赛给的数据命名非常的长,所以就想着将图片的命名变得简单一点,最初的数据是这种 import osdef rename(path, ...

  3. json标签批量转为xml标签(VOC数据集制作)

    github链接,里面有我最近写的一些标签的转换脚本 这是一份将json格式的数据集标签转为xml类型标签的脚本,供大家参考 先说下我的应用场景:天池街景识别提供的json文件,用于制作VOC格式数据 ...

  4. VOC数据集制作 滑窗切分图片 单通道标签调色板

    做PASCAL VOC语义分割数据集的时候, 1.标注工具使用labelme,我是在anaconda下新建了一个名字为labelme的虚拟环境,将labelme安装在了这个环境下面,具体的安装一堆教程 ...

  5. ubuntu16.04下使用YOLOV3训练自己做的VOC数据集(VOC数据集制作+模型训练步骤+训练参数解析和问题解决+训练日志可视化(loss、IOU)+模型测试(单张、摄像头、批量测试))

    前序 1.环境配置 请自行参考其他博客 本机环境 ubuntu16.04 python3 英伟达显卡驱动:nvidia-396 OpenCV3.4.5 CUDNN7.0.5 CUDA9.0 2.ubu ...

  6. 把VOC数据集转化成txt文件python

    主要是网上一些已有并已用了觉得还可以的,同时记录方便以后查询使用. 第一个代码是生成VOC数据集的无后缀文件名于txt文件中,如下所示: E84.27832967649_N46.23271680371 ...

  7. BDD100K数据集的Jason文件转xml文件

    针对交通灯数据集,因为其包含其它标签,而我这里只需要标签为traffic light的 一共是70000个jason文件 对应的路径文件应该这样,每个人存放的位置不一致,所以自行设置就行 文件结构如图 ...

  8. python实现tsinghua-tencent 100000数据集的json文件转为xml文件

    算法解决问题: 1,从json文件中抽取数据集中的小目标pne.p11.i5.w57四种交通标志数据集 2.小目标判断标注像素范围在[32,32] 3.转为对应的xml文件 4.标出选出的类别的个数 ...

  9. 将txt文件转为xml文件以适配图像标注工具labelimg或Pascal VOC XML 格式

    labelimg作为图像领域目标检测.图像语义分割等领域常见的标注工具,输出的数据格式是Pascal VOC,实际工作中,我们经常需要把其他标注格式为txt的文件转为VOC的xml文件格式,下面的代码 ...

最新文章

  1. Android设计模式(九)--外观模式
  2. 点是否在面内算法(Point-In-Polygon Algorithm)
  3. 计算机猜数游戏matlab,MATLAB课程设计报告猜数游戏设计
  4. 雅虎网站页面性能优化的34条黄金守则 收藏
  5. java service 事物_Service 事务(JdbcUtils 升级)
  6. mysql技术简介_MySQL数据类型介绍
  7. ARMLINUX学习笔记(4)---ARM 体系结构
  8. time datetime的时间--python
  9. 三步教你免费下载省,市,区县行政区Shp数据
  10. 怎么更改计算机的注册表,Windows如何一键修改注册表
  11. 实验七 TCP/IP协议分析
  12. 智能实验室管理系统的现状怎么样
  13. css中的counter计数器
  14. 伪指令dd 和 操作符dup
  15. keras之父《python深度学习》笔记 第六章
  16. wireshark之文件还原
  17. Windows 10 控制面板 (Control Panel)
  18. ENVI:如何对Landsat8影像进行辐射校正?
  19. 原神QQ机器人云崽bot安卓手机整合包解压即用安装教程
  20. 已解决:前、后端打包部署至服务器后,背景图片不显示并且一些图标都变成了方块

热门文章

  1. NET2.0配置文件加密(WEBWindows)
  2. 将Windows日志转换为Syslog
  3. 一个特殊的事件绑定程序(通用于各种浏览器)
  4. extend the gridview control
  5. 使用组合改进软件测试用例的生成2
  6. windows2000/xp运行命令全集
  7. 【nosql】NoSql是什么?
  8. 软件测试--网络协议(三)
  9. oracle数据库6月之后的数据,Oracle数据库SCN存在可能在2019年6月导致宕机问题
  10. 05-04 docker 搭建 Selenium Hub