实现labelme批量json_to_dataset方法

2023-11-17

        labelme可以帮助我们快速的实现Mask-RCNN中数据集json文件的生成,然而还需要我们进一步的将json转成dataset,可以直接在cmd中执行labelme_json_to_dataset.exe C:\Users\Administrator\Desktop\total\1.json(路径),但是这个过程需要我们一个json文件的生成,过程很慢。

一、打开abelme安装目录

在lableme安装目录下有G:\Anaconda\Lib\site-packages\labelme\cli目录,可以看到json_to_dataset.py文件

这里面提供将json转成dataset的代码,所以我们只需要在这个基础上更改即可。

二、代码实现

复制json_to_dataset.py文件,代码更改:

import argparse
import json
import os
import os.path as osp
import warnings
 
import PIL.Image
import yaml
 
from labelme import utils
import base64
 
def main():
    warnings.warn("This script is aimed to demonstrate how to convert the\n"
                  "JSON file to a single image dataset, and not to handle\n"
                  "multiple JSON files to generate a real-use dataset.")
    parser = argparse.ArgumentParser()
    parser.add_argument('json_file')
    parser.add_argument('-o', '--out', default=None)
    args = parser.parse_args()
 
    json_file = args.json_file
    if args.out is None:
        out_dir = osp.basename(json_file).replace('.', '_')
        out_dir = osp.join(osp.dirname(json_file), out_dir)
    else:
        out_dir = args.out
    if not osp.exists(out_dir):
        os.mkdir(out_dir)
 
    count = os.listdir(json_file) 
    for i in range(0, len(count)):
        path = os.path.join(json_file, count[i])
        if os.path.isfile(path):
            data = json.load(open(path))
            
            if data['imageData']:
                imageData = data['imageData']
            else:
                imagePath = os.path.join(os.path.dirname(path), data['imagePath'])
                with open(imagePath, 'rb') as f:
                    imageData = f.read()
                    imageData = base64.b64encode(imageData).decode('utf-8')
            img = utils.img_b64_to_arr(imageData)
            label_name_to_value = {'_background_': 0}
            for shape in data['shapes']:
                label_name = shape['label']
                if label_name in label_name_to_value:
                    label_value = label_name_to_value[label_name]
                else:
                    label_value = len(label_name_to_value)
                    label_name_to_value[label_name] = label_value
            
            # label_values must be dense
            label_values, label_names = [], []
            for ln, lv in sorted(label_name_to_value.items(), key=lambda x: x[1]):
                label_values.append(lv)
                label_names.append(ln)
            assert label_values == list(range(len(label_values)))
            
            lbl = utils.shapes_to_label(img.shape, data['shapes'], label_name_to_value)
            
            captions = ['{}: {}'.format(lv, ln)
                for ln, lv in label_name_to_value.items()]
            lbl_viz = utils.draw_label(lbl, img, captions)
            
            out_dir = osp.basename(count[i]).replace('.', '_')
            out_dir = osp.join(osp.dirname(count[i]), out_dir)
            if not osp.exists(out_dir):
                os.mkdir(out_dir)
 
            PIL.Image.fromarray(img).save(osp.join(out_dir, 'img.png'))
            #PIL.Image.fromarray(lbl).save(osp.join(out_dir, 'label.png'))
            utils.lblsave(osp.join(out_dir, 'label.png'), lbl)
            PIL.Image.fromarray(lbl_viz).save(osp.join(out_dir, 'label_viz.png'))
 
            with open(osp.join(out_dir, 'label_names.txt'), 'w') as f:
                for lbl_name in label_names:
                    f.write(lbl_name + '\n')
 
            warnings.warn('info.yaml is being replaced by label_names.txt')
            info = dict(label_names=label_names)
            with open(osp.join(out_dir, 'info.yaml'), 'w') as f:
                yaml.safe_dump(info, f, default_flow_style=False)
 
            print('Saved to: %s' % out_dir)
if __name__ == '__main__':
    main()

然后替换之前json_to_dataset.py文件。

三、执行与查看

在cmd中cd到label_json_to_dataset.py路径下,然后输入

路径只需要输入到文件夹即可,不需要具体指定json文件。

然后在安装目录下的Scripts路径下可以查看到批量保存的json文件夹。

如果有兴趣,可以看一下python3.7.0+win10安装labelme实现批量操作的。https://blog.csdn.net/yql_617540298/article/details/111041776

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实现labelme批量json_to_dataset方法 的相关文章

