iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Yolov5多边形标签和JSON数据格式转换
  • 457
分享到

Yolov5多边形标签和JSON数据格式转换

Yolov5标签Yolov5JSON数据Yolov5格式转换 2023-05-18 17:05:43 457人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录Labelme简要介绍多边形标签的处理方法 转换后的txt格式如下:代码实现多边形标签代码实现方法Labelme简要介绍 通过labelme对图进行标注后,得到的是JS

Labelme简要介绍

通过labelme对图进行标注后,得到的是JSON文件,而Yolov5对数据进行模型构建的时候,读取需要的是txt格式的文件。所以需要先通过python进行文件格式的转换

注:labelme是麻省理工(MIT)的计算机科学和人工智能实验室(CSaiL)研发的图像标注工具,人们可以使用该工具创建定制化标注任务或执行图像标注,项目源代码已经开源

Labelme程序运行,通过标注后如图所示:

 图1 Labelme标注

 此图片可以得到以下格式的json文件:

 文件中的字段如下:

‘version’——版本号

‘shapes’——里面装的是Yolov5需要的数据

        ‘label’——你在labelme里面设置的类

        ‘points’——点的坐标

 我这里的label如图1所示共有5类,等下进行json转化为txt的时候用

 对应这些类创一个字典以便json进行转换

例:name2id={'bike':0,'arrow':1,'crossline':2,'building':3,'car':4,'person':5}

 可能某一张图片中可能不存在上述的某个类,所以这里请以某个json中最多的类创建这个字典。

多边形标签的处理方法

由于yolov5 仅支持矩形图形的识别,所以需要通过数据处理,将多边形变换为矩形。

处理原理:遍历该标签所有的坐标,获取最大x_max,y_max,最小x_min,y_min的x和y的坐标。

然后再进行数据的规范化。

 转换后的txt格式如下:

第一个是类,比如第一行中的第一个数字是4,我的name2id中car也为4,即这里指代的就是'car'这个标签。

第一行 第二个 和 第三个数字 为数字为图片中心点(x,y)的坐标

第四个数字和第五个数字对应的是 这个标签的 宽和高。 

代码实现

多边形标签代码实现方法

                x_max=0
                y_max=0
                x_min=100000
                y_min=100000
                for lk in range(len(i['points'])):
                    x1=float(i['points'][lk][0])
                    y1=float(i['points'][lk][1])
                   # print(x1)
                    if x_max<x1:
                        x_max=x1
                    if y_max<y1:
                        y_max=y1
                    if y_min>y1:
                        y_min=y1
                    if x_min>x1:
                        x_min=x1
                bb = (x_min, y_max, x_max, y_min)

json转化为txt的部分代码如下:

def decode_json(json_floder_path,txt_outer_path, json_name):
  #  json_floder_path='E:\\Python_package\\itesjson\\'
   # json_name='V1125.json'
    txt_name = txt_outer_path + json_name[:-5] + '.txt'
    with open(txt_name,'w') as f:
        json_path = os.path.join(json_floder_path, json_name)#os路径融合
        data = json.load(open(json_path, 'r', encoding='gb2312',errors='ignore'))
        img_w = data['imageWidth']#图片的高
        img_h = data['imageHeight']#图片的宽
        isshape_type=data['shapes'][0]['shape_type']
        print(isshape_type)
        #print(isshape_type)
        #print('下方判断根据这里的值可以设置为你自己的类型,我这里是polyGon'多边形)
        #len(data['shapes'])
        for i in data['shapes']:
            label_name = i['label']#得到json中你标记的类名
            if (i['shape_type'] == 'polygon'):#数据类型为多边形 需要转化为矩形
                x_max=0
                y_max=0
                x_min=100000
                y_min=100000
                for lk in range(len(i['points'])):
                    x1=float(i['points'][lk][0])
                    y1=float(i['points'][lk][1])
                   # print(x1)
                    if x_max<x1:
                        x_max=x1
                    if y_max<y1:
                        y_max=y1
                    if y_min>y1:
                        y_min=y1
                    if x_min>x1:
                        x_min=x1
                bb = (x_min, y_max, x_max, y_min)
            if (i['shape_type'] == 'rectangle'):#为矩形不需要转换
                x1 = float(i['points'][0][0])
                y1 = float(i['points'][0][1])
                x2 = float(i['points'][1][0])
                y2 = float(i['points'][1][1])
                bb = (x1, y1, x2, y2)
            bbox = convert((img_w, img_h), bb)
            try:
                f.write(str(name2id[label_name]) + " " + " ".join([str(a) for a in bbox]) + '\n')
            except:
                pass

json_floder——读取json的文件夹的绝对路径

txt_outer_path——保存txt文本的文件夹的绝对路径

json_name——json_name是json文本的名字

读取该类的坐标然后进行数字规范化

 数字规范化的代码如下:

