小白快速上手 labelme:新手图像标注详解教程
前言
本教程主要面向初次使用 labelme
的新手,详细介绍了如何在 Windows 上通过 Anaconda
创建和配置环境,并使用 labelme
进行图像标注。
1. 准备工作
- 在开始本教程之前,确保已经安装了 Anaconda。可以参考我之前的教程了解 Anaconda 的下载与安装:一步步教你在 Windows 上轻松安装 Anaconda以及使用常用conda命令(超详细)。
- 本文所有命令操作均在Anaconda Prompt下进行,打开方式如下图。
2. 创建 Conda 环境
使用 Conda 管理 Python 环境可以避免不同项目之间的依赖冲突。下面是配置步骤:
# 创建 Python 3.9 的新环境(名称为 labelme)
conda create -n labelme python=3.9 -y
# 激活环境
conda activate labelme
注意:可以根据需要选择不同的 Python 版本,但建议使用 3.8
或 3.9
,以确保 labelme
的兼容性,版本过高会导致不稳定直接退出程序。
3. 安装 labelme
安装 labelme
有两种主要方法:使用 Conda 或 Pip,各有优缺点。
方法一:使用 pip 安装 labelme
(简洁快速但不稳定)
激活环境后,直接运行以下命令使用 pip
安装:
pip install labelme
优点:pip
安装方法简洁、快速,适合 Conda 默认不包含 labelme
的情况。
缺点:有时依赖项可能因 Python 版本或系统环境导致兼容性问题。
方法二:使用 Conda 安装 labelme
(推荐)
激活环境后,直接运行以下命令使用 conda
安装:
conda install -c conda-forge labelme
优点:Conda 会自动解决依赖冲突问题,通常更稳定,且 Conda Forge 提供的包适配性较好。
缺点:Conda Forge 中的包可能不是最新版本,适合追求环境稳定的用户。
4. 启动 labelme
使用以下命令启动 labelme
:
labelme
日志内容结构
2024-11-16 13:26:07,488 [INFO ] __init__:get_config:67- Loading config file from: C:\Users\Natsu\.labelmerc
在 2024年11月16日 13:26:07
,程序正常运行并尝试从路径 C:\Users\Natsu\.labelmerc
加载配置文件。此消息表明程序的配置加载过程已开始,是运行过程中的一个正常操作。
5. LabelMe 的基本操作指南
5.1 图像加载
- 用户可通过以下方式加载需要标注的图像:
- 在工具栏中选择 “打开” 按钮以加载单张图像。
- 在工具栏中选择 “打开目录” 按钮以加载目标文件夹中的所有图像。
- 为方便后续标注文件的管理,可通过 “文件(F)” -> “更改输出路径” 设置 JSON 文件的保存路径。
- 建议启用 “自动保存” 功能(通过 “文件(F)” -> “自动保存” 启用),确保标注工作实时保存,避免数据丢失。
5.2 创建标注框
- 选择目标图像后,执行以下操作创建标注框:
- 在工具栏中选择 “编辑(E)” -> “创建多边形”,进入标注框绘制模式。
- 使用鼠标在图像上点击以创建多边形的边界点,根据需要绘制目标区域的边界。
- 弹出对话框后,输入标签名称(如“apple”或其他目标名称),以便于分类和管理。
- 确认无误后,点击 “OK” 按钮保存标注内容,系统将自动生成对应的 JSON 格式标注文件。
- 在工具栏中选择 “编辑(E)” -> “创建多边形”,进入标注框绘制模式。
5.3 常用快捷键说明
为提高标注效率,labelme 提供以下常用快捷键:
- A / D(必会):切换至上一张或下一张图像。
- Ctrl + Z(必会) :撤销上一步
- Ctrl + R:创建矩形框标注。
- Ctrl + N:创建多边形标注。
- Ctrl + 鼠标滚轮:放大或缩小当前图像视图。
- Ctrl + F:还原图像至原始尺寸。
- Ctrl + J:切换至编辑模式。
6.结果
- 标注后的JSON格式文件最后会保存在最初选择"文件(F) -> 更改输出路径"的保存路径下。
- 如下图所示,可能不同电脑图标不同。右键单击文件并选择“属性”,只要文件后缀显示为
.json
文件,即表示已正确保存。
7.Labelme 生成的 JSON 格式文件详解
Labelme 的标注结果以 JSON 文件格式保存,包含了标注图像的相关元数据以及每个标注区域的详细信息。以下是 JSON 文件的主要结构及其说明:
7.1 顶层结构
{
"version": "5.0.1",
"flags": {},
"shapes": [],
"imagePath": "example.jpg",
"imageData": null,
"imageHeight": 800,
"imageWidth": 600
}
version
:记录生成文件的 LabelMe 版本号,便于兼容性分析。flags
:用户定义的标志信息(默认为空,若无特别设置)。shapes
:一个列表,包含了所有标注的几何形状及其属性(详见下文)。imagePath
:图像文件的相对路径或名称,用于追溯标注图像。imageData
:图像的 Base64 编码数据,默认为null
,标识未嵌入图像。imageHeight
和imageWidth
:标注图像的分辨率(高度和宽度)。
7.2 shapes
列表(标注内容)
shapes
是 JSON 文件的核心部分,每个标注对象都会以单独的条目存储在此列表中。结构如下:
"shapes": [
{
"label": "apple",
"points": [[100, 150], [200, 150], [200, 250], [100, 250]],
"group_id": null,
"shape_type": "polygon",
"flags": {}
}
]
label
:该标注区域的标签名称(例如“apple”)。points
:二维数组,存储标注形状的关键点坐标。每个点以[x, y]
的形式表示。例如,以上数据定义了一个矩形的四个顶点。group_id
:标注分组的 ID,便于组织管理(默认为null
,表示无分组)。shape_type
:标注形状的类型,可为:"polygon"
:多边形(常用)"rectangle"
:矩形"circle"
:圆形"point"
:单点"line"
:直线
flags
:标注区域的附加属性(默认为空对象{}
)。
7.3 示例完整文件
以下是标注一张图片的 JSON 文件示例:
{
"version": "5.0.1",
"flags": {},
"shapes": [
{
"label": "apple",
"points": [[100, 150], [200, 150], [200, 250], [100, 250]],
"group_id": null,
"shape_type": "polygon",
"flags": {}
},
{
"label": "banana",
"points": [[300, 100], [350, 150], [300, 200], [250, 150]],
"group_id": null,
"shape_type": "polygon",
"flags": {}
}
],
"imagePath": "example.jpg",
"imageData": null,
"imageHeight": 800,
"imageWidth": 600
}
7.4 注意事项
- JSON 格式的严谨性:文件必须保持正确的 JSON 格式,否则可能导致加载错误。
- 路径与图像一致性:
imagePath
字段中的图像路径应与图像文件实际位置保持一致,否则加载标注可能失败。 - 点顺序与形状构成:对于多边形或矩形,
points
坐标顺序决定了形状的轮廓,绘制时需注意顺时针或逆时针方向。
8. 注意事项
- 若过程中遇到报错或闪退问题,最好的解决方法是删除当前环境并重新创建。
- 当前最稳定的配置为:
Python 版本 3.9
+通过 Pip 安装 labelme
。 - 推荐在
labelme
环境中仅安装labelme
包,避免安装其他不必要的包。