随机推荐

  • 《算法图解》读书笔记(二)

    第六章 图 广度优先搜索 1 解决最短路径问题 shortest path problem 的算法被称为广度优先搜索 breadth first search 2 图由节点 node 和边 edge 组成 一个节点可能与众多节点直接相连 这
  • conda 常用命令

    一 虚拟环境创建 删除 查看 创建 创建一个名为env name的虚拟环境 并指定python版本为3 8 且不需要询问 yes or no 直接创建 conda create n env name python 3 8 y 例如 cond
  • 深度学习怎么学?

    推荐这本小白看的 深度学习 从基础到实践 上下册 深度学习 从基础到实践 上下册 深入浅出的讲述了深度学习的基本概念与理论知识 不涉及复杂的数学内容 零基础小白也能轻松掌握 本书从基本概念和理论入手 通过近千张图和简单的例子由浅入深地讲解深
  • 微信小程序 wx:for 点击事件

    为列表的每个小项都添加点击事件 并获得每个项的一些数据 wxml中 lt view wx for array gt lt view bindtap click data name item name gt item name click是点
  • react引入Ant Design

    需要先安装 zeit next css 不然不能识别css文件 然后根目录下创建next config js进行配置 const withCss require zeit next css if typeof require undefin
  • 几种ajax传参数到后台获取的方法

    传参 ajax type post dataType json url DataSourceCheck refreshDataSource data dataSourceId dsId success function data 你的逻辑
  • 10、组合模式

    文章目录 概念 demo 概念 用于树形结构 这种类型的设计模式属于结构型模式 组合模式使得用户对单个对象和组合对象的使用具有一致性 demo import java util ArrayList 1 Component抽象构件角色 定义参
  • 情感分析中的深度学习

    一 情感分析中的基本模型 1 前馈神经网络 FNN 不考虑输入数据具备的任何特定结构常与正则化结合使用 主要解决问题 神经网络有大量隐藏层 隐藏层非常难以训练 梯度消失和过拟合问题 FNN 由一个输入层 一个 浅层网络 或多个 深层网络 因
  • 商品销售管理系统设计论文--毕业设计

    内容摘要 在科学技术日新月异的今天 计算机已逐步渗入各个领域 无论是学习 工作 还是娱乐都普及了计算机的使用 而随着网络的开通 并与Internet连接更让我们社会成为信息化的时代 人们不再需要浪费太多的时间去手工的获得信息 只要做在家中轻
  • 【Mac】电脑维修 换电池之被坑记

    文章目录 1 概述 1 概述 今天遇到一个糟心的事情 我的mac电脑 电池坏了 想换电池 然后以前查了一下 发现要1000块 因为电池没坏透彻 就没去换 这次想去换了 然后当时脑子蒙了 直接去店里 然后问了一下换电池400块 但是要订购电池
  • Hadoop在Windows10下的安装及简单操作

    Hadoop环境搭建 准备工作 首先从网站https www oracle com technetwork java javase downloads jdk8 downloads 2133151 html下载匹配Windows x64的J
  • java游戏主角叶开,逸之老板的天机城与叶开大神女魃墓,决赛场上谁更抢眼?...

    精锐组 逸之老板的天机城与叶开大神女魃墓 决赛场上谁更抢眼 逸之老板150级无级别刀 出场效果到底是不是很一般 吃货分队 逸之的天机城在精锐组也算是佼佼者 扛上150级无级别刀 如虎添翼 在决赛中 变身机甲 对方宝宝根本招架不住 摸一下就飞
  • 微信小程序上线后无法调用后端接口

    我们要在小程序设置里把request请求域名加上保存就可以了
  • 生信入门(二)——使用limma、Glimma和edgeR,RNA-seq数据分析

    生信入门 二 使用limma Glimma和edgeR RNA seq数据分析 文章目录 生信入门 二 使用limma Glimma和edgeR RNA seq数据分析 一 简介 二 数据背景 三 初始配置 四 数据整合 1 数据下载 2
  • Vue使用axios实现跨域请求

    在前后端分离的项目中 关键的一步就是能够进行跨域请求 可以通过前端发送请求访问不同端口的服务器获取数据 为了解决这一问题使用的是axios来实现跨域请求 一 安装axios 使用npm安装 npm install axios save 首先
  • less 命令详解

    less 命令详解 less 与more命令类似 但可以通过翻页键查看上下页的内容 b lt 缓冲区大小 gt 设置缓冲区的大小 e 当文件显示结束后 自动离开 f 强迫打开特殊文件 例如外围设备代号 目录和二进制文件 g 只标志最后搜索的
  • 通过域策略登录脚本收集域用户的登录/注销信息

    1 我们需要在域控制器上新建一个隐藏的共享文件夹 shoujifile 专门用于存放收集到的资料 如下图所示 登录和注销脚本代码如下 收集域用户注销计算机信息 On Error Resume Next strComputer Set lia
  • IDEA中部署git

    IDEA中使用 git 1 在Idea中配置 git 安装好 IntelliJ IDEA后 如果Git 安装在默认路径下 那么 idea 会自动找到 git 的位置 如果更改了 Git 的安装位置则需要手动配置下Git 的路径 选择 Fil
  • C# 语音识别

    在 NET4 0中 我可以借助System Speech组件让电脑来识别我们的声音 以上 当我说 你好 显示 Darren 我说 age 显示 永远21 如何做呢 首先要开启电脑的语音识别功能 右键电脑右下方的扬声器 选择 录音设备 点击默
  • 实现labelme批量json_to_dataset方法

    labelme可以帮助我们快速的实现Mask RCNN中数据集json文件的生成 然而还需要我们进一步的将json转成dataset 可以直接在cmd中执行labelme json to dataset exe C Users Admini