def convert(img_size, box):
    dw = 1. / (img_size[0])
    dh = 1. / (img_size[1])
    x = (box[0] + box[2]) / 2.0 
    y = (box[1] + box[3]) / 2.0 
    w = abs(box[2] - box[0])
    h = abs(box[3] - box[1])#加入绝对值的原因是只需要它的宽和高,以免出现负数
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)
 最后附上我的完整代码:
#处理labelme多边形矩阵的标注  json转化txt
import json
import os
name2id={'bike':0,'arrow':1,'crossline':2,'building':3,'car':4,'person':5}
def convert(img_size, box):
    dw = 1. / (img_size[0])
    dh = 1. / (img_size[1])
    x = (box[0] + box[2]) / 2.0 
    y = (box[1] + box[3]) / 2.0 
    w = abs(box[2] - box[0])
    h = abs(box[3] - box[1])
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)
def decode_json(json_floder_path,txt_outer_path, json_name):
  #  json_floder_path='E:\\Python_package\\itesjson\\'
   # json_name='V1125.json'
    txt_name = txt_outer_path + json_name[:-5] + '.txt'
    with open(txt_name,'w') as f:
        json_path = os.path.join(json_floder_path, json_name)#os路径融合
        data = json.load(open(json_path, 'r', encoding='gb2312',errors='ignore'))
        img_w = data['imageWidth']#图片的高
        img_h = data['imageHeight']#图片的宽
        isshape_type=data['shapes'][0]['shape_type']
        print(isshape_type)
        #print(isshape_type)
        #print('下方判断根据这里的值可以设置为你自己的类型,我这里是polygon'多边形)
        #len(data['shapes'])
        for i in data['shapes']:
            label_name = i['label']#得到json中你标记的类名
            if (i['shape_type'] == 'polygon'):#数据类型为多边形 需要转化为矩形
                x_max=0
                y_max=0
                x_min=100000
                y_min=100000
                for lk in range(len(i['points'])):
                    x1=float(i['points'][lk][0])
                    y1=float(i['points'][lk][1])
                   # print(x1)
                    if x_max<x1:
                        x_max=x1
                    if y_max<y1:
                        y_max=y1
                    if y_min>y1:
                        y_min=y1
                    if x_min>x1:
                        x_min=x1
                bb = (x_min, y_max, x_max, y_min)
            if (i['shape_type'] == 'rectangle'):#为矩形不需要转换
                x1 = float(i['points'][0][0])
                y1 = float(i['points'][0][1])
                x2 = float(i['points'][1][0])
                y2 = float(i['points'][1][1])
                bb = (x1, y1, x2, y2)
            bbox = convert((img_w, img_h), bb)
            try:
                f.write(str(name2id[label_name]) + " " + " ".join([str(a) for a in bbox]) + '\n')
            except:
                pass
if __name__ == "__main__":
    json_floder_path = 'E:\Python_package\\itesjson\\'#存放json的文件夹的绝对路径
    txt_outer_path='E:\Python_package\\e1\\'#存放txt的文件夹绝对路径
    json_names = os.listdir(json_floder_path)
    print("共有:{}个文件待转化".fORMat(len(json_names)))
    flaGCount=0
    for json_name in json_names:
        decode_json(json_floder_path,txt_outer_path,json_name)
        flagcount+=1
        print("还剩下{}个文件未转化".format(len(json_names)-flagcount))
        break
       # break
    print('转化全部完毕')

os.listdir——读取文件下的所有文件。请先创建一个只有json文件的文件夹

记得先修改!!!if __name__==“__main__”后的参数

json_floder_path——改成你自己的json文件夹路径

txt_outer_path——改成你自己的输出文件夹路径

到此这篇关于Yolov5多边形标签和JSON数据格式转换的文章就介绍到这了,更多相关Yolov5的JSON数据格式转换内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Yolov5多边形标签和JSON数据格式转换

