小白快速上手 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.mzph.cn/pingmian/60994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

脑机接口、嵌入式 AI 、工业级 MR、空间视频和下一代 XR 浏览器丨RTE2024 空间计算和新硬件专场回顾

这一轮硬件创新由 AI 引爆,或许最大受益者仍是 AI,因为只有硬件才能为 AI 直接获取最真实世界的数据。 在人工智能与硬件融合的新时代,实时互动技术正迎来前所未有的创新浪潮。从嵌入式系统到混合现实,从空间视频到脑机接口&…

【STM32】MPU6050简介

文章目录 MPU6050简介MPU6050关键块带有16位ADC和信号调理的三轴MEMS陀螺仪具有16位ADC和信号调理的三轴MEMS加速度计I2C串行通信接口 MPU6050对应的数据手册:MPU6050 陀螺仪加速度计 链接: https://pan.baidu.com/s/13nwEhGvsfxx0euR2hMHsyw?pwdv2i6 提取码: v2i6…

ISP——你可以从这里起步(二)

接上一篇,上一篇是原理篇,这一篇是实战篇,为了实现下面框图中的不完美ISP。 第一章 做一张RAW图自己用 不是所有的人都能获得raw图,即使获得了raw图也需要对应的sensor参数才能把它用起来,所以我找了一条野路子可以把…

Istio分布式链路监控搭建:Jaeger与Zipkin

分布式追踪定义 分布式追踪是一种用来跟踪分布式系统中请求的方法,它可以帮助用户更好地理解、控制和优化分布式系统。分布式追踪中用到了两个概念:TraceID 和 SpanID。 TraceID 是一个全局唯一的 ID,用来标识一个请求的追踪信息。一个请求…

【论文阅读】主动推理:作为感知行为的理论

文章目录 主动推理:作为感知行为的理论摘要1.引言2. 主动推理的概念和历史根源3. 主动推理的规范视角—以及它的发展历程 未完待续 主动推理:作为感知行为的理论 Active inference as a theory of sentient behavior 摘要 这篇文章综述了主动推理的历…

【MySQL】MySQL数据库入门:构建你的数据基石

🍑个人主页:Jupiter. 🚀 所属专栏:MySQL初阶探索:构建数据库基础 欢迎大家点赞收藏评论😊 目录 🦅数据库基础🐀什么是数据库🐏主流数据库🦆MySQL数据库的基本…

6.584-Lab1:MapReduce

前置知识/概念 Raft 是一个基于“Leader”的协议,能够保证分布式网路的一致性。 RPC(Remote Producer Call) 参考链接1 参考链接2 Go中RPC的简单实现 Golang中regexp正则表达式的用法 https://gukaifeng.cn/posts/golang-zheng-ze-biao-…

抽象java入门1.5.3.1——类的进阶

前言:在研究神技代码Hello word的时候,发现了一个重大公式bug,在代码溯源中,我发现了一个奇怪的东西,就是OUT不是类中类(不是常规类的写法) 内容总结: 代码运行的顺序复习 正片开始…

人力资源招聘系统的革新之路:从传统到智能的转变

在全球化与数字化交织的今天,企业间的竞争日益激烈,而人才作为企业发展的核心驱动力,其重要性不言而喻。传统的人力资源招聘方式,如依赖纸质简历、人工筛选、面对面面试等,不仅效率低下,且难以精准匹配企业…

AXI DMA IP BUG踩坑记录

1. 问题描述 在突发的过程中总是一旦使用XAxiDma_SimpleTransfer函数就会出现AXI STREAM信号的READY信号先拉高4个数据(32位)的时钟后会迅速拉低,换句话说就是一旦PS端发起了XAxiDma_SimpleTransfer,AXI总线的READY信号就会拉高四个节拍,这样就会导致传输的数据出现问题。…

Vue2教程001:初识Vue

文章目录 1、初识Vue1.1、Vue2前言1.2、创建Vue实例1.3、插值表达式1.4 Vue响应式特性 1、初识Vue 1.1、Vue2前言 Vue是什么? 概念:Vue是一个用于构建用户界面的渐进式框架。 Vue的两种使用方式: Vue核心包开发 场景:局部模块…

vscode vite+vue3项目启动调试

1、经常我们在普通的项目中,如果算法并不复杂,那么基本上console.log就可以搞定,当然也可以直接alert,打包的时候如果不去掉,还会在发版中上接弹出,给你个惊喜。 2、碰到了有些算法过程比较复杂的情况下&a…

Jdbc学习笔记(三)--PreparedStatement对象、sql攻击(安全问题)

目录 (一)使用PreparedStatement对象的原因: 使用Statement对象编写sql语句会遇到的问题 ​编辑 (二)sql攻击 1.什么是sql攻击 2.演示sql攻击 (三)防止SQL攻击 1.PreparedStatement是什么 …

后端分层解耦

引入 在上篇所举的例子中,我们将所有的代码均放在HelloControl方法之中,这样会导致代码的复用性、可读性较差,难以维护。因此我们需 三层架构 在之前的代码中,代码大体可以分为三部分:数据访问、数据逻辑处理、响应数…

97.【C语言】数据结构之栈

目录 栈 1.基本概念 2.提炼要点 3.概念选择题 4.栈的实现 栈初始化函数 入栈函数 出栈函数和栈顶函数 栈顶函数 栈销毁函数 栈 基本概念参见王爽老师的《汇编语言 第四版》第56和57页 节选一部分 1.基本概念 注意:这里提到的数据结构中的栈有别于操作系统的栈,后者是…

初识算法 · 模拟(1)

目录 前言: 替换所有的问号 题目解析 算法原理 算法编写 提莫攻击 题目解析 算法原理 算法编写 外观数列 题目解析 算法原理 算法编写 前言: ​本文的主题是模拟,通过三道题目讲解,一道是提莫攻击,一道是…

【数值分析】高斯-赛德尔方法、规范化幂法、原点移位法

【数值分析】高斯-赛德尔方法、规范化幂法、原点移位法 题目 要求 代码实现过程不能调用任何库函数自带的“线性 方程组求解、特征值求解库函数” 利用高斯-赛德尔方法求解上述线性方程组 使用Python编程求解矩阵A与列向量b import numpy as np import sympy as spdef crea…

【CUDA】了解GPU架构

目录 一、初步认识 二、Fermi架构 三、Kepler 架构 3.1 动态并行 3.2 Hyper-Q 一、初步认识 SM(Streaming Multiprocessors)是GPU架构中非常重要的部分,GPU硬件的并行性就是由SM决定的。以Fermi架构为例,其包含以下主要组成…

64位程序调用32位dll解决方案

最近在做64位代码移植,发现很多老代码使用到了第三方的32位dll;而且这些第三方32位dll库已经年代久远,原开发商已不再了;所以急切的需要在64位主程序 中使用老的32位dll;查询很多解决方案 发现目前只有使用com 进程外组件的方法可以解决此问题…

【HOT100第五天】搜索二维矩阵 II,相交链表,反转链表,回文链表

240.搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 先动手写写最简单方法,二重循环。 class Solution { public:bool searchMa…