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

在使用代码后有任何问题可以和我沟通,让我们共同学习

    • 标注的json格式以及转换后的yolo格式示例
    • 希望得到您的指导
    • 背景及代码可用范围
    • 一、yolo关键点检测数据集格式
    • 二、labelme的安装和使用
      • (一)labelme的安装
      • (二)labelme的使用
    • 三、json2yolo


标注的json格式以及转换后的yolo格式示例

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

在这里插入图片描述

yaml文件:
需要部分修改


希望得到您的指导

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

背景及代码可用范围

  1. 如果你要标注的仅是矩形框,可以有直接导出为yolo格式的标注工具。如:make sense 或labelimg
  2. 本博客仅针对于使用labelme标注用于yolo的json格式关键点检测数据集

一、yolo关键点检测数据集格式

yolo官网
用于训练YOLO 姿态模型的数据集标签格式如下:

每幅图像一个文本文件:数据集中的每幅图像都有一个相应的文本文件,文件名与图像文件相同,扩展名为".txt"。
每个对象一行:文本文件中的每一行对应图像中的一个对象实例。
每行对象信息:每行包含对象实例的以下信息对象类别索引:代表对象类别的整数(如 0 代表人,1 代表汽车等)。对象中心坐标:对象中心的 x 和 y 坐标,归一化为 0 和 1 之间。对象宽度和高度:对象的宽度和高度,标准化后介于 0 和 1 之间。对象关键点坐标:对象的关键点,归一化为 0 至 1。

格式为DIM = 2

<class-index> <x> <y> <width> <height> <px1> <py1> <px2> <py2> ... <pxn> <pyn>
# 采用这种格式、 <class-index> 是对象的类索引、<x> <y> <width> <height> 是边界框的坐标及宽和高,而 <px1> <py1> <px2> <py2> ... <pxn> <pyn> 是关键点的像素坐标。坐标之间用空格隔开。

格式为DIM = 3

<class-index> <x> <y> <width> <height> <px1> <py1> <p1-visibility> <px2> <py2> <p2-visibility> <pxn> <pyn> <p2-visibility>
<pn-visibility>:0代表不可见、1代表遮挡、2代表可见
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco8-pose  # dataset root dir
train: images/train  # train images (relative to 'path') 4 images
val: images/val  # val images (relative to 'path') 4 images
test:  # test images (optional)# Keypoints
kpt_shape: [17, 3]  # number of keypoints, number of dims (2 for x,y or 3 for x,y,visible)
#17个关键点,3维
flip_idx: [0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15]
#反转后关键点的对应关系# Classes dictionary
names:0: person

根据官方文档,标注文件时首先要标注一个矩形框将目标框起来,然后再标注关键点数据

二、labelme的安装和使用

(一)labelme的安装

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

在这里插入图片描述

(二)labelme的使用

A:上一个图片
D:下一个图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述标注后类似
在这里插入图片描述

三、json2yolo

json_path:标注的json文件所在位置
yolo_path:转换后的yolo文件存放位置
image_path:标注的图片所在位置

import json
import os
from pathlib import Path
import requests
import yaml
from PIL import Image
from tqdm import tqdm   # 进度条def count_inner_list(nested_list):count = 0for lst in nested_list:if isinstance(lst,list):
#             检查对象是否为指定类型count += 1return countdef output_label(json_path,yolo_path,image_path):# os.makedirs(yolo_path,exist_ok=True)json_path = Path(json_path).resolve()yolo_path = Path(yolo_path).resolve()json_parentpath = json_path.parentnames_dict = {0: "person"}flipped_names = {v: k for k, v in names_dict.items()}for 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_str = ""previous_person_data = ""cnt = 0for label in data.get("shapes"):if label.get("label") == "person" :cnt += 1if cnt > 1:current_person_data = f"{previous_person_data} {temp_str} \n"previous_person_data = current_person_datalabel_list = label.get("points")x_1,y_1 = label_list[0]x_2,y_2 = label_list[1]x_centre = round(((x_1+x_2)/2)/width,2)y_centre = round(((y_1+y_2)/2)/height,2)person_width = round(abs(x_1-x_2)/width,2)person_height = round(abs(y_1-y_2)/height,2)temp_str = (f"{flipped_names['person']} {x_centre} {y_centre} {person_width} {person_height} ")else:label_list = label.get("points")x,y=label_list[0]# 根据json文件的特征,points内部是双重列表,且内层只有一个列表,所以我们将第一个列表的值分别赋值给x,yx = round(x/width,2)y = round(y/height,2)temp_str = (f"{temp_str} {x} {y} ")current_person_data = f"{previous_person_data} {temp_str}"with open(label_path,"a") as f:f.write(current_person_data + "\n")# Save dataset.yamld = {"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)","names": names_dict,}  # 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")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2906210.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

