数据集 yolov3 格式转 voc 的 xml 格式

【下面的 voc 格式的内容可以修改】

转换代码原文链接:

https://blog.csdn.net/xiaobumi123/article/details/103822083#commentBox

图片来源:https://blog.csdn.net/qq_29762941/article/details/80797790#commentBox

转换代码:

import cv2
import os
xml_head = '''<annotation>
    <folder>JPEGImages</folder>
    <filename>{}</filename>
    <path>/home/joyce/workplace/change_xml_test/images/{}</path>
    <source>
        <database>Unknown</database>
    </source>   
    <size>
        <width>{}</width>
        <height>{}</height>
        <depth>{}</depth>
    </size>
    <segmented>0</segmented>
    '''
xml_obj = '''
    <object>        
        <name>{}</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>{}</xmin>
            <ymin>{}</ymin>
            <xmax>{}</xmax>
            <ymax>{}</ymax>
        </bndbox>
    </object>
    '''
xml_end = '''
</annotation>'''
 
labels = ['mineral']#label for datasets
 
cnt = 0
txt_path=os.path.join('/home/joyce/workplace/change_xml_test/imagestxt/')#yolo存放txt的文件目录
image_path=os.path.join('/home/joyce/workplace/change_xml_test/images/')#存放图片的文件目录
path=os.path.join('/home/joyce/workplace/change_xml_test/Annotations/')#存放生成xml的文件目录
 
for(root,dirname,files) in os.walk(image_path):#遍历图片文件夹
    for ft in files:
        ftxt=ft.replace('jpg','txt')#ft是图片名字+扩展名,将jpg和txt替换
        fxml=ft.replace('jpg','xml')
        xml_path=path+fxml
        obj = ''
 
        img = cv2.imread(root+ft)
        img_h,img_w = img.shape[0],img.shape[1]
        head = xml_head.format(str(ft),str(ft),str(img_w),str(img_h),3)
        
        with open(txt_path+ftxt,'r') as f:#读取对应txt文件内容
            for line in f.readlines():
                yolo_datas = line.strip().split(' ')
                label = int(float(yolo_datas[0].strip()))
                center_x = round(float(str(yolo_datas[1]).strip()) * img_w)
                center_y = round(float(str(yolo_datas[2]).strip()) * img_h)
                bbox_width = round(float(str(yolo_datas[3]).strip()) * img_w)
                bbox_height = round(float(str(yolo_datas[4]).strip()) * img_h)
 
                xmin = str(int(center_x - bbox_width / 2 ))
                ymin = str(int(center_y - bbox_height / 2))
                xmax = str(int(center_x + bbox_width / 2))
                ymax = str(int(center_y + bbox_height / 2))
 
                obj += xml_obj.format(labels[label],xmin,ymin,xmax,ymax)
        with open(xml_path,'w') as f_xml:
            f_xml.write(head+obj+xml_end)
        # cnt += 1
        # print(cnt)

批量修改文件中的某个内容:

【当时是原本 txt 的类别编号错了,需要统一改成 0 才能进行转换 xml 的操作,下面就是实现代码】

原文链接:https://www.cnblogs.com/Leechg/p/5446258.html

import os
path="/home/joyce/workplace/change_xml_test/imagestxt/"
for root,dirs,files in os.walk(path):
    for name in files:
        #print name
        if name.endswith(".txt"):
            #print root,dirs,name
            filename=root+"/"+name
            f=open(filename,"r")
            filecontent=""
            line=f.readline()
            while line:
                yolo_datas = line.strip().split(' ')
                l=line.replace(str((yolo_datas[0]).strip()),"0")
                filecontent=filecontent+l
                line=f.readline()
            f.close()
            f2=open(filename,"w")
            f2.writelines(filecontent)
            f2.close()

发表回复 0

Your email address will not be published. Required fields are marked *