• labelme做标注


    1.anaconda 安装

    anaconda下载地址如下:
    官网

    一直下一步,注意下面这个地方
    在这里插入图片描述

    同时手动配置环境变量,下面三个路径需添加

    Anaconda安装路径

    Anaconda安装路径\Scripts

    Anaconda安装路径\Library\bin
    在这里插入图片描述

    最后测试一下
    cmd
    依次输入

    conda --version
    conda info
    activate
    python
    
    • 1
    • 2
    • 3
    • 4

    均有对应版本显示,说明均安装成功

    2.labelme

    接下来一切在 anaconda 虚拟环境里操作
    打开 anaconda prompt

    输入

     conda create -n labelme python=3.8
    
    • 1

    加载模块的过程中,中间一定要点 Y

    运行结束后,输入

    conda env list
    
    • 1

    查看当前已安装的虚拟环境;

    之后进行激活,并安装相关的库

    conda activate labelme
    
    • 1
    conda install pyqt
    conda install pillow
    
    • 1
    • 2

    安装 labelme

    pip install labelme==3.16.2
    
    • 1

    中途也会需要按[Y/N]? Y

    3.labelme 使用

    每次在 anaconda prompt 中输入下面代码块进行激活

    activate labelme
    
    • 1

    随后打开 labelme

    labelme
    
    • 1

    弹出这个界面
    在这里插入图片描述

    选择多边形标注完之后,并设置标签名字,点击保存。

    4. json文件转图片

    修改两个地方即可使用

    1. 将 35 行的 default 设置为自己的输出文件夹;
    2. 将106行的 json_path 设置为 labelme 保存 json的文件夹;
    #  !/usr/bin/env  python
    #  -*- coding:utf-8 -*-
    # @Time   :  2022.04
    # @Author :  绿色羽毛
    # @Email  :  lvseyumao@foxmail.com
    # @Blog   :  https://blog.csdn.net/ViatorSun
    # @Paper  :
    # @arXiv  :
    # @version:  "1.0"
    # @Note   :
    
    
    
    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(json_file):
        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='/Users/viatorsun/Desktop/Demo/Tomato/')
        args = parser.parse_args()
    
        # json_file = args.json_file
        # json_file = '/Users/viatorsun/Desktop/Demo/Tomato/TomatoJSON/HIMG_20211108_144919_1.json'
    
        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
            out_dir = osp.join(osp.dirname(json_file), out_dir)
        if not osp.exists(out_dir):
            os.mkdir(out_dir)
    
        img_name = osp.basename(json_file)[:-5]
    
        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( lbl, imgviz.asgray(img), label_names=label_names, loc="rb" )
    
        # 原图保存
        Images = osp.join(out_dir, 'PNGImages')
        if not osp.exists(Images):
            os.mkdir(Images)
        PIL.Image.fromarray(img).save(osp.join(Images ,img_name + ".png"))
    
        # 标签保存
        Labels = osp.join(out_dir,'SegmentLabels')
        if not osp.exists(Labels):
            os.mkdir(Labels)
        utils.lblsave(osp.join(Labels, img_name + ".png" ), lbl)
    
        with open(osp.join(out_dir, 'SegmentLabels', img_name + ".txt"), "w") as f:
            for lbl_name in label_names:
                f.write(lbl_name + "\n")
    
    
        # 合成图保存
        Label_viz = osp.join(out_dir, "Label_viz")
        if not osp.exists(Label_viz):
            os.mkdir(Label_viz)
        PIL.Image.fromarray(lbl_viz).save(osp.join(Label_viz, img_name + ".png"))
    
        logger.info("Saved to: {}".format(out_dir))
    
    
    if __name__ == "__main__":
    
        json_path = '/Users/viatorsun/Desktop/Demo/Tomato/TomatoJSON'
    
        for root , dirs , files in os.walk(json_path):
            for file in files:
                if file == '.DS_Store':
                    continue
                json_path = os.path.join(root ,file)
                print(json_path)
                main(json_path)
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116

    参考博客
    anaconda安装
    labelme使用
    json转换

  • 相关阅读:
    MFC列表控件的用法(基于对话框的编程)
    AtCoder abc 136
    散户反着买,别墅靠大海?股票上了龙虎榜还能买吗?
    大疆图像算法面试流程
    JavaScript字面量
    c++之泛型算法
    计算机毕业设计Java校园绿化管理系统(源码+系统+mysql数据库+Lw文档)
    【Dockerfile镜像实战】构建LNMP环境并运行Wordpress网站平台
    【无标题】
    ARM概念
  • 原文地址:https://blog.csdn.net/qq_44790423/article/details/127870439