YOLO数据集制作(一)|Labelme标注的矩形框json文件转txt

        以下教程用于将使用Labelme软件标注生成的json格式文件转成YOLO使用的txt格式,适用场景:矩形框

        使用方法:将json文件夹路径填到json_dir后, 将保存转化后txt的路径填入txt_dir后,运行即可转化。

        运行完成后会生成labelclassess.txt文件,其中保存了标签名称,这里的名称与转换后的txt对应。

import os
import cv2
import glob
import json
import numpy as np
from tqdm import tqdm

# 参考链接 https://zhuanlan.zhihu.com/p/622246547


# 将labelme_json标注转yolo_txt
def convert(size, box):
    """
    convert [xmin, xmax, ymin, ymax] to [x_centre, y_centre, w, h]
    """
    dw = 1. / size[0]
    dh = 1. / size[1]
    x = (box[0] + box[1]) / 2.0
    y = (box[2] + box[3]) / 2.0
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return [x, y, w, h]


if __name__ == "__main__":

    class_names = []

    # json文件夹路径
    json_dir = r"O:\DeepLearningTool\01_handle_dataset\dataset\object\image"
    # 转化后txt的保存路径
    txt_dir = r"O:\DeepLearningTool\01_handle_dataset\dataset\object\label"

    if not os.path.exists(txt_dir):
        os.makedirs(txt_dir, exist_ok=True)
    json_pths = glob.glob(json_dir + "/*.json")

    for json_pth in tqdm(json_pths,  desc='Processing'):
        f1 = open(json_pth, "r")
        json_data = json.load(f1)

        img_pth = os.path.join(json_dir, json_pth.replace("json", "jpg"))
        img = cv2.imread(img_pth)
        h, w = img.shape[:2]

        tag = os.path.basename(json_pth)
        out_file = open(os.path.join(txt_dir, tag.replace("json", "txt")), "w")
        label_infos = json_data["shapes"]

        for label_info in label_infos:
            label = label_info["label"]
            points = label_info["points"]
            if len(points) >= 3:
                points = np.array(points)
                xmin, xmax = max(0, min(np.unique(points[:, 0]))), min(w, max(np.unique(points[:, 0])))
                ymin, ymax = max(0, min(np.unique(points[:, 1]))), min(h, max(np.unique(points[:, 1])))
            elif len(points) == 2:
                x1, y1 = points[0]
                x2, y2 = points[1]
                xmin, xmax = min(x1, x2), max(x1, x2)
                ymin, ymax = min(y1, y2), max(y1, y2)
            else:
                continue
            bbox = [xmin, xmax, ymin, ymax]
            bbox_ = convert((w,h), bbox)
            if label not in class_names:
                class_names.append(label)
            cls_id = class_names.index(label)
            out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bbox_]) + '\n')
    with open(txt_dir + 'classes.txt', 'w') as f:
        for i in class_names:
            f.write(i + '\n')

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从头理解transformer,注意力机制(上)

深入理解注意力机制和Transformer架构,及其在NLP和其他领域的突破。 要想理解transformer,先从编码器解码器结构开始理解 基于transformer发展起来的llm 右边:只有解码器,强项是生成内容 左边:只有编码器&#xff0…

云动态摘要 2024-05-07

给您带来云厂商的最新动态,最新产品资讯和最新优惠更新。 最新优惠与活动 [免费试用]即刻畅享自研SaaS产品 腾讯云 2024-04-25 涵盖办公协同、营销拓客、上云安全保障、数据分析处理等多场景 云服务器ECS试用产品续用 阿里云 2024-04-14 云服务器ECS试用产品续用…

JUC下CountDownLatch详解

详细介绍 CountDownLatch是Java并发包java.util.concurrent中提供的一个同步工具类,它允许一个或多个线程等待其他线程完成操作后再继续执行。这个工具类基于一个计数器,计数器的初始值可以由构造函数设定。线程调用countDown()方法会将计数器减1&#x…

79.网络游戏逆向分析与漏洞攻防-移动系统分析-利用数据包实现人物走路

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果,代码看不懂是正常的,只要会抄就行,抄着抄着就能懂了 内容…

全新时代的降临——比亚迪,助力未来出行

近日,世界舞台中央聚焦,比亚迪登上欧洲顶级赛事赞助席位,让全球见证中国新能源汽车传奇崛起!作为新能源领袖品牌,比亚迪现已累计销售突破730万辆,全球每售出五辆新能源汽车,便有一辆来自比亚迪。…

CLI举例:配置HTTP服务器的负载均衡

