Labelme库的json2dataset函数改写

2023-10-26

可用于方便的将json格式的标注文件转换为png、jpg等image文件。

如果是conda环境的话,pip install labelme之后,文件位置是:./envs/{ENV_NAME}/lib/python3.6/site-packages/labelme/cli/json_to_dataset.py

主要修改标注名到灰度值的映射字典label_name_to_value,无标注的默认为"_background_",还可以自由添加输出路径等。img为原图,lbl为转换后的灰度图,lbl_vis为混合原图与灰度图的可视化图。

import argparse
import base64
import json
import os
import os.path as osp
import imgviz
import PIL.Image
from labelme.logger import logger
from labelme import utils

def main():

    parser = argparse.ArgumentParser()
    parser.add_argument("json_file")
    parser.add_argument("-o", "--out", default=None)
    args = parser.parse_args()

    json_file = args.json_file

    data = json.load(open(json_file))
    imageData = data.get("imageData")

    if not imageData:
        imagePath = os.path.join(os.path.dirname(json_file), 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,'60':1}
    for shape in sorted(data["shapes"], key=lambda x: x["label"]):
        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
    lbl, _ = utils.shapes_to_label(
        img.shape, data["shapes"], label_name_to_value
    )

    label_names = [None] * (max(label_name_to_value.values()) + 1)
    for name, value in label_name_to_value.items():
        label_names[value] = name

    lbl_viz = imgviz.label2rgb(
        label=lbl, img=imgviz.asgray(img), label_names=label_names, loc="rb"
    )

    new_img_dir = '../img'
    new_gt_dir = '../gt'
    new_visable_dir = '../visable'
    name = json_file.split('/')[-1].split('.')[0]
    PIL.Image.fromarray(img).save(osp.join(new_img_dir, name+".png"))
    utils.lblsave(osp.join(new_gt_dir, name+".png"), lbl)
    PIL.Image.fromarray(lbl_viz).save(osp.join(new_visable_dir, name+".png"))

if __name__ == "__main__":
    main()

如下,通过python运行命令行批量调用,不过速度偏慢。

root = '../LabelJson'

FileNameList = os.listdir(root)
a = 0
for i in tqdm(range(len(FileNameList))):
    if(os.path.splitext(FileNameList[i])[1] == ".json"):   # 判断当前文件是否为json文件
        json_file = os.path.join(root,FileNameList[i])
        os.system("labelme_json_to_dataset " + json_file)

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

Labelme库的json2dataset函数改写 的相关文章

