labelme的安装与使用以及如何将labelme标注的json格式关键点标签转为yolo格式的标签

2024-03-28 09:36

本文主要是介绍labelme的安装与使用以及如何将labelme标注的json格式关键点标签转为yolo格式的标签,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 本文只关于将关键点json标签转为yolo标签
    • 希望得到您的指导
    • 背景及代码可用范围
    • 一、labelme的安装和使用
      • (一)labelme的安装
      • (二)labelme的使用
    • 二、json2yolo


本文只关于将关键点json标签转为yolo标签

如果您的json标签格式如下,进行较为轻松的修改即可使用
在这里插入图片描述转换结果展示:
在这里插入图片描述在这里插入图片描述


希望得到您的指导

非常感谢您观看我的博客,我写博客的目的是为了记录我的学习过程同时保留我的某些可重复利用代码以方便下次使用。如果您对我的内容有任何建议还请您不吝指出,非常感谢您对我的指导。

背景及代码可用范围

在我针对人体姿态估计项目准备数据集时,将json格式的数据转变为yolo格式的路上遇到了重重阻碍。
我先是使用make sense标注数据集,但是在标注完成一部分后发现它只能导出标注类型为矩形的标签。我也尝试使用labelimg,但是它只能标注矩形标签。由此我便选择使用labelme进行标注,但是它的标注格式为json。
在网上有很多关于将标注的json文件转换为yolo格式的标签,但是他们有些需要先转为coco,再转为yolo,或者代码需要对我这个项目也需要大量修改,于是我便想自己写一段代码将其格式进行转换。

一、labelme的安装和使用

(一)labelme的安装

中文labelme的百度网盘
链接:https://pan.baidu.com/s/1puJdLZO-z4CPOIbiq4tFvA?pwd=1111
提取码:1111
界面如图所示

在这里插入图片描述

(二)labelme的使用

A:上一个图片
D:下一个图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、json2yolo

json_path:你标注的json文件所在位置
yolo_path:你想将转换后的位置放在哪里
image_path:你标注的图片所在位置

import json
import os
from pathlib import Path
import requests
import yaml
from PIL import Image
from tqdm import tqdm   # 进度条def output_label(json_path,yolo_path,image_path):# os.makedirs(yolo_path,exist_ok=True)names = []  # class names 定义一个空列表json_path = Path(json_path).resolve()yolo_path = Path(yolo_path).resolve()json_parentpath = json_path.parentfor filename in tqdm(os.listdir(json_path),desc="Converting"):if filename.endswith('.json'):with open(os.path.join(json_path,filename), 'r',encoding='utf-8') as f:data = json.load(f)  # json files to dict:json_datalast_part = os.path.basename(data.get("imagePath"))im_path = os.path.join(image_path,last_part)img = Image.open(requests.get(im_path,stream=True).raw if im_path.startswith("http") else im_path)width,height = img.size
#                 size属性获得图像宽度和高度的元组,通常形式为(width, height)label_filename = last_part+"txt"label_path = os.path.join(yolo_path,Path(label_filename).with_suffix(".txt"))# 转换后标签存放路径temp_dict = {}for label in data.get("shapes"):clsn = label.get("label")if clsn not in names:names.append(clsn)label_list = label.get("points")x,y=label_list[0]# 根据json文件的特征,points内部是双重列表,且内层只有一个列表,所以我们将第一个列表的值分别赋值给x,yx = round(x/width,2)y = round(y/height,2)if names.index(clsn) not in temp_dict:temp_dict[names.index(clsn)] = []temp_dict[names.index(clsn)].append(f"{x} {y} ")with open(label_path,"a") as f:for idx in temp_dict:line = f"{idx} {''.join(temp_dict[idx])}"f.write(line + "\n")# Save dataset.yamlnames_formatted = {i: str(name) for i,name in enumerate(names)}# 字典推导式 将一个列表转换为一个字典,其中字典的键是列表中每个元素的索引,值是列表中对应索引位置的元素# enumerate()函数用于将一个可迭代对象(比如列表、元组或者其他序列类型)转换为一个枚举对象d = {"path": f"{json_parentpath}  # dataset root dir".replace('\\','/'),"train": f"{json_parentpath}/images/train  # train images (relative to path) 128 images".replace('\\','/'),"val": f"{json_parentpath}/images/val  # val images (relative to path) 128 images".replace('\\','/'),"test": " # test images (optional)","nc": len(names),"names": names_formatted,}  # dictionaryfile_path = os.path.join(json_parentpath, "data.yaml")with open(file_path,"w",encoding='utf-8')as f:yaml.dump(d,f,sort_keys=False)print("Conversion completed successfully!")if __name__ == '__main__':output_label(r"E:\datasets\jsons",r"E:\datasets\labels",r"E:\datasets\images")

这篇关于labelme的安装与使用以及如何将labelme标注的json格式关键点标签转为yolo格式的标签的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

MySQL 强制使用特定索引的操作

《MySQL强制使用特定索引的操作》MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异... 目录1. 使用FORCE INDEX语法2. 使用USE INDEX语法3. 使用IGNORE IND

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用