CLI举例:配置HTTP服务器的负载均衡 本举例介绍了如何配置HTTP服务器的负载均衡。 组网需求 如图1所示,企业有三台Web服务器Server1、Server2和Server3,且这三台服务器的硬件性能顺次降低,Server1性能是Server2的两倍、Server2性能…

Linux(利用gdb进行调试)

gdb: gdb是GNU debugger的缩写,是编程调试工具。 gdb功能 1.启动程序,可以按照用户自定义的要求随心所欲的运行程序。 2.让被调试的程序在用户所指定的调试的断点处停住 (断点可以是条件表达式)。 3.当程序停住时,可以检查此时程序中所发…

【静态分析】软件分析课程实验A4-类层次结构分析与过程间常量传播

官网:作业 4:类层次结构分析与过程间常量传播 | Tai-e 参考:https://www.cnblogs.com/gonghr/p/17984124 ----------------------------------------------------------------------- 1 作业导览 为 Java 实现一个类层次结构分析&#xf…

推荐3个实用的github开源项目

目录: 1、AI生成高清短视频 2、媒体平台爬虫 3、文本转语音项目

日本OTC机械手维修需要注意哪些问题呢?

随着工业4.0时代的到来,机器人在制造业中的应用越来越广泛。OTC(Over The Counter)机器人作为工业机器人的一种,以其高效、精准、稳定的特点受到众多企业的青睐。然而,在实际使用过程中,可能会出现一些OTC机…

[Linux_IMX6ULL驱动开发]-GPIO子系统和Pinctrl子系统

目录 Pinctrl子系统的概念 GPIO子系统的概念 定义自己的GPIO节点 GPIO子系统的函数 引脚号的确定 基于GPIO子系统的驱动程序 驱动程序 设备树修改 之前我们进行驱动开发的时候,对于硬件的操作是依赖于ioremap对寄存器的物理地址进行映射,以此来达…

【vivado】debug相关时钟及其约束关系

一、前言 在xilinx fpga的degug过程中,经常出现由于时钟不对而导致的观测波形失败,要想能够解决这些问题需要了解其debug的组成环境以及之间的数据流。本文主要介绍debug过程中需要的时钟及各时钟之间的关系。 二、debug相关时钟 Vivado 硬件管理器使…

CTFHUB-技能树-Web题-RCE(远程代码执行)-文件包含

CTFHUB-技能树-Web题-RCE(远程代码执行) 文件包含 文章目录 CTFHUB-技能树-Web题-RCE(远程代码执行)文件包含解题方法1:![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/71f7355b3c124dfe8cdf1c95e6991553.png#pic_ce…

基于OpenCV对胸部CT图像的预处理

1 . 传作灵感 胸部CT中所包含的噪声比较多,基于OpenCV简单的做一些处理,降低后续模型训练的难度。 2. 图像的合成 在语义分割任务中有的时候需要将原图(imput)和标注数据(groudtruth)合成一幅图像&#x…

智能呼叫中心客服系统:企业客户服务的新引擎

在如今商业竞争激烈的大环境下,企业的客户服务需求已不仅仅局限于简单的沟通。随着科技的进步,客户对于高效、智能的交互体验有着更高的期待。为了满足这些需求,智能呼叫中心客服系统应运而生,成为企业提升客户服务质量、优化客户…

鸿蒙开发接口Ability框架:【@ohos.application.Want (Want)】

Want Want模块提供系统的基本通信组件的能力。 说明: 本模块首批接口从API version 8 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import Want from ohos.application.Want; 开发前请熟悉鸿蒙开发指导文档&#xff1…

springboot增删改查

我的记录 RestController RequestMapping("/user") public class UserController {Autowiredprivate UserService userService;GetMapping("/list")public List<User> list(){return userService.list();}//新增PostMapping("/save")publi…

怎样用Python语言实现远程控制两路开关

怎样用Python语言实现远程控制两路开关呢&#xff1f; 本文描述了使用Python语言调用HTTP接口&#xff0c;实现控制两路开关&#xff0c;两路开关可控制两路照明、排风扇等电器。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能…

2024.4.29 Pandas day01 基础语法

pandas是python的一个数据库&#xff0c;在使用数据库的时候需要输入 import pandas as pd 引入&#xff0c; df pd.read.csv(文件路径“&#xff09;&#xff1a;这是利用pandas数据库读取CSV文件的方法&#xff0c;如果读取EXCEL文件或者其他文件&#xff0c;csv文件换成其他…

【强训笔记】day18

NO.1 思路&#xff1a;双指针模拟。to_string将数字转化为字符。 代码实现&#xff1a; class Solution { public:string compressString(string param) {int left0,right0,nparam.size();string ret;while(right<n){while(right1<n&&param[right]param[right…