lablelme标注的数据转成YOLO v8 格式
1 labelme 转 yolov8 格式
import json
import cv2
import numpy as np
import os
def json2yolo(path):# dic={'N_shaoxi':'0', 'N_qiaoqi':'1', 'N_qiaojie':'2', 'N_pianyi':'3', 'N_yiwu': '4', \# 'NV_shaoxi': '5', 'NV_qiaoqi': '6', 'NV_qiaojie': '7', 'NV_pianyi': '8', 'NV_yiwu': '9',\# 'R_shaoxi': '10', 'R_qiaoqi': '11', 'R_qiaojie': '12', 'R_pianyi': '13', 'R_yiwu': '14',\# 'XS_shaoxi': '15', "XS_qiaoqi": '16', 'XS_qiaojie': '17', 'XS_pianyi': '18', 'XS_yiwu': '19',# '1': '0'}dic={'N_shaoxi':'0', 'N_qiaoqi':'1', 'N_qiaojie':'2', 'N_pianyi':'3', 'N_yiwu': '4', \'NV_shaoxi': '5', 'NV_qiaoqi': '6', 'NV_qiaojie': '7', 'NV_pianyi': '8', 'NV_yiwu': '9',\'R_shaoxi': '10', 'R_qiaoqi': '11', 'R_qiaojie': '12', 'R_pianyi': '13', 'R_yiwu': '14',\'XS_shaoxi': '15', "XS_qiaoqi": '16', 'XS_qiaojie': '17', 'XS_pianyi': '18', 'XS_yiwu': '19','XP_shaoxi': '15', "XP_qiaoqi": '16', 'XP_qiaojie': '17', 'XP_pianyi': '18', 'XP_yiwu': '19'}#dic = {'N_shaoxi': '0', 'N_shaoxi': '1','N_qiaojie': '2','N_pianyi':'3','N_yiwu:'4'} # 类别字典if ".json" in path:data = json.load(open(path,encoding="utf-8"))#读取带有中文的文件w=data["imageWidth"]#获取jaon文件里图片的宽高h=data["imageHeight"]all_line=''for i in data["shapes"]:#归一化坐标点。并得到cx,cy,w,h[[x1,y1],[x2,y2]]=i['points']x1,x2=x1/w,x2/wy1,y2=y1/h,y2/hcx=(x1+x2)/2cy=(y1+y2)/2wi=abs(x2-x1)hi=abs(y2-y1)#将数据组装成yolo格式line="%s %.4f %.4f %.4f %.4f\n"%(dic[i['label']],cx,cy,wi,hi)#生成txt文件里每行的内容all_line+=line# print(all_line)filename = path.replace('json','txt')#将path里的json替换成txt,生成txt里相对应的文件路径fh = open(filename,'w',encoding='utf-8')fh.write(all_line)fh.close()else:filename = path.replace('.jpg', '.txt') # 将path里的json替换成txt,生成txt里相对应的文件路径fh = open(filename, 'w', encoding='utf-8')fh.close()path= "E:/_0904/"
path_list_sub = os.listdir(path)
print("path_list_sub", path_list_sub)
for path_sub in path_list_sub:json_path_list =os.listdir(path+path_sub)path_list2=[x for x in json_path_list]#获取所有json文件的路径# path_list2 = [x for x in json_path_list if ".json" in x] # 获取所有json文件的路径print("len of path_list2 ",path_sub,len(path_list2))for p in path_list2:absolute_path= (path+path_sub+'/'+p)print("abs path",absolute_path)json2yolo(path+path_sub+'/'+p)
2 分为训练集&验证集合
import json
import cv2
import numpy as np
import os
import shutil
root_root_path = "。/0904/"
root_paths = os.listdir(root_root_path)
for root_path in root_paths: # DATE NAMED DATAroot_path = root_root_path+root_path+'/'# root_path = "E:/AOI_DATA/sort/data0705/"class_path_list = os.listdir(root_path)print("path_list_sub", class_path_list)all_file_path=[]index=0for class_path in class_path_list: #N NV R XSall_path_list =os.listdir(root_path+class_path)for file in all_path_list:# print()all_file_path.append((root_path + class_path + '/' + file))# os.path.exists(test_file.txt)print("file len ",len(all_file_path))txt_file_path=[]for file_path in all_file_path:if file_path[-3:]=="txt":print("file_path",file_path)txt_file_path.append(file_path)# print(txt_file_path)print("txt file len ",len(txt_file_path))train_index = 0valid_index = 0split_index = 0for tf in txt_file_path:if os.path.exists(tf[:-3]+'jpg'):if split_index % 5 != 0:#passshutil.copy(tf,fr'.\X_DATA\train\labels')shutil.copy(tf[:-3]+'jpg', fr'.\train\images')train_index += 1else:shutil.copy(tf,fr'.\X_DATA\valid\labels')shutil.copy(tf[:-3]+'jpg', fr'.\X_DATA\valid\images')valid_index += 1split_index += 1print("train_index image num:", train_index)print("valid_index image num:", valid_index)print("split_index image num:", split_index)
相关文章:
lablelme标注的数据转成YOLO v8 格式
1 labelme 转 yolov8 格式 import json import cv2 import numpy as np import os def json2yolo(path):# dic{N_shaoxi:0, N_qiaoqi:1, N_qiaojie:2, N_pianyi:3, N_yiwu: 4, \# NV_shaoxi: 5, NV_qiaoqi: 6, NV_qiaojie: 7, NV_pianyi: 8, NV_yiwu: 9,\# …...
【linux】cat 命令
cat 命令是 Linux 和 Unix 系统中非常基础且常用的一个命令,它的全称是 "concatenate" 的缩写,意为“连接”或“串联”。尽管名字听起来像是专门用于连接文件的,但 cat 命令的用途远不止于此。它主要用于查看、创建、合并文件内容&…...
速通sass基础语法
速通Sass语法: sass的特点: 由于css的缺陷:无法自定义变量,不可引用,嵌套等。sass/scss/less等css预处理器产生。以sass为例,引入了变量、嵌套、运算、混入(Mixin)、继承、颜色处理、函数等诸多功能。方便…...

