labelme使用方法

labelme使用方法,第1张

提示:本人只是知识搬运工,感谢各位原创大神的支持,请多访问原创大神的网站并点赞。


labelme

labelme是麻省理工(MIT)的计算机科学和人工智能实验室(CSAIL)研发的图像标注工具,人们可以使用该工具创建定制化标注任务或执行图像标注,项目源代码已经开源。(来源于百度百科)

源代码及示例参考: https://github.com/wkentaro/labelme
release 版本下载链接: https://github.com/wkentaro/labelme/releases

一、安装

哔站上有很多安装和使用视频

二、使用 2.1 单个json文件处理

在包含样本图片和json数据的文件夹中,输入

labelme_json_to_dataset xxx.json -o xxx   
'xxx.json为json文件名,-o代表输出,xxx代表输出的文件夹'
例如:labelme_json_to_dataset 1.json -o 1  

缺点:

  • 速度慢,效率低下。
  • 多张图片处理后类别容易混淆。比如第一张类别有狗、猫,标签分别为1、2;在处理第二张时,类别有飞机、坦克,标签分别也为1、2。这是不合理的。

所以,不用使用这种方式来标注多张图片。

2.2 多个json文件处理

以voc格式为例。

使用labelme2voc.pypython文件
下载链接: https://github.com/wkentaro/labelme

更详细的使用方法可去哔站上找视频观看,基本都会讲到。
有些电脑在运行这个python脚本时可能会报错,如:

usage: labelme2voc.py [-h] [--input_dir INPUT_DIR] [--output_dir OUTPUT_DIR]

需要对脚本进行修正,代码如下。

这也是网上别人的代码,借来用一下,实在找不到原作者了,如果谁知道的话请告知我,我再引用一下。

# -*- coding: utf-8 -*-
#!/usr/bin/env python

from __future__ import print_function

import argparse
import glob
import os
import os.path as osp
import sys
import json
import imgviz
import numpy as np
import PIL.Image

import labelme


def main():
    parser = argparse.ArgumentParser(
        formatter_class=argparse.ArgumentDefaultsHelpFormatter
    )
    parser.add_argument('input_dir', help='input annotated directory')
    parser.add_argument('output_dir', help='output dataset directory')
    parser.add_argument('--labels', help='labels file', required=True)
    parser.add_argument( '--noviz', help='no visualization', action='store_true')
    
    
    args = parser.parse_args()

    if osp.exists(args.output_dir):
        print('Output directory already exists:', args.output_dir)
        sys.exit(1)
    os.makedirs(args.output_dir)
    os.makedirs(osp.join(args.output_dir, 'JPEGImages'))
    os.makedirs(osp.join(args.output_dir, 'SegmentationClass'))
    os.makedirs(osp.join(args.output_dir, 'SegmentationClassPNG'))   
       
  
    if not args.noviz:
        os.makedirs(
            osp.join(args.output_dir, 'SegmentationClassVisualization')
        )
    print('Creating dataset:', args.output_dir)

    class_names = []
    class_name_to_id = {}
    
    
    for i, line in enumerate(open(args.labels).readlines()):
        class_id = i - 1  # starts with -1
        class_name = line.strip()
        class_name_to_id[class_name] = class_id
        if class_id == -1:
            assert class_name == '__ignore__'
            continue
        elif class_id == 0:
            assert class_name == '_background_'
        print(class_id, class_name)   
        class_names.append(class_name)
    class_names = tuple(class_names)
    print('class_names:', class_names)
    
    out_class_names_file = osp.join(args.output_dir, 'class_names.txt')
    with open(out_class_names_file, 'w') as f:
        f.writelines('\n'.join(class_names))
    print('Saved class_names:', out_class_names_file)

    for filename in glob.glob(osp.join(args.input_dir, '*.json')):
        print('Generating dataset from:', filename)

        label_file = labelme.LabelFile(filename=filename)

        base = osp.splitext(osp.basename(filename))[0]
        out_img_file = osp.join(args.output_dir, 'JPEGImages', base + '.jpg')
        out_lbl_file = osp.join(
            args.output_dir, 'SegmentationClass', base + '.npy'
        )
        out_png_file = osp.join(
            args.output_dir, 'SegmentationClassPNG', base + '.png'
        )
        if not args.noviz:
            out_viz_file = osp.join(
                args.output_dir,
                'SegmentationClassVisualization',
                base + '.jpg',
            )

        with open(out_img_file, 'wb') as f:
            f.write(label_file.imageData)
        img = labelme.utils.img_data_to_arr(label_file.imageData)

        lbl, _ = labelme.utils.shapes_to_label(
            img_shape=img.shape,
            shapes=label_file.shapes,
            label_name_to_value=class_name_to_id,
        )
        labelme.utils.lblsave(out_png_file, lbl)

        np.save(out_lbl_file, lbl)

        if not args.noviz:
            viz = imgviz.label2rgb(
                lbl,
                imgviz.rgb2gray(img),
                font_size=15,
                label_names=class_names,
                loc='rb',
            )
            imgviz.io.imsave(out_viz_file, viz)


if __name__ == '__main__':
    main()

感恩各路大神,让我这样的小人物可以做一些想做的事。感恩地,将所学的做一做记录和整理,回馈给大家。
希望对您有所帮助。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/915498.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存