自己整理的红外无人机数据集(voc格式)

原始数据来源于这个网站:A dataset for infrared image dim-small aircraft target detection and tracking under ground / air background

由于网站上数据集标注是点的格式而且是txt文本,不是框标注,所以自己重新整理一下给变成通用矩形框标注的xml格式;

由于时间原因,只整理了data1 data3 data4的,共726张图片和对应xml标注;

可视化矩形框如下所示:

 

 

 将原本数据集标注转变为3*3的标记框并转化为xml格式的代码如下:

代码来源博客:【数据集处理三】地_空背景下红外图像弱小飞机目标检测跟踪数据集标签格式转换_爱学习的大志的博客-CSDN博客

import os
import csv
channel = 1
#空标签
 
def Annotations0_write():
 
    rename = str(index)
    # print (rename)#打印文件名
    with open(os.path.join(foldername, rename + '.xml'), 'w') as f:
        f.write(f"""<annotation >
    <folder>{foldername}</folder>
    <filename>{rename}.bmp</filename>
    <path>D:/Research direction/data set/foldername/rename.bmp</path>
	<source>
		<database>Unknown</database>
	</source>
    <size>
        <width>{256}</width>
        <height>{256}</height>
        <depth>{channel}</depth>
    </size>
    <segmented>0</segmented>\n""")
        f.write("</annotation>")
 
###############################################
#一个标签
def Annotations1_write(xmid1,ymid1):
 
    rename = str(index)
    # print (rename)#打印文件名
    with open(os.path.join(foldername, rename + '.xml'), 'w') as f:
        f.write(f"""<annotation>
    <folder>{foldername}</folder>
    <filename>{rename}.bmp</filename>
     <path>D:/Research direction/data set/foldername/rename.bmp</path>
	<source>
		<database>Unknown</database>
	</source>
    <size>
        <width>{256}</width>
        <height>{256}</height>
        <depth>{channel}</depth>
    </size>
    <segmented>0</segmented>\n""")
        f.write(f"""    <object>
            <name>drone</name>
            <pose>Unspecified</pose>
            <truncated>0</truncated>
            <difficult>0</difficult>
            <bndbox>
                  <xmin>{float(xmid1)-3.5}</xmin> //这里将点变为7*7的框,如果想变成10*10的框,把这里的3.5和下面的3.5改为5即可,以此类推
                  <ymin>{float(ymid1)-3.5}</ymin>
                  <xmax>{float(xmid1)+3.5}</xmax>
                  <ymax>{float(ymid1)+3.5}</ymax>
            </bndbox>
        </object>\n""")
        f.write("</annotation>")
 
#两个标签
def Annotations2_write(xmid1,ymid1,xmid2,ymid2):
 
    rename = str(index)
    # print (rename)#打印文件名
    with open(os.path.join(foldername, rename + '.xml'), 'w') as f:
        f.write(f"""<annotation>
    <folder>{foldername}</folder>
    <filename>{rename}.bmp</filename>
     <path>D:/Research direction/data set/foldername/rename.bmp</path>
	<source>
		<database>Unknown</database>
	</source>
    <size>
        <width>{256}</width>
        <height>{256}</height>
        <depth>{channel}</depth>
    </size>
    <segmented>0</segmented>\n""")
        f.write(f"""    <object>
            <name>drone</name>
            <pose>Unspecified</pose>
            <truncated>0</truncated>
            <difficult>0</difficult>
            <bndbox>
                    <xmin>{float(xmid1) - 3.5}</xmin>
                    <ymin>{float(ymid1) - 3.5}</ymin>
                    <xmax>{float(xmid1) + 3.5}</xmax>
                    <ymax>{float(ymid1) + 3.5}</ymax>
            </bndbox>
        </object>
        <object>
             <name>drone</name>
             <pose>Unspecified</pose>
             <truncated>0</truncated>
             <difficult>0</difficult>
             <bndbox>
                  <xmin>{float(xmid2) - 3.5}</xmin>
                  <ymin>{float(ymid2) - 3.5}</ymin>
                  <xmax>{float(xmid2) + 3.5}</xmax>
                  <ymax>{float(ymid2) + 3.5}</ymax>
              </bndbox>
        </object>\n""")
        f.write("</annotation>")
 
#读取第i+2行(i=0,表示从第二行开始读)
def read(index):
    for line in lines[index:index + 1:]:
        a = line.split()
        objnum = int(a[1])
        # print(line)
 
        if objnum == 1:
            xmid1 = a[3]
            ymid1 = a[4]
            Annotations1_write(xmid1,ymid1)
        elif objnum == 0:
            Annotations0_write()
        elif objnum == 2:
            xmid1 = a[3]
            ymid1 = a[4]
            xmid2 = a[6]
            ymid2 = a[7]
            Annotations2_write(xmid1,ymid1,xmid2,ymid2)
 
        else:
            print('出错了')
 
 
 
#########
with open ('data22.txt') as data:
# filename =  'data1.txt'
# data =open (filename)
  folder=data.readline() #读取第一行
  folder1=folder.split() #看做字符串
  foldername=folder1[1]  #文件夹名称
  num=int(folder1[2])#帧数
#print (foldername)
  path = foldername
  # print(num)
# 创建文件夹
  if not os.path.exists(path):
      os.mkdir(path)
 
  index=0
  a=folder1#给一个a原始值
  #外面一个while循环
  lines = data.readlines()
  while index != num:
 
     # if index != num:
     read(index)
     index = index + 1
 

 我整理好的数据集:私信我分享给你

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
红外数据集yolo格式是一种用于目标检测数据集格式。YOLO(You Only Look Once)是一种实时目标检测算法,将图像分成多个网格,并利用卷积神经网络在每个网格中预测目标的类别和边界框。红外数据集yolo格式是为了使用YOLO算法进行红外图像目标检测而定义的数据集格式红外数据集yolo格式通常包含两部分信息:图像和标签。其中,图像是红外图像数据,可以是RGB图像,也可以是灰度图像。标签则包含了每个目标的类别和边界框信息。 对于每个标签,通常包含以下信息: 1. 目标的类别:用数字表示不同的目标类别,例如0表示人,1表示车辆,2表示动物等。 2. 边界框信息:边界框包括目标在图像中的位置和尺寸信息,通常用矩形的左上角和右下角点的坐标表示。 红外数据集yolo格式的标签可以使用文本文件存储,每个文本文件对应一个图像的标签信息。文本文件中的每一行表示一个目标的标签信息,每个目标之间使用空格分隔。 一个标签的示例可以如下所示: 0 100 200 50 50 表示一个类别为0(人)的目标在图像中的边界框信息,左上角点的坐标为(100, 200),宽度为50,高度为50。 使用红外数据集yolo格式,可以将红外图像与其目标标签配对,作为训练或测试YOLO目标检测模型的输入数据。这样,我们就可以利用YOLO算法对红外图像中的目标进行检测和识别。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值