Vue: watch5种监听情况
目录 一.watch的性质与作用 1.watch 的性质包括: 2.watch 常用于以下场景: 二.监视ref定义的基本类型数据 三.监视ref定义的对象类型数据 四.监视reactive定义的对象类型数据 五.监视ref或reactive定义的对象类型数据中的某个属性 六.监视上述的…...
Android 车联网——汽车系统介绍(附2)
汽车系统指的是由多个模块或组件组成的系统,如发动机系统、制动系统、空调系统等,这些系统通常由多个 ECU 协同工作来完成特定的任务。 一、汽车系统 1、防抱死制动系统 ABS(Anti-lock Braking System,防抱死制动系统)是一项重要的汽车安全技术,其主要功能是在车辆紧急…...
C++ 链表
基本用法 C++提供了list容器,这是一个双向链表,能高效进行数据添加和删除。 引入头文件 #include <iostream> #include <list> // 引入list头文件 using namespace std;创建和初始化 list...

中国初创公司数量下降了98%
近年来,中国风险投资市场的风云变幻,通过IT Juzi(IT桔子)等权威数据服务提供商的透镜,得以清晰展现。数据显示,自2018年的鼎盛时期——拥有51,302家初创公司以来,这一数字在短短五年内急剧下降至…...

【SSRF漏洞】——http协议常见绕过
改变的确很难,但结果值得冒险 本文如有错误之处,还请各位师傅指正 一.ssrf概述 SSRF全称为Server-side Request Fogery,中文含义服务器端请求伪造 SSRF是一种由攻击者构造形成由目标服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标…...
[网络][CISCO]CISCO_华为网络设备端口镜像配置
CISCO 华为网络设备端口镜像配置大全 isco交换机通常支持2组镜像,4000系列有支持6组镜象的。支持所全端口镜像。 Cisco catylist2820 有2个菜单选项 先进入menu选项,enable port monitor 进入cli模式, en conf term interface fast0/…...

第二十五章 添加数字签名
文章目录 第二十五章 添加数字签名数字签名概述添加数字签名 第二十五章 添加数字签名 本主题介绍如何向 IRIS Web 服务和 Web 客户端发送的 SOAP 消息添加数字签名。 通常,会同时执行加密和签名。为简单起见,本主题仅介绍签名。有关结合加密和签名的信…...