回环检测-

回环检测 前言 回环检测作为VSLAM中相对独立又重要的一个模块&#xff0c;在消除累积误差&#xff0c;重定位等方面有着重要作用&#xff0c;更有甚者&#xff0c;把系统是否有重定位模块&#xff0c;来作为判断一个系统是SLAM还是里程计的依据。 回环检测是什么&#xff1f…

2024最新嵌入式学习路线,太顶了

2024最新嵌入式学习路线&#xff0c;太顶了&#xff01;&#xff01;&#xff01; 嵌入式系统是一种将软件和硬件紧密结合的技术。在我们投身嵌入式行业时&#xff0c;首先需要认识到&#xff0c;无论我们是专注于软件开发还是硬件开发&#xff0c;最终的目标都是为了更好的工作…

(2023,SSM,门控 MLP,选择性输入,上下文压缩)Mamba:具有选择性状态空间的线性时间序列建模

Mamba: Linear-Time Sequence Modeling with Selective State Spaces 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 1. 简介 2. 状态空间模型 3. 选择性状态空间模型 3.…

【绘图案例-矩阵操作 Objective-C语言】

一、矩阵操作 1.接下来,我们来说这个矩阵操作啊,矩阵操作呢,实际上就是: 1)缩放 2)旋转 3)平移 好,然后呢,这个里边呢,就是三个方法: 1)缩放:void CGContextScaleCTM(CGContextRef c,CGFloat sx,CGFloat sy) 2)旋转:void CGContextRotateCTM(CGConte…

基于Java的新生入学报到管理系统的设计与实现(论文+源码+PPT)_kaic

摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息…

如何保证redis里的数据都是热点数据

MySQL 里有 2000w 数据&#xff0c;Redis 中只存 20w 的数据&#xff0c;如何保证 redis 中的数据都是热点数据&#xff1f; 1.Redis 过期删除策略 1&#xff09;惰性删除:放任键过期不管&#xff0c;但是每次从键空间中获取键时&#xff0c;都检查取得的键是否过期&#xff0c…

全球首个“AI程序员”Deven能替代程序员吗?过了面试却不一定适合职场

制造Devin的公司&#xff0c;是一家叫Cognition的10人初创公司&#xff0c;才成立不到2个月。 一、引言 一家成立不到两个月但拥有十名天才工程师的初创公司Cognition&#xff0c;搞了一个引爆科技圈的大动作。 他们推出了一款名为Devin的人工智能&#xff08;AI&#xff09;助…

HCIP的学习(6)

OSPF—开放式最短路径优先协议 动态路由的评判标准 1、占用资源 2、收敛速度 3、选路动态路由分类&#xff1a; IGP---内部网关协议DV型---距离矢量型---RIPLS型---链路状态型---OSPFEGP---外部网关协议OSPF---无类别的路由协议&#xff08;携带真实掩码&#xff09;组播224.0…

【微服务】Sentinel(流量控制)

文章目录 1.基本介绍1.Sentinel是什么2.Sentinel主要特性3.Sentinel核心功能1.流量控制2.熔断降级3.消息削峰填谷 4.Sentinel两个组成部分 2.Sentinel控制台显示1.需求分析2.下载3.运行1.进入cmd2.输入java -jar sentinel-dashboard-1.8.0.jar3.查看默认端口8080 4.访问1.账号和…

Java毕业设计-基于springboot开发的游戏分享网站平台-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、后台登录2.1管理员功能模块2.2用户功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的…

element-ui switch 组件源码分享

今日简单分享 switch 组件源码&#xff0c;主要从以下四个方面来分享&#xff1a; 1、switch 组件的页面结构 2、switch 组件的属性 3、switch 组件的事件 4、switch 组件的方法 一、switch 组件的页面结构 二、switch 组件的属性 2.1 value / v-model 属性&#xff0c;绑…

L2-047 锦标赛

这题没做出来&#xff0c;查了一些博客&#xff0c;下面是我比较能接受的理解和书写方式。 读完题可以发现这是一个满二叉树&#xff0c;并且可以得到每场比赛失败者的信息&#xff08;决赛是胜利者和失败者都可以得到&#xff09; 对于一场比赛&#xff0c;它的胜利者要么是左…

报错:ImportError: cannot import name ‘imread‘ from ‘scipy.misc‘

报错内容&#xff1a; 问题代码通常是导入scipy库的版本出现了问题。 解决方法&#xff1a; 方法一&#xff1a; scipy版本还原到1.2.0 pip install scipy1.2.0 方法二&#xff1a; 使用from imageio import imread进行替换from scipy.misc import imread 使用imageio库同…

第二十四周代码(跟着罗勇军老师刷题)

2024/03/24 周一 合根植物 题目链接 【参考代码】 #include <iostream> using namespace std;const int N 1e61; int a[N];int find(int index) {if(a[index] index)return index;return a[index] find(a[index]); }int main() {// 请在此输入您的代码int m…

项目Weblogic切换Tomcat-包含数据源配置

目录 准备工作 修改Tomcat配置 Tomcat数据源加密 解密 加密 部署 问题解决 1.执行启停脚本时候&#xff0c;爆出&#xff1a;Cannot find ./catalina.sh The file is absent or does not have... 2.org.apache.catalina.core.StandardService.initInternal Failed to …

Tomcat项目创建 以及 在IDEA当中集成Tomcat

一: 有关Tomcat的WEB项目创建 TOMCAT项目的创建有两种方式, 第一种是利用骨架进行创建, 第二种是利用填补进行相应的创建, 不适用骨架进行创建 ,在这里主要聊第二种 (使用IDEA版本为2023) 1. 创建MAVEN项目, 非骨架形式 2.在相应的pom文件当中设置打包方式 为 war包的打包形…

推荐!00 后都在用的6个超实用微信小程序,又能少装N个app啦

在这个手机内存永远不够用的年代&#xff0c;每一次下载新app都像是在和手机进行一场心理博弈——不下载就out&#xff0c;下载了又怕手机喘不过气来。好在&#xff0c;微信小程序如同一股清流&#xff0c;轻巧地滑入我们的生活&#xff0c;解救了那些对“存储空间不足”弹窗深…

时序数据库IoTDB:功能详解与行业应用

一文读懂时序数据库 IoTDB。 01 为什么需要时序数据库 解释时序数据库前&#xff0c;先了解一下何谓时序数据。 时序数据&#xff0c;也称为时间序列数据&#xff0c;是指按时间顺序记录的同一统计指标的数据集合。这类数据的来源主要是能源、工程、交通等工业物联网强关联行业…

鸿蒙开发之ArkTs开发布局之线性布局(Row/Column)

组件按照布局的要求依次排列&#xff0c;构成应用的页面。在声明式UI中&#xff0c;所有的页面都是由自定义组件构成&#xff0c;开发者可以根据自己的需求&#xff0c;选择合适的布局进行页面开发。 布局指用特定的组件或者属性来管理用户页面所放置UI组件的大小和位置。在实际…

SI24R2E:智能电子学生卡2.4GHz考勤方案

今年年初教育部发布的《关于加强中小学生手机管理工作的通知》中提出&#xff0c;学生手机有限带入校园&#xff0c;原则上不得将个人手机带入校园&#xff0c;禁止带入课堂&#xff1b;应设立校内公共电话、建立班主任沟通热线、探索使用具备通话功能的电子学生证或提供其他家…