3分钟上手Labelme命令行工具:draw_json与export_json高效标注教程
Labelme作为一款开源图像标注工具(Image Polygonal Annotation with Python),提供了图形界面与命令行两种操作方式。本文聚焦其命令行核心功能draw_json与export_json,通过实际案例演示如何在3分钟内完成标注文件的可视化与导出,解决标注效率低、格式转换复杂的痛点。
命令行工具定位与优势
Labelme命令行工具位于labelme/cli/目录下,包含draw_json.py和export_json.py两个核心脚本。相比图形界面,命令行工具具有以下优势:
- 支持批量处理标注文件
- 可集成到自动化标注流水线
- 低资源环境下高效运行
- 提供标准化输出格式
draw_json:标注结果可视化工具
功能解析
draw_json.py用于将JSON标注文件可视化,生成原始图像与标注叠加图的对比视图。核心实现逻辑包括:
- 解析JSON标注文件获取图像数据与形状信息
- 将多边形标注转换为标签掩码(Label Mask)
- 使用
imgviz库生成带标签名称的可视化图像 - 通过Matplotlib展示对比结果
基础使用方法
labelme_draw_json examples/tutorial/apc2016_obj3.json
上述命令会读取examples/tutorial/apc2016_obj3.json标注文件,生成如下可视化效果:
高级参数说明
| 参数 | 作用 | 默认值 |
|---|---|---|
| json_file | 输入JSON标注文件路径 | 无(必填) |
export_json:标注数据导出工具
功能解析
export_json.py将JSON标注文件导出为标准数据集格式,包括原始图像、标签掩码、可视化标注图和标签名称文件。导出文件结构如下:
apc2016_obj3/
├── img.png # 原始图像
├── label.png # 标签掩码
├── label_names.txt # 标签名称列表
└── label_viz.png # 标注可视化图
基础使用方法
labelme_export_json examples/tutorial/apc2016_obj3.json -o output_dir
导出结果解析
导出的标签掩码可通过examples/tutorial/load_label_png.py验证:
python examples/tutorial/load_label_png.py
执行后输出标签与ID的对应关系:
label: label_name
0: _background_
1: shelf
2: highland_6539_self_stick_notes
3: mead_index_cards
4: kong_air_dog_squeakair_tennis_ball
实战案例:从标注到导出的完整流程
准备工作
- 安装Labelme:
pip install labelme - 获取示例标注文件:
examples/tutorial/apc2016_obj3.json
步骤1:可视化标注结果
labelme_draw_json examples/tutorial/apc2016_obj3.json
执行命令后将显示双窗口对比视图,左侧为原始图像,右侧为叠加了多边形标注和标签名称的可视化结果。
步骤2:导出标注数据
labelme_export_json examples/tutorial/apc2016_obj3.json -o examples/tutorial/apc2016_obj3
导出成功后,在examples/tutorial/apc2016_obj3/目录下生成四个文件,其中label_viz.png为标注可视化结果:
步骤3:验证导出结果
运行examples/tutorial/load_label_png.py验证导出的标签掩码与名称是否匹配:
python examples/tutorial/load_label_png.py
批量处理与自动化集成
对于包含多个标注文件的数据集,可通过Shell脚本实现批量处理:
for json_file in examples/instance_segmentation/data_annotated/*.json; do
labelme_export_json $json_file -o ${json_file%.json}
done
上述脚本会将examples/instance_segmentation/data_annotated/目录下所有JSON文件导出为独立的数据集文件夹。
常见问题与解决方案
中文标签显示乱码
修改draw_json.py第37行,指定支持中文的字体:
lbl_viz = imgviz.label2rgb(
lbl,
imgviz.asgray(img),
label_names=label_names,
font_size=30,
loc="rb",
font_path="/usr/share/fonts/truetype/wqy/wqy-microhei.ttc"
)
导出目录已存在
export_json.py第28-29行处理目录存在情况,默认直接使用现有目录,建议批量处理时添加-f参数强制覆盖(需修改源码实现)。
总结与扩展应用
通过本文学习,您已掌握Labelme命令行工具的核心用法。建议进一步探索:
- 官方教程:
examples/tutorial/README.md - 实例分割应用:
examples/instance_segmentation/ - 视频标注流程:
examples/video_annotation/
Labelme命令行工具为AI训练数据准备提供了高效解决方案,配合其Python API可实现更复杂的标注自动化需求。完整项目文档参见README.md。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