GHOST重装后DEF盘数据救援指南
一、现象解析:GHOST重装后的DEF盘失踪之谜 在计算机维护的日常中,GHOST重装因其快速便捷的特点,成为众多用户解决系统问题的首选方法。然而,这一操作虽能迅速恢复系统至初始状态,却也暗藏风险,尤其是当不慎…...
使用blender快速制作metahuman面部以及身体绑定教程
【metablriger教程】使用blender一键绑定自定义角色metahuman绑定并导入UE5引擎教程_哔哩哔哩_bilibili 目前市面上的制作metahuman绑定的工具大多是maya的,metablriger是一个帮助用户快速制作metahuman绑定的blender插件,可以平替市面上已有的metahuma…...

OpenHarmony鸿蒙( Beta5.0)智能窗户通风设备开发详解
鸿蒙开发往期必看: 一分钟了解”纯血版!鸿蒙HarmonyOS Next应用开发! “非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通) “一杯冰美式的时间” 了解鸿蒙HarmonyOS Next应用开发路…...
pandas 将多条记录整合成一条记录,每条记录的year和month字段组成新的字段名
你可以使用 Pandas 的 pivot_table() 或 groupby() 方法,将多条记录整合成一条,并通过 year 和 month 这两个字段生成新的字段名。具体的实现方法是通过 pivot_table() 将 year 和 month 作为列标签,将其他列中的数据进行整合。 假设你的数据…...
C# 中的多线程同步:原子变量、原子操作、内存顺序和可见性
C# 中的多线程同步:原子变量、原子操作、内存顺序和可见性 引言 随着现代计算机系统的发展,多核处理器已经变得非常普遍。在这种环境下,多线程编程成为提高应用程序性能的关键技术之一。然而,多线程编程带来了新的挑战ÿ…...

视图(mysql)
一、什么是视图 视图是⼀个虚拟的表,它是基于⼀个或多个基本表或其他视图的查询结果集。视图本⾝不存储数 据,⽽是通过执⾏查询来动态⽣成数据。⽤⼾可以像操作普通表⼀样使⽤视图进⾏查询、更新和管 理。视图本⾝并不占⽤物理存储空间,它仅…...

elementui组件el-upload实现批量文件上传
el-upload组件上传文件时,每传一个文件会调一次接口,所以当上传多个文件的时候,有 n 个文件就要调 n 次接口。 刚好之前工作中遇到使用el-upload组件批量上传文件的需求,来看看怎么实现。 思路: 1.取消组件的自动上…...

【JAVA入门】Day45 - 压缩流 / 解压缩流
【JAVA入门】Day45 - 压缩流 / 解压缩流 文章目录 【JAVA入门】Day45 - 压缩流 / 解压缩流一、解压缩流二、压缩流 在文件传输过程中,文件体积比较大,传输较慢,因此我们发明了一种方法,把文件里的数据压缩到一种压缩文件中&#x…...

Qt_自定义信号
目录 1、自定义信号的规定 2、创建自定义信号 3、带参数的信号与槽 4、一个信号连接多个槽 5、信号与槽的断开 结语 前言: 虽然Qt已经内置了大量的信号,并且这些信号能够满足大部分的开发场景,但是Qt仍然允许开发者自定义信号&#…...

【运维方案】某系统运维需求方案参考(doc全原件2024)
系统运维需求方案 1服务目标 2服务人力需求、服务资源需求 3信息资产统计服务需求 4业务应用软件服务需求 5网络、安全系统运维服务需求 6主机、存储系统运维服务需求 7数据库系统运维服务需求 8终端运维服务需求 9综合布线系统服务需求 10大屏幕显示系统的维护需求 11视频会议…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...

沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...

echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式
pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图,如果边框加在dom上面,pdf-lib导出svg的时候并不会导出边框,所以只能在echarts图上面加边框 grid的边框是在图里…...

[C++错误经验]case语句跳过变量初始化
标题:[C错误经验]case语句跳过变量初始化 水墨不写bug 文章目录 一、错误信息复现二、错误分析三、解决方法 一、错误信息复现 write.cc:80:14: error: jump to case label80 | case 2:| ^ write.cc:76:20: note: crosses initialization…...