网站开发语言包括哪些,潍坊公司注册,wdcp网站迁移,丰泰建设集团有限公司网站在使用yolo进行深度学习训练时#xff0c;我们所使用的标签文件都是txt格式的#xff0c;但是有的人使用的标注软件生成的可能是xml文件#xff0c;那么就需要使用python工具写一个格式转换脚本。 首先导入库#xff0c;并定义标注的图片地址、生成的标签文件xml地址、存储… 在使用yolo进行深度学习训练时我们所使用的标签文件都是txt格式的但是有的人使用的标注软件生成的可能是xml文件那么就需要使用python工具写一个格式转换脚本。 首先导入库并定义标注的图片地址、生成的标签文件xml地址、存储结果txt的地址。
import cv2
import os
import math
import xml.dom.minidompath_img r/home/pc/下载/qq_file/test/img/
path_xml r/home/pc/下载/qq_file/test/xml/
path_txt r/home/pc/下载/qq_file/test/txt/ files os.listdir(path_xml)这句话的files存储了path_xml路径下的所有xml文件
if __name__ __main__:files os.listdir(path_xml)print(文件数量 str(len(files)))for file in files:print(file)
如上代码的file打印结果就应该为目标文件夹下所有xml文件的文件名如246.xml。 if __name__ __main__:files os.listdir(path_xml)print(文件数量 str(len(files)))for file in files:print(file)xmlname file.split(.)txtname xmlname[0] .txtimgname xmlname[0] .jpgtxtpath path_txt txtnameimgpath path_img imgnamexmlpath path_xml xmlname[0] . xmlname[1]
接下来用“ . ”来分割xml文件的文件名和后缀其中xmlname[0] 文件名xmlname[1] xml。由此可以定义每一个xml、txt、jpg的路径。 if __name__ __main__:files os.listdir(path_xml)print(文件数量 str(len(files)))for file in files:print(file)xmlname file.split(.)txtname xmlname[0] .txtimgname xmlname[0] .jpgtxtpath path_txt txtnameimgpath path_img imgnamexmlpath path_xml xmlname[0] . xmlname[1]# print(xmlpath)file_txt open(txtpath, w)frame cv2.imread(imgpath)pixel_size frame.shape[0]print(pixel_size)
接下来定义file_txt为文件夹下每一个txt文件并可进行write操作。 # 将解析xml文件的结果存在dom变量下dom xml.dom.minidom.parse(xmlpath)# 获取xml文件的根元素root dom.documentElementobjects root.getElementsByTagName(object)for obj in objects:name obj.getElementsByTagName(name)[0] # [0]可能代表包含标签数值的一个集合这里可能包含标签数值,地址等if name.childNodes[0].data armor_red: # 通过调用name.childNodes[0].data方法获取标签数值file_txt.write(0 )elif name.childNodes[0].data full_red:file_txt.write(1 )elif name.childNodes[0].data R_red:file_txt.write(2 )else:print(file :label error)robodbox obj.getElementsByTagName(robodbox)cx obj.getElementsByTagName(cx)[0]cy obj.getElementsByTagName(cy)[0]w obj.getElementsByTagName(w)[0]h obj.getElementsByTagName(h)[0]angle obj.getElementsByTagName(angle)[0]# print(fcx {cx.childNodes[0]}, cy {cy.childNodes[0].data}, w {w.childNodes[0].data}, h {h.childNodes[0].data}, # fangle {angle.childNodes[0].data})temp_cx str(float(cx.childNodes[0].data) / pixel_size)temp_cy str(float(cy.childNodes[0].data) / pixel_size)temp_h str(float(h.childNodes[0].data) / pixel_size)temp_w str(float(w.childNodes[0].data) / pixel_size)temp_angle str(float(angle.childNodes[0].data) / math.pi*180)
接下来对xml文件进行解析调用dom xml.dom.minidom.parse(xmlpath)将解析xml文件的结果存在dom变量下root dom.documentElement获取xml文件的根元素rootobjects root.getElementsByTagName(object)获得object使用for循环遍历每一个object使用name obj.getElementsByTagName(name)[0]来获得每一个object的name这里[0]可能代表包含标签数值的一个集合这里可能包含标签数值,地址等然后判断
if name.childNodes[0].data armor_red
file_txt.write(0 )
通过调用name.childNodes[0].data方法获取标签数值写入txt文件作为第一个数值即“类别“。 robodbox obj.getElementsByTagName(robodbox)cx obj.getElementsByTagName(cx)[0]cy obj.getElementsByTagName(cy)[0]w obj.getElementsByTagName(w)[0]h obj.getElementsByTagName(h)[0]angle obj.getElementsByTagName(angle)[0]# print(fcx {cx.childNodes[0]}, cy {cy.childNodes[0].data}, w {w.childNodes[0].data}, h {h.childNodes[0].data}, # fangle {angle.childNodes[0].data})temp_cx str(float(cx.childNodes[0].data) / pixel_size)temp_cy str(float(cy.childNodes[0].data) / pixel_size)temp_h str(float(h.childNodes[0].data) / pixel_size)temp_w str(float(w.childNodes[0].data) / pixel_size)temp_angle str(float(angle.childNodes[0].data) / math.pi*180)file_txt.write(temp_cx )file_txt.write(temp_cy )file_txt.write(temp_w )file_txt.write(temp_h )file_txt.write(temp_angle )file_txt.write(\n)
类别信息获取后接下来对矩形框数值进行解析使用同样的方法获取数据并进行归一化写入txt。 完整代码如下
import cv2
import os
import math
import xml.dom.minidompath_img r/home/pc/下载/qq_file/test/img/
path_xml r/home/pc/下载/qq_file/test/xml/
path_txt r/home/pc/下载/qq_file/test/txt/if __name__ __main__:files os.listdir(path_xml)print(文件数量 str(len(files)))for file in files:print(file)xmlname file.split(.)txtname xmlname[0] .txtimgname xmlname[0] .jpgtxtpath path_txt txtnameimgpath path_img imgnamexmlpath path_xml xmlname[0] . xmlname[1]# print(xmlpath)file_txt open(txtpath, w)frame cv2.imread(imgpath)pixel_size frame.shape[0]# print(pixel_size)# 将解析xml文件的结果存在dom变量下dom xml.dom.minidom.parse(xmlpath)# 获取xml文件的根元素root dom.documentElementobjects root.getElementsByTagName(object)for obj in objects:name obj.getElementsByTagName(name)[0] # [0]可能代表包含标签数值的一个集合这里可能包含标签数值,地址等if name.childNodes[0].data armor_red: # 通过调用name.childNodes[0].data方法获取标签数值file_txt.write(0 )elif name.childNodes[0].data full_red:file_txt.write(1 )elif name.childNodes[0].data R_red:file_txt.write(2 )else:print(file :label error)robodbox obj.getElementsByTagName(robodbox)cx obj.getElementsByTagName(cx)[0]cy obj.getElementsByTagName(cy)[0]w obj.getElementsByTagName(w)[0]h obj.getElementsByTagName(h)[0]angle obj.getElementsByTagName(angle)[0]# print(fcx {cx.childNodes[0]}, cy {cy.childNodes[0].data}, w {w.childNodes[0].data}, h {h.childNodes[0].data}, # fangle {angle.childNodes[0].data})temp_cx str(float(cx.childNodes[0].data) / pixel_size)temp_cy str(float(cy.childNodes[0].data) / pixel_size)temp_h str(float(h.childNodes[0].data) / pixel_size)temp_w str(float(w.childNodes[0].data) / pixel_size)temp_angle str(float(angle.childNodes[0].data) / math.pi*180)file_txt.write(temp_cx )file_txt.write(temp_cy )file_txt.write(temp_w )file_txt.write(temp_h )file_txt.write(temp_angle )file_txt.write(\n)print(ok)file_txt.close()