【DL】把Dat数据和TXT标签转为VOC2007数据集格式

本文介绍了如何将Dat数据和TXT标签转换为VOC2007数据集格式,包括Step.1创建VOC2007目录结构,Step.2详细讲解如何从imgs_txt生成XML文件,适用于多目标检测任务。
摘要由CSDN通过智能技术生成

Step.1 Dat2VOC

需要首先建立好VOC2007文件夹目录结构

import os
import xml.etree.ElementTree as ET
from PIL import Image
import numpy as np
import cv2

'''
VOC2007数据目录结构
root/
| - VOCdevkit/VOC2007
| 	 |- Annotations/     *.xml  标注
| 	 |- JPEGImages/      *.jpg  图片
| 	 |- ImageSets/Main/  *.txt  num
| 	 |- voc2name.py   		    把数据分为 train/val/test

'''




# ------------- @xhh define -----------------------------
_config = {
   
    'txtPath'      : 'data/train',
    'vocXMLPath'   : 'VOCdevkit/VOC2007/Annotations',
    'vocJPGPath'   : 'VOCdevkit/VOC2007/JPEGImages',
    'labels'       : ['OKKK'],
    'datIsClip'    : False,
    
    'datSize'      : [64, 1024],
    'toSize'       : [416, 416],
    'depth'        : 3
}


# dst = src * _rate
x_rate = _config['toSize'][1] / _config['datSize'][1]
y_rate = _config['toSize'][0] / _config['datSize'][0]

# ------------- @xhh define -----------------------------


def write_xml(imgname, filepath, labeldicts):                   #参数imagename是图片名(无后缀)
    root = ET.Element('Annotation')                             #创建Annotation根节点
    ET.SubElement(root, 'filename').text = str(imgname)         #创建filename子节点(无后缀)
    
    sizes = ET.SubElement(root,'size')                          #创建size子节点            
    ET.SubElement(sizes, 'width').text  = str(_config['toSize'][1])
    ET.SubElement(sizes, 'height').text = str(_config['toSize'][0])
    ET.SubElement(sizes, 'depth').text  = str(_config['depth']    )
    
    for labeldict in labeldicts:
        objects = ET.SubElement(root, 'object')                 #创建object子节点
        ET.SubElement(objects, 'name').text = labeldict['name']
                                                                        #的类别名
        ET.SubElement(objects, 'pose').text = 'Unspecified'
        ET.SubElement(objects, 'truncated').text = '0'
        ET.SubElement(objects, 'difficult').text = '0'
        bndbox = ET.SubElement(objects,'bndbox')
        ET.SubElement(bndbox, 'xmin').text = str(int(labeldict['xmin']))
        ET.SubElement(bndbox, 'ymin').text = str(int(labeldict['ymin']))
        ET.SubElement(bndbox, 'xmax').text = str(int(labeldict['xmax']))
        ET.SubElement(bndbox, 'ymax').text = str(int(labeldict['ymax']))
    tree = ET.ElementTree(root)
    tree.write(filepath, encoding='utf-8', xml_declaration=False)


def dat2VOC():
    # label: 'OKKK'
    for label in _config['labels']:
        txtList = os.listdir(_config['txtPath']) # ['1.dat', '1.txt', ...]
        txtList.sort(reverse=False)
        
        for item in txtList:
            # txt
            if item[-3:] == 'txt':
                img_id = int(item.split
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值