随机推荐

  • 深度学习和因果如何结合?北交最新《深度因果模型》综述论文,31页pdf涵盖216篇文献详述41个深度因果模型...

    来源 专知 北京交通大学最新 深度因果模型 综述论文 31页pdf涵盖216页pdf详述41个深度因果模型 值得关注 因果关系概念在人类认知中起着重要作用 在过去的几十年里 因果推理在计算机科学 医学 经济学和教育等许多领域都得到了很好的发
  • 关于504报错的解决方法之一

    项目场景 记录一些工作遇见的bug 项目场景 使用命令 npm start 运行代码打开网页 报504 打开失败 问题描述 提示 这里描述项目中遇到的问题 使用命令 npm start 运行代码打开网页 报504 打开失败 原因分析 504
  • 运行java程序报java/lang/NoClassDefFoundError: java/lang/Object

    今天直接将解压后的jre文件放到linux上 执行java命令 报如下错误 Error occurred during initialization of VM java lang NoClassDefFoundError java lan
  • 【头歌】Hadoop开发环境搭建

    本来不想写这个了 就为了搞这实验截图 又得敲一遍这个代码 代码量真的大 我真的是吐了呀 MD 大家反正写过 直接粘贴是最佳选择 没必要自己再做一遍 第1关 配置开发环境 JavaJDK的配置 任务描述 本关任务 配置 JavaJDK 相关知
  • Cadence Allegro 17.4学习记录开始00

    目录 Cadence Allegro 17 4学习记录绪论 第一 先来说说Cadence Allegro 17 4的原因 第二 简单介绍这个EDA软件Cadence Allegro 17 4 第三 学习规划 1 Cadence Allegr
  • java ssh项目 定时任务时,jdbc线程池耗尽问题

    场景 在ssh项目中 用spring自带的schedule创建了个定时任务 服务启动时自动调用任务 在任务执行一段时间后 报了 xxx active 150 maxActive 150错误 原因 spring自带的schedule创建的定时
  • 前端面试题精心整理(一)-TypeScript

    文章目录 TypeScript相关问题及知识点 Q1 ts中type和interface的区别 A1 有相同点与不同点 具体内容如下 Q2 ts中interface和class的区别 分别什么时候使用 A2 interface和class都
  • 运放专题:电压电流转换

    电压电流转换 电压 电流转换即V I转换 是将输入的电压信号转换成满足一定关系的电流信号 转换后的电流相当一个输出可调的恒流源 其输出电流应能够保持稳定而不会随负载的变化而变化 一般来说 电压电流转换电路是通过负反馈的形式来实现的 可以是电
  • python程序设计基础实验题_Python程序设计实验报告:实验五 综合运用三种基本结构进行程序设计...

    实验五 综合运用三种基本结构进行程序设计 综合性实验 班级 物流191 姓名 韩晶晶 学号 3190505140 指导老师 修宇 成绩 日期 2020 4 25 实验目的 1 进一步掌握选择与循环结构程序设计的方法和技巧 2 综合运用三种基
  • Docker Search 异常:Error response from daemon: Get https://index.docker.io/v1/search?xxx

    docker search tomcat Error response from daemon Get https index docker io v1 search q tomcat n 25 dial tcp lookup index
  • KGDB调试内核

    1 环境 Ubuntu 20 04 VMware Worksation 16 Player Linux Kernel 5 4 0 2 设置虚拟机 2 1 准备两台虚拟机 准备一台虚拟机 然后克隆一台虚拟机 下面以左边为客户端和右边为目标机展
  • phpstorm 自动折叠注释

    用了swagger后 注释得写好大一堆 超过一百行的注释都很常见 看起来心好累 phpstorm 能不能自动折叠那些注释呢 网上搜索不到办法 自己尝试去设置了找了下 原来还真有这个功能 设置方法如下 在设置搜索 fold 勾上 Docume
  • Self-study Python Fish-C Note-4 P20-P26 (part1)

    python 中的列表 Part 1 本文主要讲解了python中列表的使用 本文为自学B站上鱼C的python课程随手做的笔记 如有问题 欢迎大家批评指正 原视频链接 https www bilibili com video BV1c44
  • 排序方法与初始排列次序的关系

    元素的移动次数与关键字的初始排列次序无关的是 基数排序 元素的比较次数与初始序列无关是 选择排序 折半插入排序 算法的时间复杂度与初始序列无关的是 选择排序 堆排序 归并排序 基数排序 算法的排序趟数与初始序列无关的是 插入排序 选择排序
  • TongWeb上应用部署方式

    TongWeb上可部署的web应用结构可分为两种 1 打成war包形式的文件 2 以文件夹目录方式的web应用 这两种方式必须要有WEB INF目录才是一个合法web应用结构 方可部署 特殊情况 某些应用是在apache nginx上跑的静
  • linux中管道的概念,浅谈Linux管道

    管道 pipe 是一个我们在学习Linux命令行的时候就会引入的一个很重要的概念 管道是UNIX环境中历史最悠久的进程间通信方式 从本质上说 管道也是一种文件 也是遵循UNIX的 一切皆文件 的原则设计的 虽然实现形态上是文件 但是管道本身
  • vue3的自定义指令API

    vue3中指令api和组件保持一致 具体表现在 bind beforeMount inserted mounted beforeUpdate new 元素自身更新前调用 和组件生命周期钩子很像 update removed 和updated
  • 【vue】vue-element-admin安装npm install报错

    1 从gitee上拉取vue element admin工程文件 2 删除 package json文件里面的tui editor依赖 强调是删除不是注释掉 3 管理员权限运行cmd 目录进入到 vue element admin目录 4
  • 网络基础——OSI模型

    目录 一 OSI七层模型的提出 二 OSI七层模型介绍 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 三 TCP IP协议 部分重要协议使用对应端口 四 数据封装过程 五 不同层级与设备的对应关系 一 OSI七层模型的提出 O
  • Labelme库的json2dataset函数改写

    可用于方便的将json格式的标注文件转换为png jpg等image文件 如果是conda环境的话 pip install labelme之后 文件位置是 envs ENV NAME lib python3 6 site packages