【数据标注】使用LabelImg标注YOLO格式的数据(案例演示)

2024-04-27 16:28

本文主要是介绍【数据标注】使用LabelImg标注YOLO格式的数据(案例演示),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • LabelImg介绍
    • LabelImg安装
    • LabelImg界面
    • 标注常用的快捷键
    • 标注前的一些设置
    • 案例演示
    • 检查YOLO标签中的标注信息是否正确
    • 参考文章


LabelImg介绍

LabelImg是目标检测数据标注工具,可以标注两种格式:

  • VOC标签格式,标注的标签存储在xml文件
  • YOLO标签格式,标注的标签存储在txt文件中

LabelImg官网:

labelImg的GitHub链接:https://github.com/HumanSignal/labelImg


LabelImg安装

在Anaconda创建的虚拟环境中使用pip安装LabelImg
1、打开 Anaconda Prompt
2、创建一个虚拟环境

conda create -n use_labelimg python=3.6

3、激活虚拟环境

conda activate use_labelimg

4、使用pip安装LabelImg(有挂代理/梯子记得关掉)

pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

5、执行以下命令打开LabelImg

labelimg

在这里插入图片描述


LabelImg界面

在这里插入图片描述


标注常用的快捷键

  • W:调出标注的十字架,开始标注
  • A:切换到上一张图片
  • D:切换到下一张图片
  • Ctrl+S:保存标注好的标签
  • del:删除标注的矩形框
  • Ctrl+鼠标滚轮:按住Ctrl,然后滚动鼠标滚轮,可以调整标注图片的显示大小
  • Ctrl+u:选择要标注图片的文件夹
  • Ctrl+r:选择标注好的label标签存放的文件夹
  • ↑→↓←:移动标注的矩形框的位置

标注前的一些设置

点击View显示如下图,然后把如下的几个选项勾上:

  • Auto Save mode:当你切换到下一张图片时,就会自动把上一张标注的图片标签自动保存下来,这样就不用每标注一样图片都按Ctrl+S保存一下了
  • Display Labels:标注好图片之后,会把框和标签都显示出来
  • Advanced Mode:这样标注的十字架就会一直悬浮在窗口,不用每次标完一个目标,再按一次W快捷键,调出标注的十字架。

在这里插入图片描述


案例演示

1、假设在我的 green_plate文件夹 中已经存放了所要进行标注的车牌图片
在这里插入图片描述
2、在 LabelImg界面 通过 Open Dir 导入 green_plate文件夹
在这里插入图片描述
3、在 LabelImg界面 通过 Change Save Dir 选择 存放标注好图片的文件夹路径
在这里插入图片描述

4、在 LabelImg界面 点击 View 进行标注前的一些设置
5、设置标注的文件格式为YOLO
在这里插入图片描述
6、按W键调出标注的十字架,开始标注

可通过Ctrl+鼠标滚轮调整标注图片的显示大小,方便对目标进行标注
在这里插入图片描述

7、对一张图片标注完成后,按D键切换到下一张图片继续标注
8、如果需要对一个标注好的矩形框进行删除,可以按以下图片中的操作进行
在这里插入图片描述
9、重复以上步骤直至所有的图片标注完成
10、在存放标注好图片的文件夹中查看标注好的文件
在这里插入图片描述


检查YOLO标签中的标注信息是否正确

通过读取图像文件和相应的标签文件来绘制边界框,并在窗口中显示带有边界框的图像。
如果边界框的位置和大小与预期相符,那么可以认为YOLO格式的标签是正确的。

"""
文件名: CheckYOLOLabels.py
功能描述: 检查YOLO标签中的标注信息是否正确
"""import os
import cv2
import matplotlib.pyplot as plt
import numpy as npdef listPathAllfiles(dirname):"""遍历指定目录下的所有文件并返回一个包含这些文件路径的列表。"""result = []for maindir, subdir, file_name_list in os.walk(dirname):for filename in file_name_list:apath = os.path.join(maindir, filename)result.append(apath)return resultif __name__ == '__main__':# YOLO图片文件的保存路径imagespath = "DeepLearningProjects\\green_plate"# YOLO标签文件的保存路径labelspath = "DeepLearningProjects\\process_green_plate"# 获取所有标签文件的路径labelsFiles = listPathAllfiles(labelspath)# 逆序遍历标签文件,因为通常最新的文件在最后for lbf in labelsFiles[::-1]:# 读取标签文件的每一行,并将其分割成一个列表labels = open(lbf, "r").readlines()labels = list(map(lambda x: x.strip().split(" "), labels))# 构造对应的图片文件名imgfileName = os.path.join(imagespath, os.path.basename(lbf)[:-4] + ".jpg") # .jpg# 从文件中读取图片,cv2.imdecode函数可以将字节流解码为图像img = cv2.imdecode(np.fromfile(imgfileName, dtype=np.uint8), 1)# 遍历每个标签for lbs in labels:# 将标签字符串转换为浮点数,并去掉类别索引lb = list(map(float, lbs))[1:]# 根据标签计算边界框的左上角和右下角坐标x1 = int((lb[0] - lb[2] / 2) * img.shape[1])y1 = int((lb[1] - lb[3] / 2) * img.shape[0])x2 = int((lb[0] + lb[2] / 2) * img.shape[1])y2 = int((lb[1] + lb[3] / 2) * img.shape[0])# 在图像上绘制边界框cv2.rectangle(img, (x1, y1), (x2, y2), (0, 0, 255), 5)# 调整图像大小,使其最大边长为600像素ratio = 600 / min(img.shape[0:2])img = cv2.resize(img, dsize=(int(img.shape[1] * ratio), int(img.shape[0] * ratio)))# 显示带有边界框的图像cv2.imshow("Image", img)# 等待用户按键,按任意键继续cv2.waitKey()# 关闭所有OpenCV创建的窗口cv2.destroyAllWindows()

参考文章

目标检测使用LabelImg标注VOC数据格式和YOLO数据格式——LabelImg使用详细教程

这篇关于【数据标注】使用LabelImg标注YOLO格式的数据(案例演示)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/940977

相关文章

Spring Boot整合Redis注解实现增删改查功能(Redis注解使用)

《SpringBoot整合Redis注解实现增删改查功能(Redis注解使用)》文章介绍了如何使用SpringBoot整合Redis注解实现增删改查功能,包括配置、实体类、Repository、Se... 目录配置Redis连接定义实体类创建Repository接口增删改查操作示例插入数据查询数据删除数据更

使用python生成固定格式序号的方法详解

《使用python生成固定格式序号的方法详解》这篇文章主要为大家详细介绍了如何使用python生成固定格式序号,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录生成结果验证完整生成代码扩展说明1. 保存到文本文件2. 转换为jsON格式3. 处理特殊序号格式(如带圈数字)4

Java使用Swing生成一个最大公约数计算器

《Java使用Swing生成一个最大公约数计算器》这篇文章主要为大家详细介绍了Java使用Swing生成一个最大公约数计算器的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下... 目录第一步:利用欧几里得算法计算最大公约数欧几里得算法的证明情形 1:b=0情形 2:b>0完成相关代码第二步:加

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV