1.写在前面

最近用到标注好的数据训练神经网络,用labelme标注好之后生成.json文件,我要实现的功能是目标分割,需要把.json文件转为VOC格式的数据。但是.json文件太多,于是在网上找一下能够批量处理json转图像的代码。挺好找的,但是按照别人的方法改变anaconda安装路径下的envs/labelme环境/Lib/site-packages/labelme/cli/下的json_to_dataset.py会报错,然后又搜一下错在哪里,一时半会解决不了。又找了一些转换代码,发现报错地方类似,难道在别人电脑上能正常运行,在我这不行?最后,经过多次尝试修改调试,终于能正常在我电脑上运行批量转换,不确定这种调试后的方法是否通用。记录一下,谨防忘记。

2.成功运行的json_to_dataset.py完整代码

代码在这篇博文基础上进行修改:(1条消息) labelme批量json转png数据集教程_脱发小白龙的博客-CSDN博客_labelme json文件转换https://blog.csdn.net/qq_42930154/article/details/123121779

'''
修改后的json_to_dataset文件,直接复制替换你自己原始的json_to_dataset,建议保存一下原版
'''
import argparse
import base64
import json
import os
import os.path as ospimport imgviz
import PIL.Imagefrom labelme.logger import logger
from labelme import utilsdef main():"""logger.warning("This script is aimed to demonstrate how to convert the ""JSON file to a single image dataset.")logger.warning("It won't handle 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_fileprint(osp.dirname(json_file))if osp.isdir(osp.join(osp.dirname(json_file), 'json_data')) is False:os.mkdir(osp.join(osp.dirname(json_file), 'json_data'))else:print("文件已存在")if args.out is None:out_dir = osp.basename(json_file).replace(".", "_")out_dir1 = osp.join(osp.dirname(json_file), 'json_data')out_dir = osp.join(out_dir1, out_dir)print(out_dir)print("#" * 10)else:out_dir = args.outif not osp.exists(out_dir):os.mkdir(out_dir)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}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_valuelbl = 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] = namelbl_viz = imgviz.label2rgb(lbl, imgviz.asgray(img), label_names=label_names, loc="rb")PIL.Image.fromarray(img).save(osp.join(out_dir, "img.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")logger.info("Saved to: {}".format(out_dir))if __name__ == "__main__":main()

修改地方:删除lbl后的“,-”  ,只让lbl接受函数结果,要不然会报返回值与接受值不匹配的错误,ValueError: too many values to unpack (expected 2)。这类错误出现原因是比如返回三个值,但你用2个变量接受。

参考博文中还有其他后续方便的操作,这里不再赘述,可以先试一下参考博文的操作,如果不能正常转换,按照我做的改进进行尝试,也许就能work。使用方法参考博文也有哦。

LabelMe标注的.json文件批量转Dataset,通过查询到多种代码无法在我电脑上正常工作,发现他们有共同的报错,于是修改后能正常工作。相关推荐

  1. Python修改图片格式以及相对应labelme标注的Json文件

    Python修改图片格式以及相对应labelme标注的Json文件 前言 前提条件 相关介绍 实验环境 Python修改图片格式以及相对应labelme标注的Json文件 代码实现 输出结果 前言 本 ...

  2. 【深度学习之路记录02】python代码批量修改Labelme标注的json文件(删除标签、修改标签名)

    代码参考:https://blog.csdn.net/qq_44442727/article/details/112785978 创建自己的数据集时,经常需要一些调整,比如说修改某一批文件中已经标好的 ...

  3. labelme生成的json文件批量转化为label图片

    修改 C:\ProgramData\Anaconda3\Lib\site-packages\labelme\cli\json_to_dataset.py 为 import argparse impor ...

  4. labelme标注的json文件转化成ICDAR2015格式

    在转换之前一定要备份备份备份备份备份!!!!!!!!!!!!!!!!!! # -*- coding: utf-8 -*-import os import jsondef jsonTotxt(jsonf ...

  5. labelme标注的json标签转txt格式

    在机器学习训练中常常会有不同格式的标签之间的转换,本次是将json标签格式转化成txt格式,在此记录一下. 1.labelme标注: 2.json文件: {"version": & ...

  6. python批量修改labelme(COCO)标注的json文件的label标签名称

    python批量修改labelme(COCO)标注的json文件的label标签名称 在深度学习的实践中,使用labelme标注软件标注好数据集之后,如果标签的名称标注错误或者需要修改,庞大的数据量依 ...

  7. Labelme标注的json数据转化为coco格式的数据

    Labelme标注的json数据转化为coco格式的数据 1. 转化方法一 2. 转化方法二 1. 转化方法一 import os import json import numpy as np imp ...

  8. json文件批量转为txt文件

    json文件批量转为txt文件 1 批量json标注文件: 2 json所对应的各个图片: 3 每个json文件内容: [{"type": 1,"x": 116 ...

  9. 将labelme生成的json文件转换成png图

    将labelme生成的json文件转换成png图 我图片的每个标记只有一类,所以转换成png图后,png只有0和1像素,因为单通道图的范围是0~255,0和1的区别很小,下面的程序可以对你标记的mas ...

最新文章

  1. java编程 linux_Linux下java编程
  2. python3安装步骤mac-Mac安装Python3
  3. P1803 凌乱的yyy / 线段覆盖
  4. pytorch选出数据中的前k个最大(最小)值及其索引
  5. ajax respon有数据,Ajax怎么通过response在后台传递数据?(附代码)
  6. 海洋CMS仿爱美剧网站模板源码
  7. Pandas Index对象
  8. 如何写出高质量的shell脚本---------值得注意的地方
  9. 【数位dp】HDU3555:Bomb(入门题目)
  10. Java开发实战经典学习记录(一)
  11. myBatis约束文档
  12. 【超详细】R语言实现各种数据可视化
  13. 区块链知识转载博文1: 共识算法之争(PBFT,Raft,PoW,PoS,DPoS,Ripple)
  14. oracle判断数字为复数,oracle毛病(二) (转)
  15. About Contest and Trainning
  16. 厦门市委书记走访图扑等多家软件企业调研元宇宙产业发展情况
  17. csp-202203
  18. 你即将拥有HDMI2.1,纯光纤HDMI最高支持72Gbps试用体验
  19. 学习就是这样一条时而郁郁寡欢,时而开怀大笑的路
  20. 企业微信怎么扫描名片加好友?企业微信名片如何统计好友添加情况?

热门文章

  1. python求助神器_【python从零开始(被称之为神器的装饰器)】- 环球网校
  2. php信鸽针对别名,【经验】阿翁:信鸽回血留种公式(图)
  3. 转:高手速成android开源项目【View篇】 .
  4. 【C语言实现井字棋及电脑落子优化】
  5. OpenCV入门到进阶:实战三大典型项目(更新至12) IT自学视频教程
  6. 【培训实验记录】锐捷SDN交换机和控制器部署
  7. Linux基础与部署
  8. 计算机云计算服务外包,云计算上的三类外包计算
  9. 基因编辑c语言,基因编辑为何失败?那是因为Cas9霸着C位
  10. HDU 1567(2006)