格式转化——Labelme标注好的json文件批量转为png(标签)文件(物体为红色,背景为黑色)和jpg原图

作用如题目,批量将标注好的json文件转成png标签,jpg原图,其中标签时红黑图。

代码如下:

python 复制代码
import argparse
import base64
import json
import os
import os.path as osp
import imgviz
import PIL.Image
import yaml
from labelme.logger import logger
from labelme import utils
 
'''single json file'''
def 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('--jsonfiles', nargs='?', const=True, default="datasets//before", help='resume most recent training') #设置输入路径  将default里面的路径转成json文件下的路径
    parser.add_argument("-o", "--out", default="datasets//png")  #设置输出路径 default里面的路径改为要存放标签png和原图jpg的路径
    args = parser.parse_args()
    import glob
    jsonfiles = glob.glob(args.jsonfiles+"/*.json")
    print(jsonfiles)
    for json_file in jsonfiles:
        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)
 
        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
        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, image=imgviz.asgray(img), label_names=label_names, loc="rb"
        )
 
        label_name  = json_file.split('\\')[-1].replace('.json','.png')
        image_name  = json_file.split('\\')[-1].replace('.json','.jpg')
        PIL.Image.fromarray(img).save(osp.join(out_dir, image_name))
        utils.lblsave(osp.join(out_dir, label_name), 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")
 
        # 生成info.yaml文件
        # logger.warning('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)
 
        logger.info("Saved to: {}".format(out_dir))
 
if __name__ == "__main__":
    main()
相关推荐
浪兎兎16 分钟前
【Java Web】Servlet + JSP 笔记
java·前端·servlet
Patrick_Wilson1 小时前
iOS Safari Clipboard API 权限弹窗问题
前端·ios·safari
OpenTiny社区2 小时前
Naive UI × GenUI SDK:自定义物料库搭建实战
前端·ai编程
kyriewen2 小时前
我拿 4 个真实前端任务试了 GLM-5.3 Flash:代码一遍跑通,账单 4 分钱
前端·程序员·ai编程
IT_陈寒2 小时前
Vue的响应式更新有时候真的不听话
前端·人工智能·后端
风骏时光牛马2 小时前
AI编程常见问题梳理与要点解析
前端
前端snow2 小时前
ai agent -- LCEL 汇总
前端
计算机魔术师3 小时前
NVIDIA 季度营收指引达 1080 亿美元,首次突破单季千亿大关
前端
数据狐(Datafox)3 小时前
京东商品列表API技术解析与落地应用(含标准 JSON 示例)
java·大数据·前端·人工智能·python·数据分析·json
风萧何3 小时前
架构艺术,是权衡的艺术。
前端·javascript·架构