LabelMe使用简介
LabelMe使用简介
LabelMe 是基于 Python + Qt 的图形化图像标注工具,支持多边形、矩形等形状,标注结果保存为
*.json。多数 YOLO 训练流程需再转为images/+labels/*.txt+dataset.yaml;本文介绍安装、基本标注流程,以及 LabelMe → YOLO 的常用转换工具与选型。
参考与延伸阅读:
- 开源主仓库:https://github.com/wkentaro/labelme
- 独立安装包(Releases):https://github.com/wkentaro/labelme/releases
- 官方站点 / 文档:https://labelme.io
- PyPI 转换工具
labelme2yolo:https://github.com/GreatV/labelme2yolo · https://pypi.org/project/labelme2yolo - Python 转换脚本:https://github.com/rooneysh/Labelme2YOLO
- Ultralytics YOLO 文档:https://docs.ultralytics.com/
目录
- 1. LabelMe 是什么
- 2. 相关资源
- 3. 下载与安装
- 4. 基本使用(标注流程)
- 5. LabelMe 与 YOLO:为什么要转换
- 6. LabelMe → YOLO:常用工程与用法
- 7. 工具选型简表
- 8. 常见问题
- 9. 小结
1. LabelMe 是什么
LabelMe 是一款基于 Python + Qt 的图形化图像标注工具,支持多边形、矩形、圆、线、点等形状,也可配合 SAM、YOLO-World 等做辅助标注。标注结果通常保存为与图片同名的 *.json,属于训练前的中间格式——多数深度学习框架不会直接读取 JSON,往往需要再转为 YOLO、COCO、VOC 等格式。
| 能力 | 说明 |
|---|---|
| 常用形状 | 多边形(polygon)、矩形(rectangle)等 |
| 输出 | 每张图一个 JSON;可选内嵌 imageData(Base64) |
| 官方导出 | 开源版提供 VOC、COCO 等示例;不含与 pip 包捆绑的官方批量「转 YOLO」脚本 |
| 与 YOLO | 需自写脚本、经 COCO 中转,或使用下文 labelme2yolo 等第三方工具 |
2. 相关资源
| 类型 | 链接 | 说明 |
|---|---|---|
| 开源主仓库 | https://github.com/wkentaro/labelme | 安装说明、示例、Issue |
| Releases(免装 Python) | https://github.com/wkentaro/labelme/releases | Windows / macOS 等独立可执行包 |
| 官方站点 / 文档 | https://labelme.io | 产品文档、部分 Pro 功能说明 |
| 导出 YOLO(文档) | https://labelme.io/docs/export-to-yolo | 描述 labelmetk export-to-yolo;完整步骤多为 Pro;多边形常转为外接框 |
| 实例分割示例 | https://github.com/wkentaro/labelme/tree/main/examples/instance_segmentation | 导出 COCO 等 |
| 语义分割示例 | https://github.com/wkentaro/labelme/tree/main/examples/semantic_segmentation | 导出 VOC 等 |
社区 LabelMe → YOLO 工具(非 wkentaro 官方维护,使用前请核对许可与输出格式):
| 项目 | 链接 | 特点 |
|---|---|---|
| labelme2yolo(PyPI,Rust) | https://github.com/GreatV/labelme2yolo · https://pypi.org/project/labelme2yolo | 命令行 labelme2yolo;支持 bbox / polygon;可划分 train / val / test |
| Labelme2YOLO(Python) | https://github.com/rooneysh/Labelme2YOLO | 脚本 labelme2yolo.py;支持检测与 --seg 分割 |
| 其它 | 在 PyPI 检索 labelme2yolo 等 | 维护状态不一,需与所用 YOLO 版本对齐 |
3. 下载与安装
3.1 推荐:pip(跨平台)
环境建议:Python 3.8+(若后续要训练 YOLO,可与 PyTorch / Ultralytics 共用同一虚拟环境)。
1
2
3
4
pip install labelme
# 安装最新开发版(可选)
# pip install git+https://github.com/wkentaro/labelme.git
启动:
1
2
3
4
5
labelme
# 打开指定目录
labelme /path/to/images
# 打开单张图
labelme /path/to/image.jpg
3.2 独立可执行文件(免配置 Python)
从 Releases 下载对应系统的安装包或压缩包,解压后运行 Labelme 或 labelme.exe。
3.3 Conda(可选)
1
2
3
4
conda create -n labelme python=3.10
conda activate labelme
pip install labelme
# 或:conda install labelme -c conda-forge
4. 基本使用(标注流程)
- 启动
labelme,菜单 File → Open Dir 打开图片目录(或命令行传入目录)。 - 创建形状:左侧选择 Create Polygons(多边形)或 Create Rectangle(矩形);在图上依次点击顶点,右键或 Enter 结束当前形状。
- 填写类别:在弹出框中输入 label(如
person、car);名称需与后续训练配置中的类别名一致,注意大小写与空格。 - 保存:Ctrl+S 或 File → Save,同目录生成
图片名.json。 - 切换图片:D 下一张、A 上一张(不同版本快捷键可能略有差异,以界面提示为准)。
- 撤销:Ctrl+Z 撤销误操作。
目录习惯(建议):
- 每张图:
xxx.jpg与xxx.json放在同一目录; - JSON 内
imagePath指向相对或绝对图片路径; - 若移动图片或改目录结构,需同步更新
imagePath,否则转换脚本可能找不到图。
JSON 核心字段示例:
1
2
3
4
5
6
7
8
9
10
11
12
{
"imagePath": "example.jpg",
"imageHeight": 480,
"imageWidth": 640,
"shapes": [
{
"label": "person",
"shape_type": "polygon",
"points": [[x1, y1], [x2, y2]]
}
]
}
5. LabelMe 与 YOLO:为什么要转换
| 侧 | 格式 | 用途 |
|---|---|---|
| 标注侧 | LabelMe *.json | 人工标注、可读、多边形方便 |
| 训练侧(如 Ultralytics) | images/ + labels/*.txt + dataset.yaml | yolo detect train / yolo segment train 等 |
检测任务标签每行一般为:<class_id> <x_center> <y_center> <width> <height>(坐标相对图像宽高,取值 0~1)。
多边形在转检测时通常取外接矩形;转分割时需保留顶点序列(具体格式随 YOLO 版本而定)。
官方开源包:README 提供 VOC / COCO 导出示例,没有捆绑「一键转 YOLO txt」。
官方文档中的 labelmetk export-to-yolo 属于 LabelMe 产品线能力,与开源 pip 包能力范围不同,使用前请阅读 https://labelme.io/pricing 与对应文档。
6. LabelMe → YOLO:常用工程与用法
6.1 PyPI:labelme2yolo(GreatV / Rust)
安装:
1
pip install labelme2yolo
典型用法(将 *.json 放在同一目录下):
1
2
3
4
5
6
7
8
# 默认 bbox,自动划分 train/val(比例见 --help)
labelme2yolo --json_dir /path/to/labelme_json_dir
# 指定验证集比例;输出为多边形(YOLOv5/v8 分割)
labelme2yolo --json_dir /path/to/labelme_json_dir --val_size 0.2 --output_format polygon
# 同时划分 test 集
labelme2yolo --json_dir /path/to/labelme_json_dir --val_size 0.15 --test_size 0.15
产出目录示例:
1
2
3
4
/path/to/labelme_json_dir/YOLODataset/
dataset.yaml
images/train/ images/val/ [images/test/]
labels/train/ labels/val/ [labels/test/]
更多参数见:https://github.com/GreatV/labelme2yolo
6.2 GitHub:rooneysh/Labelme2YOLO(Python)
仓库:https://github.com/rooneysh/Labelme2YOLO
克隆后安装依赖(以仓库内 requirements.txt 为准),在仓库目录执行:
1
2
3
git clone https://github.com/rooneysh/Labelme2YOLO.git
cd Labelme2YOLO
pip install -r requirements.txt
labelme2yolo.py 常用参数:
| 参数 | 含义 |
|---|---|
--json_dir | 存放 LabelMe *.json 的目录(默认只扫描该层,不递归子文件夹) |
--val_size | 验证集比例,默认 0.1;如 0.2 表示 20% 用于验证 |
--json_name | 仅转换单个 json(可选) |
--seg | 转为 YOLO 实例分割 数据集(输出目录为 YOLODataset_seg) |
用法 1:自动划分 train / val
1
python labelme2yolo.py --json_dir /path/to/labelme_json_dir --val_size 0.2
用法 2:已手动分出 train/、val/ 子目录
将 json 分别放入 json_dir/train/、json_dir/val/ 后执行:
1
python labelme2yolo.py --json_dir /path/to/labelme_json_dir
用法 3:分割任务
1
python labelme2yolo.py --json_dir /path/to/labelme_json_dir --val_size 0.2 --seg
产出结构:
1
2
3
4
5
6
7
{json_dir}/YOLODataset/ # 检测
dataset.yaml
images/train/ images/val/
labels/train/ labels/val/
{json_dir}/YOLODataset_seg/ # 使用 --seg 时
...
训练示例(Ultralytics YOLOv8,需另行安装 ultralytics):
1
2
3
4
5
# 检测(建议 data= 使用 dataset.yaml 的绝对路径)
yolo detect train data=/path/to/YOLODataset/dataset.yaml model=yolov8n.pt epochs=100 imgsz=640
# 分割
yolo segment train data=/path/to/YOLODataset_seg/dataset.yaml model=yolov8n-seg.pt epochs=100 imgsz=640
注意: 若 json 分散在多层子目录中,需先将 json 与图片整理到单层目录,或自行编写汇总脚本,再调用上述工具。
7. 工具选型简表
| 场景 | 建议 |
|---|---|
| 只做标注 | 安装官方 labelme,图片与 json 同目录保存 |
| 快速转 YOLO、可选 polygon/bbox、数据量较大 | PyPI labelme2yolo(Rust,速度较快) |
需要 --seg、习惯 Python 脚本 | rooneysh/Labelme2YOLO |
| 必须走 COCO 生态 | LabelMe 官方示例导出 COCO,再用 COCO→YOLO 工具链 |
| 整图分类(无框) | 常直接按文件夹分 class,不必经过 labelme2yolo |
8. 常见问题
| 现象 | 处理 |
|---|---|
labelme 命令找不到 | 确认 pip install labelme 使用的 Python 与终端一致;或尝试 python -m labelme |
| 转换后找不到图片 | 检查 json 中 imagePath;训练时 dataset.yaml 路径建议写绝对路径 |
| 类别 id 混乱 | 统一 shapes[].label 拼写;多数转换脚本按 label 集合生成 id,宜事先约定类别表 |
| 子文件夹中的 json 未被转换 | 部分脚本只扫描单层目录 → 将 json 汇总到同一层,或换用支持递归的工具 |
| 多边形变成矩形 | 检测任务常见(外接框);要保留轮廓可用分割模式或 --output_format polygon |
| 界面无法启动 / 显示异常 | 可尝试 Releases 独立包;Linux 下注意安装 Qt 相关系统依赖 |
9. 小结
LabelMe 负责 JSON 标注;YOLO 训练 需要 dataset.yaml + 归一化标签 txt。开源 pip 包不自带批量转 YOLO,工程上常用 PyPI labelme2yolo 或 rooneysh/Labelme2YOLO。标注时保持 图片与 json 同目录、label 命名统一,转换前核对 imagePath 与 train/val 划分方式,即可顺畅对接 Ultralytics 等训练流程。
