【数据标注】使用LabelImg标注YOLO格式的数据(案例演示) |
您所在的位置:网站首页 › 3d数据标注有哪些技巧 › 【数据标注】使用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.63、激活虚拟环境 conda activate use_labelimg4、使用pip安装LabelImg(有挂代理/梯子记得关掉) pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple5、执行以下命令打开LabelImg labelimg点击View显示如下图,然后把如下的几个选项勾上: Auto Save mode:当你切换到下一张图片时,就会自动把上一张标注的图片标签自动保存下来,这样就不用每标注一样图片都按Ctrl+S保存一下了Display Labels:标注好图片之后,会把框和标签都显示出来Advanced Mode:这样标注的十字架就会一直悬浮在窗口,不用每次标完一个目标,再按一次W快捷键,调出标注的十字架。1、假设在我的 green_plate文件夹 中已经存放了所要进行标注的车牌图片 4、在 LabelImg界面 点击 View 进行标注前的一些设置 5、设置标注的文件格式为YOLO 可通过Ctrl+鼠标滚轮调整标注图片的显示大小,方便对目标进行标注 7、对一张图片标注完成后,按D键切换到下一张图片继续标注 8、如果需要对一个标注好的矩形框进行删除,可以按以下图片中的操作进行 通过读取图像文件和相应的标签文件来绘制边界框,并在窗口中显示带有边界框的图像。 如果边界框的位置和大小与预期相符,那么可以认为YOLO格式的标签是正确的。 """ 文件名: CheckYOLOLabels.py 功能描述: 检查YOLO标签中的标注信息是否正确 """ import os import cv2 import matplotlib.pyplot as plt import numpy as np def 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 result if __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使用详细教程 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |