当前位置: 首页 > news >正文

json转yolo格式

json转yolo格式

视觉分割得一些标注文件是json格式,比如,舌头将这个舌头区域分割出来(用mask二值图的形式),对舌头的分割第一步是需要检测出来,缺少数据集,可以使用分割出来的结果,将分割的结果转化成可以用于目标检测的数据集。
下面是将json文件转化成一个yolov8的数据格式,首先看一下json的数据格式:

json的数据格式

我关注的就是"shapes"这个字段因为它是我舌头区域的坐标点,其次关注的是 “imageHeight”: 图片的高, “imageWidth”: 图片的宽。这些在生成yolov8格式的检测框的时候啥都有用。

{"version": "5.2.1","flags": {},"shapes": [{"fill_color": null,"line_color": null,"label": "tongue","points": [[700.361963190184,510.8926380368097],.......[573.9815950920246,515.1871165644171],  ],"group_id": null,"description": null,"shape_type": "polygon","flags": {}}],"imagePath": "0000.jpg","imageData": "iVBORw0KGgoA.....................AAAAAElFTkSuQmCC","imageHeight": 777,"imageWidth": 1286,"fillColor": [255,0,0,128],"lineColor": [0,255,0,128]
}

yolo数据格式

对应的yolov8的数据格式就是yolo系列的标签存储形式

yolo系列对应的是[class x y w’ h’]。注意 class也就是label标签, x y 就是(x, y)表示中心横坐标与图像宽度、高度的比值,w’ :检测框box宽度与图像宽度比值,h’:检测框高度与图像高度比值。

# 一个txt文件
0 0.507394403152401 0.5280297826310096 0.49941035598087944 0.33793653425555276
1 0.407394403152401 0.9280297826310096 0.19941035598087944 0.33793653425555276
2 0.37394403152401 0.5280297826310096 0.19941035598087944 0.13793653425555276

代码

def json_to_yolov8(data):# 获取原图的宽和高image_width = data['imageWidth']image_height = data['imageHeight']for shape in data['shapes']:if shape['label'] == 'tongue':points = shape['points']x_min = min(point[0] for point in points)x_max = max(point[0] for point in points)y_min = min(point[1] for point in points)y_max = max(point[1] for point in points)x_center = (x_min + x_max) / 2y_center = (y_min + y_max) / 2w = x_max - x_minh = y_max - y_minx_center /= image_widthy_center /= image_heightw /= image_widthh /= image_heightyolov8_box = [0, x_center, y_center, w, h]return yolov8_box# Replace 'your_json_file.json' and 'your_image.jpg' with the actual paths
json_folder = "path/to/json"  # 输入json文件的路径位置
yolov8_labels = 'path/to/txt' # 输出的目标文件存放路径
for json_file in os.listdir(json_folder):if json_file.endswith('.json'):json_name = os.path.basename(json_file).split('.')[0]output_file = os.path.join(yolov8_labels, f'{json_name}.txt')jsonfile = os.path.join(json_folder, f'{json_name}.json')with open(jsonfile, 'r') as file:data = json.load(file)yolov8_box = json_to_yolov8(data)with open(output_file, 'w') as f:result_str = ' '.join(str(data) for data in yolov8_box)f.write(result_str)
print("over!")

相关文章:

  • RabbitMQ 消息中间件 消息队列
  • flask之文件上传
  • 双目光波导AR眼镜_AR智能眼镜主板PCB定制开发
  • P5743 【深基7.习8】猴子吃桃
  • 什么是https加密协议?
  • 基于个微机器人的开发
  • 注意力机制的快速学习
  • 新华三数字大赛复赛知识点 VLAN基本技术
  • 使用 HPA 和 TopologySpreadConstraints 实现可用区间等比扩容
  • http与apache
  • Linus:我休假的时候也会带着电脑,否则会感觉很无聊
  • 什么是ElasticSearch中的过滤器?
  • 搭配君正主控芯片测评:创想三维物有所值,让你玩3D打印,而不是玩3D打印机
  • 解决 Element-ui中 表格(Table)使用 v-if 条件切换后,表格的列的筛选不显示了
  • 请简要介绍一下HTML的发展史?
  • 分享一款快速APP功能测试工具
  • 《深入 React 技术栈》
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • co模块的前端实现
  • CSS实用技巧
  • Node + FFmpeg 实现Canvas动画导出视频
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • spring security oauth2 password授权模式
  • Vue2 SSR 的优化之旅
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 动态魔术使用DBMS_SQL
  • 对JS继承的一点思考
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 排序算法学习笔记
  • 前端性能优化--懒加载和预加载
  • 区块链共识机制优缺点对比都是什么
  • 入口文件开始,分析Vue源码实现
  • 三栏布局总结
  • 事件委托的小应用
  • 中文输入法与React文本输入框的问题与解决方案
  • 走向全栈之MongoDB的使用
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • !!java web学习笔记(一到五)
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #define用法
  • #微信小程序:微信小程序常见的配置传旨
  • (2)nginx 安装、启停
  • (C语言)球球大作战
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (done) 两个矩阵 “相似” 是什么意思?
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (三)elasticsearch 源码之启动流程分析
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (一)Thymeleaf用法——Thymeleaf简介