LabelMe & LabelImg 详细使用教程(新手零基础入门,附避坑指南)
在计算机视觉领域,数据集标注是模型训练的基础——没有高质量的标注数据,再强大的算法也无从谈起。而 LabelMe 和 LabelImg 作为两款最主流的开源图像标注工具,几乎是所有CV初学者的入门必备。
很多新手会混淆这两款工具:有人用 LabelImg 去做语义分割标注,有人用 LabelMe 画简单矩形框,反而降低了效率。其实核心区别很简单:LabelImg 专注矩形框标注,适合目标检测任务;LabelMe 支持多形态标注,适合语义分割、实例分割等精细标注场景。
这篇博客将从「工具定位→环境安装→完整操作→格式解析→技巧避坑」,手把手教你掌握两款工具的使用,无论你是CV新手,还是需要快速上手标注任务的开发者,看完这篇就能直接落地实操。
一、工具前置认知:LabelMe vs LabelImg 核心区别
在开始操作前,先明确两款工具的适用场景,避免用错工具走弯路,具体区别如下(新手必看):
|
对比维度 |
LabelImg |
LabelMe |
|---|---|---|
|
核心功能 |
专注2D矩形框(Bounding Box)标注 |
支持多边形、矩形、圆形、点、线段等多种标注形态 |
|
适用场景 |
目标检测(如YOLO、Faster R-CNN等模型) |
语义分割、实例分割、姿态估计、关键点检测等 |
|
输出格式 |
默认Pascal VOC(XML),可一键切换YOLO(TXT) |
默认JSON格式,需转换为掩码图(PNG)用于模型训练 |
|
特点 |
轻量、启动快、操作简单,适合大规模快速标注 |
功能丰富、标注精细,支持复杂场景,可自定义扩展 |
总结:做目标检测,用 LabelImg 效率最高;做分割类任务,用 LabelMe 最适配。两款工具可单独使用,也可根据项目需求搭配使用。
二、环境准备:通用前置条件(两款工具通用)
两款工具均基于 Python 开发,因此无论使用哪款,都需要先搭建 Python 环境,新手推荐用 Anaconda 搭建虚拟环境,避免与其他项目依赖冲突。
2.1 安装 Anaconda(推荐)
-
前往 Anaconda 官网,下载对应操作系统(Windows/macOS/Linux)的版本,默认安装即可(安装时勾选“Add Anaconda to PATH”,方便后续调用)。
-
安装完成后,Windows 打开「Anaconda Prompt」,macOS/Linux 打开「终端」,输入
conda --version,出现版本号即安装成功。
2.2 创建并激活虚拟环境
建议创建一个专门的标注环境,避免依赖冲突,命令如下(所有系统通用):
# 创建名为 label_env 的虚拟环境(Python 3.6-3.10 兼容性最好)
conda create --name=label_env python=3.8
# 确认安装(输入 y 回车)
# 激活环境
conda activate label_env
# 激活成功后,命令行前会显示 (label_env)
后续安装和启动两款工具,都需在这个激活的虚拟环境中操作。
三、LabelImg 详细使用教程(目标检测标注首选)
LabelImg 是目标检测标注的“神器”,操作简单、轻量化,支持主流标注格式,无需后期手动转换,新手可快速上手。
3.1 安装 LabelImg
在激活的虚拟环境中,有两种安装方式,新手推荐第一种,快捷高效。
方式一:Pip 一键安装(推荐)
# 直接安装 labelimg
pip install labelimg
# 可选:用国内清华源加速(下载更快,避免超时)
pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple
方式二:源码安装(进阶,适合二次开发)
# 克隆 GitHub 仓库
git clone https://github.com/HumanSignal/labelImg.git
# 进入仓库目录
cd labelImg
# 安装依赖
pip install pyqt5 lxml
# 编译资源文件(仅需一次)
pyrcc5 -o libs/resources.py resources.qrc
# 启动程序
python labelImg.py
安装验证
在虚拟环境中输入 labelimg 并回车,若弹出 LabelImg 图形界面,说明安装成功。
3.2 LabelImg 完整操作流程(新手实操)
核心流程:启动工具→设置参数→加载图片→标注矩形框→保存标注→切换下一张,全程可视化操作,步骤如下:
步骤1:启动工具并设置基础参数
-
启动:虚拟环境中输入
labelimg,打开界面(默认英文,可在 View 菜单中勾选“Chinese”切换中文)。 -
加载图片文件夹:点击菜单栏「Open Dir」,选择存放原始图片的文件夹(建议将所有待标注图片放在同一个文件夹,方便管理)。
-
设置保存目录:点击「Change Save Dir」,选择一个专门存放标注文件的文件夹(建议与原始图片分开存放,避免文件混乱)。
-
切换标注格式:界面底部有「PascalVOC」和「YOLO」两个按钮,根据模型需求切换(默认 PascalVOC,生成 XML 文件;YOLO 模型选 YOLO,生成 TXT 文件)。
步骤2:开始标注(核心操作)
-
创建矩形框:点击左侧工具栏「Create RectBox」(或按快捷键
W),进入标注模式。 -
绘制矩形框:在图片中目标物体上,按下鼠标左键拖拽,绘制一个刚好包裹目标的矩形框(不宜过大或过小,尽量贴合目标边缘),松开鼠标。
-
输入标签:松开鼠标后,会弹出标签输入框,输入目标类别(如“car”“person”“cat”),点击「OK」(同类目标标签必须完全一致,如统一用“car”,不要混用“Car”“cars”)。
-
编辑标注:若矩形框位置偏差,可点击左侧「Edit RectBox」,拖动矩形框或边角调整大小;若标注错误,按
Del键删除当前标注。
步骤3:保存与批量标注
-
保存标注:单张图片标注完成后,点击「Save」(或按快捷键
Ctrl+S),会自动生成对应格式的标注文件(XML/TXT),文件名与原始图片一致。 -
切换下一张:点击「Next Image」(或按快捷键
D),可加载下一张图片;若勾选 View 菜单中的「Auto Save mode」,切换图片时会自动保存当前标注,无需手动点击。 -
批量标注:重复步骤2-3,直至所有图片标注完成,标注文件会自动保存到之前设置的保存目录中。
3.3 标注格式解析(关键,适配模型训练)
LabelImg 最便捷的优势的是“一键切换格式”,无需手动转换,两种主流格式解析如下:
1. PascalVOC 格式(XML 文件,默认)
可读性强,存储了图片尺寸、目标坐标、标签等完整信息,可直接用于 Faster R-CNN 等模型,核心内容如下:
<annotation>
<filename>car_01.jpg</filename> <!-- 原始图片文件名 -->
<size> <!-- 图片尺寸 -->
<width>1920</width> <!-- 宽度 -->
<height>1080</height> <!-- 高度 -->
<depth>3</depth> <!-- 通道数(RGB为3) -->
</size>
<object> <!-- 标注的目标 -->
<name>car</name> <!-- 目标标签 -->
<bndbox> <!-- 矩形框坐标(像素值) -->
<xmin>100</xmin> <!-- 左上角x坐标 -->
<ymin>200</ymin> <!-- 左上角y坐标 -->
<xmax>400</xmax> <!-- 右下角x坐标 -->
<ymax>500</ymax> <!-- 右下角y坐标 -->
</bndbox>
</object>
</annotation>
2. YOLO 格式(TXT 文件)
专为 YOLO 模型设计,存储归一化后的相对坐标(范围 0~1),无需手动转换,核心格式如下:
每行代表一个目标,格式:class_id x_center y_center width height
-
class_id:类别索引(从0开始,需提前定义类别列表,如0=car、1=person);
-
x_center、y_center:矩形框中心点的归一化坐标;
-
width、height:矩形框宽度和高度的归一化值;
示例(TXT 文件内容):0 0.25 0.35 0.15 0.20,LabelImg 会自动计算归一化坐标,无需手动计算。
3.4 LabelImg 实用技巧与避坑指南
-
快捷键高效操作(必记):W=创建矩形框、D=下一张、A=上一张、Del=删除标注、Ctrl+S=保存、Ctrl+Z=撤销;
-
标签统一:标注前先定义好所有类别(如“cat”“dog”),避免大小写、单复数混乱(如“Cat”和“cat”会被识别为两个类别);
-
闪退问题(Python 3.10+):若打开后绘制矩形框闪退,需修改两个文件(路径:虚拟环境目录\Lib\site-packages\libs):
-
canvas.py:第526、530、531行,将坐标值改为int类型(如 int(left_top.x()));
-
shape.py:第131行,将 painter.drawText 后的坐标改为int类型(如 int(min_x), int(min_y))。
-
四、LabelMe 详细使用教程(分割类标注首选)
LabelMe 功能比 LabelImg 更丰富,支持多边形、点、线段等多种标注形态,核心用于语义分割、实例分割等需要精细勾勒目标轮廓的场景,标注结果需转换为掩码图后用于模型训练。
4.1 安装 LabelMe
同样在激活的虚拟环境中操作,推荐 Pip 一键安装,步骤如下:
# 先安装界面依赖 PyQt5(避免后续报错)
pip install pyqt5
# 安装 LabelMe
pip install labelme
# 可选:清华源加速
pip install labelme pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
安装验证
虚拟环境中输入 labelme 并回车,弹出 LabelMe 图形界面,即安装成功。
注意:LabelMe 版本过高可能导致后续格式转换报错,若出现 ValueError: Too many dimensions 错误,可参考下文“避坑指南”解决,无需降级版本。
4.2 LabelMe 完整操作流程(新手实操)
核心流程:启动工具→加载图片→选择标注工具→勾勒目标轮廓→保存JSON→格式转换,重点在于“精细勾勒”和“格式转换”,步骤如下:
步骤1:启动工具并加载图片
-
启动:虚拟环境中输入
labelme,打开界面(默认英文,可在 Edit→Preferences 中切换中文)。 -
加载图片:有两种方式,一是点击「Open」加载单张图片,二是点击「Open Dir」加载整个图片文件夹(批量标注推荐)。
步骤2:选择标注工具并勾勒轮廓(核心操作)
LabelMe 提供多种标注工具,常用的有3种,根据场景选择:
-
Create Polygons(多边形工具,最常用):用于语义/实例分割,勾勒目标完整轮廓,快捷键
P; -
Create Rectangles(矩形工具):用于简单目标框选,类似 LabelImg,快捷键
R; -
Create Points(点工具):用于关键点检测(如人脸关键点、姿态关键点),快捷键
O。
以最常用的「多边形标注」为例,操作如下:
-
点击左侧「Create Polygons」,或按快捷键
P,进入标注模式; -
在目标物体边缘,依次点击鼠标左键,绘制多边形顶点(点越密集,轮廓越精细);
-
撤销错误顶点:按
Ctrl+Z撤销上一个顶点; -
闭合轮廓:当最后一个顶点与第一个顶点重合时,会自动闭合多边形,此时弹出标签输入框,输入目标标签(如“leaf”“tumor”),点击「OK」;
-
编辑轮廓:点击左侧「Edit Polygons」,可拖动顶点调整轮廓位置,或添加/删除顶点(右键顶点可删除)。
步骤3:保存标注文件
单张图片标注完成后,点击「Save」(或按 Ctrl+S),会生成一个与原始图片同名的 .json 文件,该文件包含了标注的所有信息(顶点坐标、标签、图片尺寸等)。
注意:JSON 文件不能直接用于模型训练,需转换为像素级的掩码图(PNG格式)。
4.3 标注结果格式转换(关键步骤)
LabelMe 标注后生成的 JSON 文件,需转换为掩码图(Label Mask)才能用于分割模型训练,分为「单文件转换」和「批量转换」两种方式。
方式1:单文件转换(适合少量标注)
在虚拟环境中,执行以下命令,将单个 JSON 文件转换为掩码图:
# 格式:labelme_json_to_dataset 你的JSON文件路径
labelme_json_to_dataset ./annotations/car_01.json
执行后,会生成一个同名文件夹,里面包含5个文件,核心是 label.png(掩码图),每个像素值对应一个类别,用于模型训练。
方式2:批量转换(适合大量标注,推荐)
当有大量 JSON 文件时,手动转换效率低,可使用 LabelMe 源码中的 labelme2voc.py 脚本批量转换,步骤如下:
-
克隆 LabelMe 源码:
git clone https://github.com/wkentaro/labelme; -
进入源码目录:
cd labelme; -
创建 labels.txt 文件:在源码目录中,新建
labels.txt,写入所有标注类别(每行一个,第一行写__ignore__,第二行写_background_,后续写自定义类别),示例:__ignore___background_carpersoncat -
执行批量转换命令:
# 格式:python labelme2voc.py 输入JSON目录 输出目录 --labels labels.txtpython labelme2voc.py ./json_dir ./output_dir --labels labels.txt -
转换完成后,输出目录中会生成
JPEGImages(原始图片)和SegmentationClass(掩码图),可直接用于模型训练。
4.4 LabelMe 实用技巧与避坑指南
-
带洞目标标注:若目标内部有空洞(如甜甜圈、带孔零件),先标注外部轮廓(标签为目标类别),再标注内部空洞轮廓(标签设为
_background_),转换后空洞会被识别为背景; -
格式转换报错解决:若出现「ValueError: Too many dimensions: 3 > 2」,无需降级 LabelMe,只需修改转换脚本,将
lbl = utils.shapes_to_label(...)改为lbl, ins = utils.shapes_to_label(...)(lbl 为类别掩码,ins 为实例掩码); -
中文乱码(Windows):查看转换后的可视化图片时,若标签中文乱码,找到 LabelMe 安装目录下的
label_file.py,在第36行左右,修改文件读取编码为 UTF-8; -
快捷键高效操作:P=多边形标注、R=矩形标注、O=点标注、Ctrl+Z=撤销、Ctrl+S=保存、D=下一张、A=上一张。
五、总结与拓展建议
LabelImg 和 LabelMe 都是开源免费、功能强大的标注工具,核心区别在于适用场景:
-
目标检测(画矩形框):优先用 LabelImg,轻量、高效,无需手动转换格式;
-
分割类任务(画轮廓):优先用 LabelMe,标注精细,支持多种形态,转换后可直接用于模型训练。
对于新手来说,建议先掌握 LabelImg 的基础操作,完成简单的目标检测标注任务,再学习 LabelMe 的多边形标注和格式转换,逐步提升标注效率和精度。
拓展建议:
-
标注规范:标注前制定统一的标签规范,避免标签混乱,提升数据集质量;
-
批量处理:当数据集规模较大时,可结合脚本(如 Python 批量重命名图片),搭配两款工具的批量功能,提升标注效率;
-
问题排查:若遇到安装或操作报错,可查看工具的 GitHub Issues 或官方文档,大部分常见问题都有解决方案。
最后,标注是一个“细致活”,高质量的标注才能训练出高精度的模型。希望这篇教程能帮你快速上手 LabelImg 和 LabelMe,少走弯路,高效完成标注任务~
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)