当前位置: 首页 > article >正文

小白快速上手 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.83.9,以确保 labelme 的兼容性,版本过高会导致不稳定直接退出程序。


3. 安装 labelme

安装 labelme 有两种主要方法:使用 CondaPip,各有优缺点。

方法一:使用 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 格式标注文件。

在这里插入图片描述

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,标识未嵌入图像。
  • imageHeightimageWidth:标注图像的分辨率(高度和宽度)。

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包,避免安装其他不必要的包。

http://www.kler.cn/a/399611.html

相关文章:

  • 解决 IDEA 修改代码重启不生效的问题
  • 基于Java和Vue实现的上门做饭系统上门做饭软件厨师上门app
  • Django5 2024全栈开发指南(一):框架简介、环境搭建与项目结构
  • 哈希表学习分享
  • 腾讯云内容合规基于springboot架构设计
  • 【项目开发】URL中井号(#)的技术细节
  • 集群聊天服务器(3)muduo网络库
  • 编译sddm 0.18.1 依赖
  • 图像分类之花卉识别实验验证
  • LeetCode59. 螺旋矩阵 II
  • 交换排序——快速排序
  • 网络基础Linux
  • Spring MVC 与 JSP 数据传输
  • Prompt Engineering Guide
  • 理解和选择Vue的组件风格:组合式API与选项式API详解
  • STM32单片机设计防儿童人员误锁/滞留车内警报系统
  • vue项目中使footer始终保持底部的几种实现方法
  • 2024年11月16日 星期六 重新整理Go技术
  • Python_爬虫1_Requests库入门
  • STM32设计电流与温度监控python上位机监控平台设计
  • SQL Server中,CONVERT函数转换日期
  • 支持用户注册和登录、发布动态、点赞、评论、私信等功能的社交媒体平台创建!!!
  • Java在移动端小程序开发中的性能优化研究
  • Mac——基本操作使用整理
  • 【设计模式】行为型模式(五):解释器模式、访问者模式、依赖注入
  • ORA-01092 ORA-14695 ORA-38301