labelme生成的json文件转换png图片

实现单个json_to_dataset转换的方法

1、在labelme的安装目录下,\绿色部分\Lib\site-packages\labelme\cli

找不到的可以win+r   输入where labelme,找到labelme.exe位置。如下图绿色部分就能找到前面的位置(不知道怎么描述了)。

2、在这里输入cmd回车

出现下面图片。然后如果你的labelme是安装在conda环境中的,需要激活进入(activate 环境名)环境。

3、输入python  json_to_dataset.py -o   红色  绿色

红色是你要输出标签图像文件夹的地址

绿色是你准备好的json文件的地址,需要准确到   \ 文件名.json

实现多个json文件转换

1、需要更改一下图一红色箭头指的代码(json_to_dataset.py)

2、将下面代码复制进去即可,同时完成单个转换中的第二步骤和第三步骤即可。注意这里是多个json文件转换,第三步json文件地址只需要到文件夹即可。

import argparse
import base64
import json
import os
import os.path as osp
import glob

import imgviz
import PIL.Image
import numpy as np

from labelme import utils
from labelme.logger import logger


def main():
    logger.warning(
        "DEPRECATED: This script will be removed in the near future. "
        "Please use `labelme_export_json` instead."
    )
    logger.warning(
        "NOTE: This script is aimed to demonstrate how to convert a JSON file "
        "to a single image dataset. so it won't handle multiple JSON files to "
        "generate a real-use dataset."
    )

    parser = argparse.ArgumentParser()
    parser.add_argument("json_file", help="Path to JSON file or directory containing JSON files")
    parser.add_argument("-o", "--out", default=None, help="Path to output directory")
    args = parser.parse_args()

    # 如果提供的路径是一个目录,处理目录下的所有 JSON 文件
    if os.path.isdir(args.json_file):
        json_files = glob.glob(os.path.join(args.json_file, "*.json"))
    else:
        json_files = [args.json_file]

    for json_file in json_files:
        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_value

        # 将形状转换为标签
        # 注意这里对 shapes_to_label 的调用进行了修改
        lbl = utils.shapes_to_label(img.shape, data["shapes"], label_name_to_value)
        if isinstance(lbl, tuple):
            lbl = lbl[0]

        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(
            lbl, imgviz.asgray(img), label_names=label_names, loc="rb"
        )

        base_name = os.path.splitext(os.path.basename(json_file))[0]
        out_dir = args.out if args.out is not None else osp.join(osp.dirname(json_file), base_name)
        if not osp.exists(out_dir):
            os.makedirs(out_dir)

        # 保存原始图像
        PIL.Image.fromarray(img).save(osp.join(out_dir, f"{base_name}.png"))

        # 保存标签
        np.save(osp.join(out_dir, f"{base_name}_label.npy"), lbl)

        # 保存标签为图像
        utils.lblsave(osp.join(out_dir, f"{base_name}_label.png"), lbl)

        # 保存可视化标签
        PIL.Image.fromarray(lbl_viz).save(osp.join(out_dir, f"{base_name}_label_viz.png"))

        # 保存标签名称
        with open(osp.join(out_dir, f"{base_name}_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()

结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值