项目issue-1

数据集格式存在的问题

在这里插入图片描述在这里插入图片描述

   如图所示,在对数据集进行处理时,发现有的xml标注文件拥有size节点而有的没有,在获取标注数据集时需要获取size信息,因此导致程序这部分图片读取问题。

解决方案

   其实这是一个比较简单的问题,我们可以选择跳过这部分信息(size不是最关键的信息),还可以选择为所有文件补填上size信息。

   简单地来说这是一个小问题,只需要读取所有图片的高、宽和深度即可,python的opencv库可以很简单地做到,然后将读取到的内容写入xml文件,这方面我没有做过,不过网上有许多资料可以查询,写代码的问题不大。

   具体代码可见getSize.py文件,比较简单,但是是项目开始写的第一个代码文件,记录一下。

import cv2
import xml.etree.ElementTree as ET

sets = ['train', 'test', 'val']

for image_set in sets:
    #分别从数据集测试集读取文件名
    image_ids = open('data/ImageSets/%s.txt' % (image_set)).read().strip().split()
    for image_id in image_ids:
        image = cv2.imread('data/JPEGImages/%s.jpg' % (image_id))
        size = image.shape
        #h = size[0]     # 高度
        #w = size[1]     # 宽度
        #depth = size[2]  # 深度
        #print(image_id, size)
        tree = ET.parse('data/Annotations/%s.xml' % (image_id))  #读取xml文件
        root = tree.getroot() 
        if root.find('size') is None:
            #增加size节点以及宽高深度三个子节点
            #print(image_id)
            size_node = ET.Element('size')
            width_node = ET.SubElement(size_node, 'width')
            height_node = ET.SubElement(size_node, 'height')
            depth_node = ET.SubElement(size_node, 'depth')
            width_node.text = str(size[1])
            height_node.text = str(size[0])
            depth_node.text = str(size[2])
            root.append(size_node)
            tree.write('data/Annotations/%s.xml' % (image_id), encoding="utf-8", xml_declaration=True)
        else:
            #部分文件size错误,重新覆盖以改正
            print(image_id)
            size_node = root.find('size')
            size_node.find('width').text = str(size[1])
            size_node.find('height').text = str(size[0])
            size_node.find('depth').text = str(size[2])
            tree.write('data/Annotations/%s.xml' % (image_id), encoding="utf-8", xml_declaration=True)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值