YOLO:使用labelme进行图片数据标签制作,并转换为YOLO格式

作者:CSDN @ 养乐多

本文将介绍如何使用 labelme 进行图片数据标签制作的方法,并将标签的格式从 JSON 格式转换为 YOLO 格式。


文章目录


一、安装labelme

试过了labelme和labelImg,labelImg经常奔溃不太好用,最终选择labelme。

python 复制代码
pip install labelme

二、使用流程

运行labelme,

比较好的数据管理方式是,将图片和标注信息分开保存,方便之后数据格式转换和数据集划分的脚本使用。所以需要将标注信息输出路径修改一下。我把图片都保存在images文件夹下了,输出标注信息的路径是和images同级的labels文件夹。最好取消同时保存图像数据按钮,并点击自动保存按钮。

python 复制代码
总结:
1.点击自动保存;
2.更改标注信息输出路径到labels文件夹;
3.取消同时保存图像数据。

打开目录读取数据集,

编辑菜单中选择创建矩形,这是为了YOLO这种目标检测算法做标签用的。语义分割、目标追踪等就选多边形。

拖动矩形框并输入标注名称,点击ok即可自动保存。标注完之后选择下一张。

最后,labels文件夹下会保存所有的标注数据,不过是json格式。

如果想要用到YOLO算法中还需要将json格式修改为YOLO格式。

保存结果如下图所示,

三、json格式转为YOLO格式

category_dict,input_directory,output_directory 。

使用时,需要修改这三个变量。

category_dict:类别字典,对应类别名和类别ID;

input_directory :json保存的目录;

output_directory :YOLO格式标注的目录。

python 复制代码
import json
import os

category_dict = {'飞机': '1'}  # 类别字典

def json_to_yolo(input_file_path, output_directory):
    data = json.load(open(input_file_path, encoding="utf-8"))  # 读取带有中文的文件
    image_width = data["imageWidth"]  # 获取json文件里图片的宽度
    image_height = data["imageHeight"]  # 获取json文件里图片的高度
    yolo_format_content = ''

    for shape in data["shapes"]:
        # 归一化坐标点,并计算中心点(cx, cy)、宽度和高度
        [[x1, y1], [x2, y2]] = shape['points']
        x1, x2 = x1 / image_width, x2 / image_width
        y1, y2 = y1 / image_height, y2 / image_height
        cx = (x1 + x2) / 2
        cy = (y1 + y2) / 2
        width = abs(x2 - x1)
        height = abs(y2 - y1)

        # 将数据组装成YOLO格式
        line = "%s %.4f %.4f %.4f %.4f\n" % (category_dict[shape['label']], cx, cy, width, height)  # 生成txt文件里每行的内容
        yolo_format_content += line

    # 生成txt文件的相应文件路径
    output_file_path = os.path.join(output_directory, os.path.basename(input_file_path).replace('json', 'txt'))
    with open(output_file_path, 'w', encoding='utf-8') as file_handle:
        file_handle.write(yolo_format_content)


input_directory = "E:/DataSet/test/labels/"
output_directory = "E:/DataSet/test/labels-yolo/"

file_list = os.listdir(input_directory)
json_file_list = [file for file in file_list if file.endswith(".json")]  # 获取所有json文件的路径

for json_file in json_file_list:
    json_to_yolo(os.path.join(input_directory, json_file), output_directory)

四、按比例划分数据集(训练、验证、测试)

如果需要将图片和标签数据集按比例划分为训练、验证、测试数据集,请参考以下博客。

参考博客《YOLO:VOC格式数据集转换为YOLO数据集格式》中的第2节。

相关推荐
python算法(魔法师版)17 分钟前
深度学习深度解析:从基础到前沿
人工智能·深度学习
小王子102438 分钟前
设计模式Python版 组合模式
python·设计模式·组合模式
kakaZhui41 分钟前
【llm对话系统】大模型源码分析之 LLaMA 位置编码 RoPE
人工智能·深度学习·chatgpt·aigc·llama
struggle20252 小时前
一个开源 GenBI AI 本地代理(确保本地数据安全),使数据驱动型团队能够与其数据进行互动,生成文本到 SQL、图表、电子表格、报告和 BI
人工智能·深度学习·目标检测·语言模型·自然语言处理·数据挖掘·集成学习
佛州小李哥2 小时前
通过亚马逊云科技Bedrock打造自定义AI智能体Agent(上)
人工智能·科技·ai·语言模型·云计算·aws·亚马逊云科技
Mason Lin2 小时前
2025年1月22日(网络编程 udp)
网络·python·udp
清弦墨客2 小时前
【蓝桥杯】43697.机器人塔
python·蓝桥杯·程序算法
云空3 小时前
《DeepSeek 网页/API 性能异常(DeepSeek Web/API Degraded Performance):网络安全日志》
运维·人工智能·web安全·网络安全·开源·网络攻击模型·安全威胁分析
AIGC大时代3 小时前
对比DeepSeek、ChatGPT和Kimi的学术写作关键词提取能力
论文阅读·人工智能·chatgpt·数据分析·prompt
山晨啊84 小时前
2025年美赛B题-结合Logistic阻滞增长模型和SIR传染病模型研究旅游可持续性-成品论文
人工智能·机器学习