当前位置: 首页> 游戏> 攻略 > 在线教育网站源码_院内设计_seo技术培训_手机百度

在线教育网站源码_院内设计_seo技术培训_手机百度

时间:2025/7/10 18:13:59来源:https://blog.csdn.net/m0_59197405/article/details/143330690 浏览次数:0次
在线教育网站源码_院内设计_seo技术培训_手机百度

【YOLO标签转换】JSON格式标签转换为YOLO格式标签详细教程(附完整代码)


关于作者


作者:小白熊

作者简介:精通python、matlab、c#语言,擅长机器学习,深度学习,机器视觉,目标检测,图像分类,姿态识别,语义分割,路径规划,智能优化算法,数据分析,各类创新融合等等。

联系邮箱:xbx3144@163.com

  在目标检测任务中,YOLO(You Only Look Once)是一种非常流行的算法。YOLO将目标检测问题转换为回归问题,从而大大提升了检测速度。YOLO格式是一种简洁的数据标注格式,通常用于训练和评估YOLO模型。本文将详细介绍如何将标注数据从JSON格式转换为YOLO格式,并附上详细的Python代码实现。



准备工作

  首先,我们需要整理标注数据。每个JSON文件对应一张图片,其中包含了目标的类别和位置信息,并将其放在一个文件夹中。YOLO格式则要求每个目标的信息以“类别ID 中心点x 中心点y 宽度w 高度h”的形式表示,且所有坐标和尺寸都需要归一化到0到1之间。



完整代码

以下是一个Python脚本,用于将JSON格式的标注数据转换为YOLO格式的TXT文件。

import os  
import json  
from PIL import Image  
import warnings  warnings.filterwarnings("ignore")  json_dir = './labels_json/'  # JSON文件路径  
out_dir = './labels_txt/'  # 输出的TXT文件路径  # 确保输出目录存在  
if not os.path.exists(out_dir):  os.makedirs(out_dir)  def get_json(json_file, filename):  # 读取JSON文件数据  with open(json_file, 'r') as load_f:  content = json.load(load_f)  image_width = 5568  # 图片的宽  image_height = 3712  # 图片的高  filename_txt = out_dir + filename + '.txt'  # 创建或清空TXT文件  with open(filename_txt, mode="w", encoding="utf-8") as fp:  pass  # 创建一个空文件然后关闭  # 类别名称,对应标签序号  name = ['cola', 'pepsi', 'sprite', 'fanta', 'spring', 'ice', 'scream', 'milk', 'red', 'king']  name_class = {name[i]: i for i in range(len(name))}  con = content['shapes']  # 逐个处理标注信息  for t in con:  num = name_class[t['label']]  point = t['points']  # 计算中心点坐标和宽高(归一化)  x = (((point[1][0] - point[0][0]) / 2) + point[0][0]) / image_width  y = (((point[1][1] - point[0][1]) / 2) + point[0][1]) / image_height  w = (point[1][0] - point[0][0]) / image_width  h = (point[1][1] - point[0][1]) / image_height  # 将计算得到的信息写入TXT文件  file_str = str(num) + ' ' + str(round(x, 6)) + ' ' + str(round(y, 6)) + ' ' + str(round(w, 6)) + \  ' ' + str(round(h, 6))  with open(filename_txt, mode="a", encoding="utf-8") as fp:  fp.write(file_str + '\n')  def main():  files = os.listdir(json_dir)  # 得到文件夹下的所有文件名称  for file in files:  # 遍历文件夹  if file.endswith('.json'):  # 只处理JSON文件  filename = file.split('.')[0]  get_json(json_dir + '/' + file, filename)  if __name__ == '__main__':  main()



代码详解

  1. 导入必要的库
    • os:用于文件和目录操作。
    • json:用于读取JSON文件。
    • PIL.Image:虽然在这个脚本中没有直接使用到PIL库,但通常用于图像处理。
    • warnings:用于忽略警告信息,使输出更加清晰。
  2. 设置目录路径
    • json_dir:JSON文件存储的目录。
    • out_dir:输出的TXT文件存储的目录。
  3. 确保输出目录存在:如果输出目录不存在,则创建它。
  4. 定义get_json函数
    • 读取JSON文件并解析内容。
    • 设置图片的宽度和高度(例子中所有图片的尺寸相同)。
    • 定义类别名称和对应的标签序号。
    • 遍历标注信息,计算每个目标的中心点坐标和宽高(归一化)。
    • 将计算得到的信息写入TXT文件。
  5. 定义main函数
    • 遍历JSON文件目录,获取所有JSON文件。
    • 调用get_json函数处理每个JSON文件。
  6. 运行脚本
    • 检查是否是直接运行该脚本,如果是,则调用main函数。



注意事项

  1. JSON文件格式:
    • JSON文件的格式包含shapes字段,每个形状包含labelpoints字段。
    • label字段表示目标类别,points字段表示目标的矩形框的两个对角点坐标。
  2. 归一化:
    • YOLO格式要求所有坐标和尺寸都需要归一化到0到1之间。
    • 归一化公式:(实际值 - 最小值) / (最大值 - 最小值)。在这里,图片的宽高作为最大值,坐标值作为实际值进行计算。
  3. 文件操作:
    • 在写入TXT文件时,使用mode="a"模式,以确保每次都是在文件末尾追加内容,而不是覆盖原有内容。



  通过这段代码,你可以轻松地将JSON格式的标注数据转换为YOLO格式的TXT文件,从而用于YOLO模型的训练和评估。

关键字:在线教育网站源码_院内设计_seo技术培训_手机百度

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: