labelme 语义分割标注工具的安装和使用

环境:ubuntu18.04 (自带python2.7和python3.6)+conda(3.7降级至3.6,即覆盖安装python3.6)

本人采取ubuntu 安装方式:
配置pip3:
sudo apt install pyhton3-pip
安装labelme:
sudo apt-get install python3-pyqt5 # PyQt5
sudo pip3 install labelme
测试
终端输入:labelme 打开labelme,成功
在使用过程中出现
ImportError: No module named tkinter 错误
解决方法:python3 安装 TK 包
sudo apt-get install python-tk

使用:
1.终端输入 labelme,即打开软件,点击“open”打开需要标注的图像,选择对目标区域进行标注。标注完成后点击save,产生一个 json文件。进入labelme安装目录,因为在终端下安装的,所以我的在/usr/local/bin/,或者自定义保存路径
2.可视化 .json文件
labelme_draw_json 《》.json

或 py 程序运行:
采用下面的程序labelme_draw_json.py

import argparse
import json
import matplotlib.pyplot as plt

from labelme import utils


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('json_file')
    args = parser.parse_args()

    json_file = args.json_file

    data = json.load(open(json_file)) # 加载json文件

    img = utils.img_b64_to_array(data['imageData']) # 解析原图片数据
    lbl, lbl_names = utils.labelme_shapes_to_label(img.shape, data['shapes']) # 解析'shapes'中的字段信息,解析出每个对象的mask与对应的label   lbl存储 mask,lbl_names 存储对应的label
    # lal 像素取值 0、1、2 其中0对应背景,1对应第一个对象,2对应第二个对象
    # 使用该方法取出每个对象的mask mask=[] mask.append((lbl==1).astype(np.uint8)) # 解析出像素值为1的对象,对应第一个对象 mask 为0、1组成的(0为背景,1为对象)
    # lbl_names  ['background','cat_1','cat_2']

    captions = ['%d: %s' % (l, name) for l, name in enumerate(lbl_names)]
    lbl_viz = utils.draw_label(lbl, img, captions)

    plt.subplot(121)
    plt.imshow(img)
    plt.subplot(122)
    plt.imshow(lbl_viz)
    plt.show()
    
    #####################################################################
    #以下均可打印出来
    data['imageData'] # 原图数据 str
    data['shapes'] # 每个对像mask及label  list
    len(data['shapes']) # 返回对象个数 int
    print('label1:',data['shapes'][0]['label']) # 返回第一个对象的标签 str
    data['shapes'][0]['points'] # 返回第一个对象的边界点 list
    data['shapes'][0]['points'][0] # 返回第一个对象的边界点第一个点 list

    data['imagePath'] # 原图路径 str
    data['fillColor'] # 填充颜色(边界内部) list
    data['lineColor'] # 边界线颜色  list


if __name__ == '__main__':
    main()

终端下运行:python labelme_draw_json.py《》.json

3.convert to dataset:
labelme_json_to_dataset 你的路径/你的json文件名.json //这里的文件名根据自己的实际情况更改
即可得到一个文件夹,有五个文件,分别是:*.png, info.yaml , label.png, label_viz.png,label_names.txt。 其中label.png和info.yaml是我们需要用到的,label.png相当于mask 文件。

4.查看label.png图像,可以利用/usr/local/bin/labelme_draw_label_png
终端下运行:labelme_draw_label_png 《》label.png
或者py 加载

>>> import numpy as np
>>> import PIL.Image

>>> label_png = 'apc2016_obj3_json/label.png'
>>> lbl = np.asarray(PIL.Image.open(label_png))
>>> print(lbl.dtype)
dtype('uint8')
>>> np.unique(lbl)
array([0, 1, 2, 3], dtype=uint8)
>>> lbl.shape
(907, 1210)

参考:
labelme 作者:https://github.com/wkentaro/labelme
使用参考:https://www.e-learn.cn/content/qita/781190
:https://blog.csdn.net/shwan_ma/article/details/77823281

你可能感兴趣的:(标注工具)