前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >labelme使用教程_labelme和labelimg区别

labelme使用教程_labelme和labelimg区别

作者头像
全栈程序员站长
发布2022-10-01 15:54:06
2.1K0
发布2022-10-01 15:54:06
举报

大家好,又见面了,我是你们的朋友全栈君。

LabelMe 可用于实例分割,语义分割,目标检测,分类任务的数据集标注工作。

在线标注版本:http://labelme2.csail.mit.edu/Release3.0/index.php?message=1 python 版本:https://github.com/wkentaro/labelme

官方文档:

分类标注:Classification 目标检测标注:Object Detection 语义分割标注:Semantic Segmentation 实例分割标注:Instance Segmentation 视频标注:Video Annotation 其他形式标注:LabelMe Primitives

python版本使用

使用环境:Anaconda python版本:2.7 / 3.6

1. 安装

代码语言:javascript
复制
# python2.7版本安装
conda create --name=labelme python=2.7
source activate labelme
# conda install -c conda-forge pyside2
conda install pyqt
pip install labelme
# if you'd like to use the latest version. run below:
# pip install git+https://github.com/wkentaro/labelme.git

# python3.6版本安装
conda create --name=labelme python=3.6
source activate labelme
# conda install -c conda-forge pyside2
# conda install pyqt
pip install pyqt5  # pyqt5 can be installed via pip on python3
pip install labelme

2. 使用

代码语言:javascript
复制
# 查看labelme使用方法
labelme --help
(labelme) @supermicro:~$ labelme --help
usage: labelme [-h] [--version] [--reset-config]
[--logger-level { 
debug,info,warning,fatal,error}]
[--output OUTPUT] [--config CONFIG_FILE] [--nodata]
[--autosave] [--nosortlabels] [--flags FLAGS]
[--labelflags LABEL_FLAGS] [--labels LABELS]
[--validatelabel { 
exact,instance}] [--keep-prev]
[--epsilon EPSILON]
[filename]
positional arguments:
filename              image or label filename
optional arguments:
-h, --help            show this help message and exit
--version, -V         show version
--reset-config        reset qt config
--logger-level { 
debug,info,warning,fatal,error}
logger level
--output OUTPUT, -O OUTPUT, -o OUTPUT
output file or directory (if it ends with .json it is
recognized as file, else as directory)
--config CONFIG_FILE  config file (default: /home/zyy/.labelmerc)
--nodata              stop storing image data to JSON file
--autosave            auto save
--nosortlabels        stop sorting labels
--flags FLAGS         comma separated list of flags OR file containing flags
--labelflags LABEL_FLAGS
yaml string of label specific flags OR file containing
json string of label specific flags (ex. { 
person-\d+:
[male, tall], dog-\d+: [black, brown, white], .*:
[occluded]})
--labels LABELS       comma separated list of labels OR file containing
labels
--validatelabel { 
exact,instance}
label validation types
--keep-prev           keep annotation of previous frame
--epsilon EPSILON     epsilon to find nearest vertex on canvas
  • -h–help 显示帮助信息
  • -V–version 显示 labelme 版本号
  • –output:指定输出标注文件的保存路径,如果路径以 .json 结尾,则保存为一个 .json 文件,否则默认保存为文件夹形式
  • –labels:用于指定标签名称,可以是用逗号分隔的 label list,也可以是包含标签的 txt 文件
  • –nodata:不保存图像到 JSON 文件

3. 分割任务标注示例

终端直接输入:

代码语言:javascript
复制
# 直接打开labelme
labelme
  • open:打开某一张图片
  • openDir:打开某一文件夹,加载其目录下的所有图片

通过 open 读取图片,选择 create polygons 手动进行勾画,全部完成后保存为 json 文件(在当前目录下):

在这里插入图片描述
在这里插入图片描述

右键单击可以选择不同的标注方式,比如 polygons 用于分割,rectangle 用于检测。

如果是实例分割,一个图像中有多只猫,标签的命名规则为:cat1、cat2 …,如果是语义分割就不用区分了。

在这里插入图片描述
在这里插入图片描述

labelme 可以进行多类别标注,Label List 显示当前已有的类别,Polygon Labels 显示当前已标注的区域,通过勾选 Polygon Labels 前面的 “√”,可以选择显示特定的分割区域:

在这里插入图片描述
在这里插入图片描述

要得到 label 文件,需要将 json 转换为单通道的 image,终端输入命令:

代码语言:javascript
复制
# 进入json文件保存目录
cd /path/to/your/jsonfile
# 转换
labelme_json_to_dataset <文件名>.json
# 比如
labelme_json_to_dataset cat.1.json

将在当前目录下得到一个文件夹 cat_1_json,包括四个文件:

  • img.png:原始图像
  • label.png:标签,uint8
  • label_viz.png:可视化的带标签图像
  • label_names.txt:记录了标签的名称

img.png

img.png
img.png

label.png:

label.png
label.png

label_viz.png:

label_viz.png
label_viz.png

4. 其他说明

(1)启动 labelme 的方式:

代码语言:javascript
复制
# 直接打开labelme
labelme
# 打开某个文件夹,加载该文件夹下及其子文件夹下的所有图片
labelme path/to/imgfile/
# 直接打开指定的图片
labelme cat.1.jpg
# 标注保存为json文件同时自动关闭gui窗口
labelme cat.1.jpg -O cat.1.jpg.json
# 指定label list
labelme cat.1.jpg \
--labels cat,eye
# 或者传入文件形式的label list
--labels labels.txt

(2)将 JSON 文件转换为 image 和 label

代码语言:javascript
复制
# 在当前目录下生成一个文件夹cat_1_json
labelme_json_to_dataset cat.1.json
# 指定生成文件夹的名字为cat1
labelme_json_to_dataset cat.1.json -o cat1

(3)可视化 json 文件:

代码语言:javascript
复制
# 终端输入
labelme_draw_json cat.1.json
在这里插入图片描述
在这里插入图片描述

5. 加载标签png

label.png 用 scipy.misc.imread 或者 skimage.io.imread 读取可能会出错,推荐用 PIL.Image.open 读取:

代码语言:javascript
复制
>>> import numpy as np
>>> import PIL.Image
>>> label_png = 'imgs/cat1/label.png' # 设置标签文件路径
>>> lbl = np.asarray(PIL.Image.open(label_png))
>>> print(lbl.dtype)
dtype('uint8')
>>> np.unique(lbl)
array([0, 1, 2], dtype=uint8)
>>> lbl.shape
(280, 300)

查看 label.png:

代码语言:javascript
复制
# 终端输入
labelme_draw_label_png imgs/cat1/label.png
在这里插入图片描述
在这里插入图片描述

6. 生成VOC格式的标签数据

在下载的 labelme 的 zip 包里,路径 labelme/examples/semantic_segmentation 下,data_annotated 是原图和对应的 JSON 文件,data_dataset_voc 是 voc 格式的输出结果,labelme2voc.py 是转换的主函数,labels.txt 是标签类别。

1)文件组织形式如下:

  • *_annotated 存放原图和已经生成的对应 JSON 文件
  • 将 labelme 工程文件下的 labelme2voc.py 复制过来
  • 自己写一个 *.txt 文件,内容是分割的标签,最前面加上 __ignore___background_
labels.txt 文件内容
labels.txt 文件内容
文件组织格式
文件组织格式
文件组织格式
文件组织格式

2)转换为voc数据格式:

代码语言:javascript
复制
# 终端输入
./labelme2voc.py [图像路径] [voc文件夹名称] --labels [label list]
# 比如
./labelme2voc.py cat_annotated cat_dataset_voc --labels labels.txt

在当前目录下自动生成 cat_dataset_voc 文件夹(转换前确保不要有重名文件夹,否则会报错)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

cat_dataset_voc 文件夹内容:

在这里插入图片描述
在这里插入图片描述

转换为 COCO 数据格式,同样的套路:

代码语言:javascript
复制
./labelme2coco.py data_annotated data_dataset_coco --labels labels.txt

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/194661.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年9月12日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 官方文档:
  • python版本使用
    • 1. 安装
      • 2. 使用
        • 3. 分割任务标注示例
        • 4. 其他说明
          • 5. 加载标签png
            • 6. 生成VOC格式的标签数据
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档