本文链接: https://www.lsjlt.com/news/212256.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Yolov5多边形标签和JSON数据格式转换
    目录Labelme简要介绍多边形标签的处理方法 转换后的txt格式如下:代码实现多边形标签代码实现方法Labelme简要介绍 通过labelme对图进行标注后,得到的是js...
    99+
    2023-05-18
    Yolov5 标签 Yolov5 JSON数据 Yolov5 格式转换
  • Yolov5数据集标签的txt格式与xml相互转换
    在使用yolov5制作数据集时,yolov5使用txt格式的标签,打标签的工具如labelimg使用的是xml格式的标签,需要进行数据集格式的转换: yolov5保存检测结果的txt标签 python...
    99+
    2023-08-31
    xml python numpy
  • python3 json数据格式的转换(
    在写网络爬虫的时候,有时候会抓取到一些json格式的字符串,想要通过python字典的方式对字串中的内容进行寻址,则需要将json字符串先转换为python字典。 dumps()函数:  loads()函数: 示例: import ...
    99+
    2023-01-31
    数据格式 json
  • Python Json数据格式的转换
    1.json:是一种轻量级的数据交互格式,采用完全独立于编程语言的文本格式来存储和表示数据。 Python语言使用JSON有很大的优势,因为JSON无非就是一个单独或一个内部元素都是字典的列表,所以JSON可以直接和Python的字典或列表...
    99+
    2023-09-30
    json
  • 【Python】-- python与json数据格式的转换
    什么是json? json是一种轻量级的数据交互格式,可以按照json指定的格式去组织和封装数据。 json主要功能 json是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递与交互。 json的作用 为了让不同的语言都能相...
    99+
    2023-08-31
    json python 开发语言
  • labelimg标注的VOC格式标签xml文件和yolo格式标签txt文件相互转换
    目录 1 labelimg标注VOC格式和yolo格式介绍 1.1 voc格式 1.2 yolo数据格式介绍 2 voc格式数据和yolo格式数据相互转换 2.1 voc转yolo代码 2.2 yolo转voc格式代码  1 label...
    99+
    2023-09-09
    深度学习 python list
  • java将XML文档转换成json格式数据的示例
    本文介绍了java将XML文档转换成json格式数据的示例,分享给大家,具体如下:功能将xml文档转换成json格式数据说明依赖包: jdom-2.0.2.jar : xml解析工具包; fastjson-1.1.36.jar : 阿里...
    99+
    2023-05-30
    java xml json
  • 如何将php变量与json格式数据相互转换
    这篇文章主要介绍了如何将php变量与json格式数据相互转换,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常...
    99+
    2023-06-14
  • PHP中怎么将数据转换成json格式的文件
    本篇内容主要讲解“PHP中怎么将数据转换成json格式的文件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP中怎么将数据转换成json格式的文件”吧!首先,让我们来了解一下什么是json格式...
    99+
    2023-07-05
  • JSON数据格式转换为Python的类对象方法有哪些
    本篇内容主要讲解“JSON数据格式转换为Python的类对象方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JSON数据格式转换为Python的类对象方法有哪些”吧!  有时候我们有这种...
    99+
    2023-06-02
  • python转换wrf输出的数据为网页可视化json格式
    目录前言NCL插值脚本1NCL插值脚本2python格式转换脚本1python 格式转换脚本2前言 一般网页可视化风场中的数据都是json格式,而如果我们希望将wrf模式模拟输出的风...
    99+
    2024-04-02
  • 如何在NiFi中实现数据转换和格式化
    在NiFi中实现数据转换和格式化通常使用Processors来完成。以下是一些常用的数据转换和格式化的Processor: Con...
    99+
    2024-04-02
  • json与jsonp区别及通过ajax获得json数据后格式转换的示例分析
    json与jsonp区别及通过ajax获得json数据后格式转换的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。&nb...
    99+
    2024-04-02
  • SpringBoot2.0解决Long型数据转换成json格式时丢失精度问题
    目录解决Long型数据转换成json格式时丢失精度SpringBoot时间格式,Long型精度丢失常见问题时间格式,Long型精度丢失解决Long型数据转换成json格式时丢失精度 ...
    99+
    2024-04-02
  • SQLServer中如何进行数据类型转换和格式化
    在SQLServer中,可以使用CAST和CONVERT函数进行数据类型转换和格式化。 数据类型转换: 使用CAST函数可以将一个...
    99+
    2024-04-09
    SQLServer
  • ABAP和XML数据格式互相转换的方法是什么
    这篇文章主要介绍“ABAP和XML数据格式互相转换的方法是什么”,在日常操作中,相信很多人在ABAP和XML数据格式互相转换的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ABAP和XML数据格式互...
    99+
    2023-06-04
  • 如何在MySQL中进行数据转换和格式化操作
    在MySQL中,可以使用内置的函数来进行数据转换和格式化操作。以下是一些常用的函数: CAST() 函数:用于将一个数据类型转换为...
    99+
    2024-03-06
    MySQL
  • SpringBoot怎么解决Long型数据转换成json格式时丢失精度问题
    这篇“SpringBoot怎么解决Long型数据转换成json格式时丢失精度问题”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇...
    99+
    2023-07-02
  • 如何进行数据格式转换和转码以适配不同系统
    数据格式转换和转码是将一种数据格式或编码方式转换成另一种以适配不同系统的过程。以下是一些常见的方法和工具可以帮助进行数据格式转换和转...
    99+
    2024-02-29
    Hadoop
  • 使用 to 把庞大的 XML 文件转换成 JSON 格式,以便存储在 MongoDB 数据库中
    Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《使用 to 把庞大的 XML 文件转换成 JSON 格式,以便存储在 MongoDB ...
    99+
    2024-04-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作