【数据集操作】数据标注笔记-labelImg

1. 数据增强工具、方法

大佬分享的图像增强软件,可同时增加xml、json标注文件:图像增强软件V2.0,适用于|目标检测|图像分割|图像分类|(本文第2节有xml转txt的代码)



2. labelImg使用方法

参考教程:labelImg使用教程

cmd打开,输入命令activate yolov5激活进入到yolov5环境后(如果未安装labelImg的话,输入pip install labelImg命令安装labelImg),然后再输入labelImg启动labeImg标注软件。

labelImg界面


快捷键:

  • W:创建方框
  • A:上一张
  • D:下一张

注意:

界面中Save下面依次点击会有以下3种选项

对应的标注文件格式分别是:

  • CreateML----json
  • PascalVOC----xml
  • YOLO----txt

yolov系列的标注文件是txt类型的,以下是xml转txt格式的代码:

import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join
import glob

# 共6个类别,编号依次为0~5
classes = ['crazing', 'inclusion', 'patches', 'pitted_surface', 'rolled-in_scale', 'scratches']


def convert(size, box):
    dw = 1. / size[0]  # 得到一个百分比,float类型的(因为分子是1.)
    dh = 1. / size[1]
    x = (box[0] + box[1]) / 2.0  # 中心点
    y = (box[2] + box[3]) / 2.0  # 网上那个代码在后面还会再-1
    w = box[1] - box[0]  # 相对的长宽
    h = box[3] - box[2]
    x = x * dw  # 相对之后的归一化结果
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)


def convert_annotation(image_name):  # 转换标签函数
    in_file = open('./validation/annotations/' + image_name[:-3] + 'xml')  # 读取进来的xml文件
    out_file = open('./validation/labels/' + image_name[:-3] + 'txt', 'w')  # 写入到相应的txt文件中
    tree = ET.parse(in_file)  # 解析xml文件
    root = tree.getroot()
    size = root.find('size')
    w = int(size.find('width').text)  # 图像的长宽
    h = int(size.find('height').text)

    for obj in root.iter('object'):  # 遍历
        clses = obj.find('name').text
        if clses not in classes:
            print(clses)
            continue
        clses_id = classes.index(clses)
        xmlbox = obj.find('bndbox')
        b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),
             float(xmlbox.find('ymax').text))
        bb = convert((w, h), b)
        out_file.write(str(clses_id) + ' ' + ' '.join([str(a) for a in bb]) + '\n')


if __name__ == '__main__':
    for image_path in glob.glob('validation/images/*.jpg'):
        image_path = image_path.split('\\')[-1]  # 读取文件夹中后缀为jpg的文件,然后只获取其name
        # print(iamge_path)
        convert_annotation(image_path)  # 开始转换标签
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孟孟单单

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值