从标注小白到专家:Labelme图像标注全流程实战指南
Labelme是一款基于Python的图像多边形标注工具(Image Polygonal Annotation with Python),支持多边形、矩形、圆形、线条、点和图像级标记等多种标注形式。无论是语义分割、目标检测还是图像分类任务,Labelme都能提供高效直观的标注解决方案。本文将从安装到高级应用,带你全面掌握这款强大工具。
核心功能概览
Labelme提供了丰富的标注功能,满足不同计算机视觉任务需求:
- 多样化标注工具:支持多边形(Polygon)、矩形(Rectangle)、圆形(Circle)、线条(Line)和点(Point)等基本形状标注
- 图像分类标注:通过标记(Flag)功能实现整图分类或筛选
- 视频标注支持:专为序列图像设计的视频标注工作流
- 自动化处理:支持标注文件转VOC/COCO等标准数据集格式
- 自定义配置:可预设标签列表、自动保存、标签验证等个性化设置
快速安装指南
方法一:Python pip安装(推荐)
最简单的安装方式是使用pip:
pip install labelme
如需安装最新开发版本,可直接从仓库安装:
pip install git+https://gitcode.com/gh_mirrors/la/labelme
方法二:独立可执行程序
对于非开发用户,可选择下载独立可执行程序,无需安装Python环境。
方法三:Linux系统包管理器
部分Linux发行版可通过系统包管理器安装:
# Ubuntu/Debian示例
sudo apt-get install labelme
基础操作教程
启动标注工具
安装完成后,在终端输入以下命令启动Labelme:
labelme
单图像标注
以教程示例图像为例,执行以下命令开始标注:
cd examples/tutorial
labelme apc2016_obj3.jpg
这将打开标注界面,你可以使用左侧工具栏选择标注工具,在图像上绘制区域并添加标签。
批量标注目录
要标注整个目录中的所有图像,使用以下命令:
labelme data_annotated/ --labels labels.txt
其中labels.txt是包含预设标签的文本文件,格式为每行一个标签名。
命令行参数详解
常用参数说明:
--output:指定标注文件保存位置--config:使用自定义配置文件--labels:指定标签列表文件--nodata:不在JSON中存储图像数据(仅保存路径)--nosortlabels:保持标签显示顺序与定义一致
完整参数说明可通过labelme --help查看。
标注流程详解
单个图像标注步骤
- 打开图像:通过
File > Open或命令行参数指定图像 - 选择工具:在左侧工具栏选择合适的标注工具
- 绘制区域:在图像上绘制需要标注的区域
- 添加标签:完成绘制后输入标签名称
- 保存结果:标注文件将保存为JSON格式,包含图像路径、形状、标签等信息

标注文件结构解析
标注结果以JSON格式保存,包含以下关键信息:
version:标注格式版本flags:图像级标记(用于分类)shapes:标注形状列表,每个形状包含:label:标签名称points:坐标点列表shape_type:形状类型
imagePath:图像路径imageData:Base64编码的图像数据(可选)
示例标注文件:apc2016_obj3.json
高级应用:标注转数据集
转VOC格式数据集
以语义分割为例,将标注文件转换为VOC格式:
cd examples/semantic_segmentation
python labelme2voc.py data_annotated data_dataset_voc --labels labels.txt
转换后生成的VOC格式数据集结构:
- JPEGImages:原始图像
- SegmentationClass:类别掩码
- SegmentationClassVisualization:可视化掩码
转COCO格式数据集
实例分割标注可转换为COCO格式:
cd examples/instance_segmentation
python labelme2coco.py data_annotated data_dataset_coco --labels labels.txt
转换结果将生成标准COCO格式的annotations.json文件。
视频标注工作流
Labelme提供专门的视频标注解决方案,适合序列图像标注:
cd examples/video_annotation
labelme data_annotated/ --labels labels.txt
视频标注会为每一帧图像生成单独的标注文件,并保持帧间标注的连贯性。
视频标注工具源码:labelme2voc.py
实用技巧与FAQ
标注文件转numpy数组
使用教程中提供的方法将JSON标注转换为numpy数组:
# 参考[load_label_png.py](https://link.gitcode.com/i/560dcbecfacf989479ca1ebbe2a5c9b1)
import numpy as np
import PIL.Image
label_png = 'apc2016_obj3/label.png'
lbl = np.asarray(PIL.Image.open(label_png))
print(lbl.dtype) # 输出: uint8
print(np.unique(lbl)) # 输出标签值列表
查看标注PNG文件
使用内置工具可视化标注结果:
labelme_draw_label_png apc2016_obj3/label.png
自定义配置
首次运行Labelme后,会在用户目录创建配置文件~/.labelmerc,可修改该文件自定义界面行为。
配置文件模板:default_config.yaml
项目结构与扩展
Labelme的核心代码结构如下:
- 主程序:labelme/app.py
- 标注数据处理:labelme/_label_file.py
- 形状绘制工具:labelme/shape.py
- 命令行工具:labelme/cli/
- 界面组件:labelme/widgets/
- 转换脚本:examples/instance_segmentation/labelme2coco.py
总结与资源
Labelme作为一款开源图像标注工具,以其轻量、灵活和强大的功能,成为计算机视觉研究和开发的重要辅助工具。通过本文介绍的方法,你可以快速掌握从安装到高级应用的全流程。
更多资源:
- 官方文档:README.md
- 基础教程:examples/tutorial
- 语义分割示例:examples/semantic_segmentation
- 实例分割示例:examples/instance_segmentation
无论是学术研究、工业应用还是个人项目,Labelme都能为你的计算机视觉任务提供高效准确的标注支持。立即尝试,开启你的标注之旅吧!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考











