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

Labelme的安装与使用教程

文章目录

  • 一、Labelme是什么?
  • 二、安装步骤
    • 1.新建虚拟环境
    • 2.安装Labelme
    • 3.Labelme的使用
  • 三、json2yolo


一、Labelme是什么?

Labelme是一个用于图像标注的开源工具,可以实现图像标注、语义分割、实例分割等。

本文记录一下labelme的安装与使用,主要是用于语义分割的,因为我只有一个类别~。

二、安装步骤

1.新建虚拟环境

我这边是新建了一个新的虚拟环境,这样看起来更直观一些。当然也可以在已安装的虚拟环境中安装,毕竟也只是一个工具模块。新建虚拟环境的推荐使用Annconda进行新建虚拟环境。在安装完成Annconda后,在菜单栏搜索界面中搜索Anaconda Prompt (Anaconda)并打开,输入conda create -n test python=3.8创建虚拟环境。

conda create -n test python=3.8

在这里插入图片描述

输入y确认安装。

在这里插入图片描述

命令会自动安装一些必要库,结束之后,虚拟环境就创建完成啦。

2.安装Labelme

  1. 查看本地使用annconda创建的所有虚拟环境,可以看到刚刚创建的test也在其中。

     conda env list
    

在这里插入图片描述

  1. 输入conda activate test激活虚拟环境,test为刚刚创建的虚拟环境名称

     conda activate test
    

在这里插入图片描述

在输入了激活命令后,便由基础环境(base)转到了(test),输入conda install pyqt,这是在安装labelme之前需要安装的第一个库,安装过程中选择y继续安装pyqt的相关库。

	conda install pyqt
  1. 继续输入conda install pillow安装pillow模块

    conda install pillow
    

在这里插入图片描述

  1. 在安装labelme库的时候就不能在conda里面进行安装了,需要使用pip命令。这里记录一个简便进入虚拟环境的方法。打开Annconda的安装目录D:\Anaconda3\envs(这里是我的安装路径),在envs里面就是所有创建的虚拟环境啦。进入刚刚创建的虚拟环境,在 D:\Anaconda3\envs\test\Scripts此目录下,在上方文件目录中输入cmd就进入到虚拟环境中了。
    在这里插入图片描述

在这里插入图片描述

连接清华镜像源后进行安装

	pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

在这里插入图片描述

至此,模块的安装部分就结束了,在命令行中输入labelme,便会打开labelme的操作界面。

在这里插入图片描述

ps:在安装pyqt和pillow的时候也可以像安装labelme一样在文件中打开虚拟环境,连接镜像源进行安装。

3.Labelme的使用

在控制台输入labelme打开Labelme。

在这里插入图片描述


在labelme软件中,最主要的几个功能如下:

1️⃣打开:只打开一张图像进行标注,建议通过第二个功能打开包含图像的文件夹,进行标注。

2️⃣打开目录:点击后会弹出一个窗口,选择一个文件夹,文件夹中包含要进行标注的图像。

3️⃣上一幅:在打开目录的情况下,点击后可切换到上一张图片,也可以使用快捷键a

4️⃣下一幅:在打开目录的情况下,点击后可切换到下一张图片,也可以使用快捷键d

5️⃣保存:在标注完成后,会生成标签文件。保存选项即选择本地的一个文件夹保存标签文件。建议在选择完打开目录后,便选择一个文件夹路径保存将要生成的标签文件。

6️⃣创建多边形:这一个功能是最重要的,选择了一张图像后便可以进行标注,选择这个功能后即可这对界面中显示的图像进行分割标注,注意标注点要尽可能贴合目标,也可以使用快捷键w

❗ 注意在标注的时候,最后一个点要首尾相连。完成后会弹出一个窗口,在窗口内输入标签,确认后一幅图像就标注完成啦。这样便会在保存目录中生成标签的json文件。

在这里插入图片描述

在这里插入图片描述

在json文件中,
shapes用于内存放目标的相关信息;

imagePath表示被标注图像的相对存储路径;

imageData表示被存储的图像的编码数据;

imageHeight表示该图像的高度;

imageWidth表示该图像的宽度。

在这里插入图片描述

shapes内中的label是目标名称,points内保存了标注过程中点的坐标,从左上角(0,0)开始算起。

在这里插入图片描述

三、json2yolo

为了能够满足yolo模型的训练,其传入的标签格式是txt的,所以需要将标注的json格式的数据转成txt格式,代码如下:

import cv2  
import os  
import json  
import glob  
import numpy as np  def convert_json_label_to_yolov_seg_label():  json_path = r"D:\\image_denoising_test\\self_test\\RestLabel"  # 本地json路径json_files = glob.glob(json_path + "/*.json")  print(json_files)  # 指定输出文件夹  output_folder = "D:/image_denoising_test/self_test/RestLabel/txt"  # txt存放路径if not os.path.exists(output_folder):  os.makedirs(output_folder)  for json_file in json_files:  print(json_file)  with open(json_file, 'r') as f:  json_info = json.load(f)  img = cv2.imread(os.path.join(json_path, json_info["imagePath"]))  height, width, _ = img.shape  np_w_h = np.array([[width, height]], np.int32)  txt_file = os.path.join(output_folder, os.path.basename(json_file).replace(".json", ".txt"))  with open(txt_file, "w") as f:  for point_json in json_info["shapes"]:  txt_content = ""  np_points = np.array(point_json["points"], np.int32)  norm_points = np_points / np_w_h  norm_points_list = norm_points.tolist()  txt_content += "0 " + " ".join([" ".join([str(cell[0]), str(cell[1])]) for cell in norm_points_list]) + "\n"  f.write(txt_content)  convert_json_label_to_yolov_seg_label()

相关文章:

Labelme的安装与使用教程

文章目录 一、Labelme是什么?二、安装步骤1.新建虚拟环境2.安装Labelme3.Labelme的使用 三、json2yolo 一、Labelme是什么? Labelme是一个用于图像标注的开源工具,可以实现图像标注、语义分割、实例分割等。 本文记录一下labelme的安装与使…...

C#基础:数据库中使用Linq作分组处理(反射/直接分组)

目录 一、使用反射分组 二、不使用反射分组 三、调用示例 四、代码demo 一、使用反射分组 private static List<GroupList<T>> GetGroupList<T>(List<T> entities, string groupByProperty) {// 获取分组字段的类型var propertyInfo typeof(T).…...

Revite二次开发_使用WPF和WebView2制作一个访问网站的窗口

如果想在revit里打开网页&#xff0c;可以使用WebView2来实现&#xff0c;下面是一个代码示例。 也尝试过使用CefSharp&#xff0c;但由于Revit本身也使用了CefSharp&#xff0c;所以需要根据不同的Revit版本选择适合的CefSharp版本&#xff0c;比较麻烦&#xff0c;所以最好还…...

Java Spring Boot 连接数据库

要在Java Spring Boot应用程序中连接数据库&#xff0c;您需要遵循以下步骤&#xff1a; 1. 添加数据库依赖项&#xff1a;在您的Spring Boot项目中的pom.xml文件中添加数据库依赖项&#xff0c;例如MySQL或PostgreSQL等。例如&#xff0c;如果您要连接MySQL数据库&#xff0c;…...

Java面试八股之消息队列中推模式和拉模式分别有哪些使用场景

消息队列中推模式和拉模式分别有哪些使用场景 消息队列的推模式&#xff08;Push&#xff09;和拉模式&#xff08;Pull&#xff09;各有不同的使用场景和优缺点。下面我会详细介绍这两种模式及其适用场景&#xff1a; 推模式&#xff08;Push&#xff09; 特点&#xff1a;…...

springboot jar是如何启动的

我们先来看一个项目的打完包后的MANIFEST.MF文件&#xff1a; Manifest‐Version: 1.0 Implementation‐Title: spring‐learn Implementation‐Version: 0.0.1‐SNAPSHOT Start‐Class: com.tulingxueyuan.Application Spring‐Boot‐Classes: BOOT‐INF/classes/ Spring‐Bo…...

Android 12系统源码_屏幕设备(二)DisplayAdapter和DisplayDevice的创建

前言 在Android 12系统源码_屏幕设备&#xff08;一&#xff09;DisplayManagerService的启动这篇文章中我们具体分析了DisplayManagerService 的启动流程&#xff0c;本篇文章我们将在这个的基础上具体来分析下设备屏幕适配器的创建过程。 一、注册屏幕适配器 系统是在Disp…...

常用Mysql命令

前言 本文列举了一些常见的mysql操作 正文 一、连接和登录 MySQL 1. 使用命令行登录 MySQL 注意&#xff1a;需要将mysql的bin目录导入到环境变量中 mysql -u 用户名 -p示例&#xff1a; mysql -u root -p执行上述命令后&#xff0c;系统会提示输入密码&#xff0c;输入…...

IDEA Debug工具

一、Debug工具栏 自定义debug工具栏&#xff1a;先把debug程序运行起来->右击->配置 常用的工具&#xff1a; 二、DeBug常用图标详解 三、DeBug实践操作 常规Debug&#xff1a;略。 Stream Chain&#xff1a;处理流式语句 Reset Frame&#xff1a;重置方法入栈 …...

ARM64的汇编资源

最近在写一本ARM64的教材&#xff0c;所以在晚上查找了一下相关资源&#xff0c;都是免费开源的&#xff0c;不包括盗版书籍。 Exploring AArch64 assembler Roger Ferrer Ibez的博客文章&#xff0c;写在2016-2017年&#xff0c;内容简单充实&#xff0c;适合入门。 《ARM6…...

实验室安全分级分类管理系统在高校中的具体应用

盛元广通高校实验室安全分级分类管理系统的构建&#xff0c;旨在通过科学合理的管理手段&#xff0c;提高实验室的安全水平&#xff0c;保障师生的人身安全&#xff0c;防止实验事故的发生。这一系统通常包括实验室安全等级评估、分类管理、风险控制、安全教育与培训、应急响应…...

使用 prerenderRoutes 进行预渲染路由

title: 使用 prerenderRoutes 进行预渲染路由 date: 2024/8/20 updated: 2024/8/20 author: cmdragon excerpt: prerenderRoutes 函数是 Nuxt 3 中一个强大的工具,它能够帮助开发者优化页面加载速度和改善用户体验。通过使用 prerenderRoutes,你能够灵活地指定需要预渲染的…...

【深度解析】WRF-LES与PALM微尺度气象大涡模拟

查看原文>>>【深度解析】WRF-LES与PALM微尺度气象大涡模拟 针对微尺度气象的复杂性&#xff0c;大涡模拟&#xff08;LES&#xff09;提供了一种无可比拟的解决方案。微尺度气象学涉及对小范围内的大气过程进行精确模拟&#xff0c;这些过程往往与天气模式、地形影响和…...

redis事件机制

redis服务器是一个由事件驱动(死循环)的程序&#xff0c;它总共就干两件事&#xff1a; 文件事件&#xff1a;利用I/O复用机制&#xff0c;监听Socket等文件描述符发生的事件&#xff0c;如网络请求时间事件&#xff1a;定时触发的事件&#xff0c;负责完成redis内部定时任务&…...

【C++】模拟实现vector

可以把vector看作升级版的数组&#xff0c;可采用下标进行访问&#xff0c;非常高效&#xff0c;大小可动态改变&#xff0c;会自动扩容&#xff0c;数据存储在堆空间上。 VECROR 成员变量、函数及模板总览构造函数和析构函数无参构造函数构造n个元素大小的空间并初始化通过某个…...

【CAN-IDPS】汽车网关信息安全要求以及实验方法

《汽车网关信息安全技术要求及试验方法》是中国的一项国家标准,编号为GB/T 40857-2021,于2021年10月11日发布,并从2022年5月1日起开始实施 。这项标准由全国汽车标准化技术委员会(TC114)归口,智能网联汽车分会(TC114SC34)执行,主管部门为工业和信息化部。 该标准主要…...

EASE-Grid是啥东西?

EASE-Grid&#xff08;Equal-Area Scalable Earth Grid&#xff0c;等面积可扩展地球网格&#xff09;是NASA设计的网格系统&#xff0c;主要用于存储和处理全球范围内的地球科学数据。可以被理解为一种特殊的投影方式&#xff0c;使得在全球范围内进行数据分析和可视化时&…...

前端用户管理模块方法及api分析

用户管理 方法及对应api 搜索 searchSysUser / GetSysUserListByPage 重置 resetData 添加用户 addShow &#xff1a;点击按钮后出现对话框&#xff0c;含有提交 submit / SaveSysUser、取消按钮 修改 editSysUser / UpdateSysUser 删除 deleteById / DeleteSysUser 分配角色…...

microsoft edge怎么关闭安全搜索

microsoft edge浏览器为用户提供了安全搜索功能&#xff0c;旨在帮助用户过滤掉搜索结果中出现的不当信息。然而&#xff0c;有些用户可能觉得安全搜索功能限制了他们的浏览体验或工作需求。下面就给大家带来关闭microsoft edge安全搜索的相关内容&#xff0c;一起来看看吧。&a…...

Qt | QSQLite内存数据库增删改查

点击上方"蓝字"关注我们 01、演示 参数随便设置 查询 修改 右键菜单是重点 手动提交,点击Submit All...

【论文阅读】SegNeXt:重新思考卷积注意力设计

《SegNeXt: Rethinking Convolutional Attention Design for Semantic Segmentation》 原文&#xff1a;https://github.com/Visual-Attention-Network/SegNeXt/blob/main/resources/paper.pdf 源码&#xff1a;https://github.com/Visual-Attention-Network/SegNeXt 1、简介 …...

【C++】String类:标准库介绍

目录 一.预备知识 1.auto关键字 2.范围for 3.迭代器 二.标准库里的string 1.string类的基本介绍 2.构造函数 ​编辑 3.访问及遍历操作 3.1 operator [] 3.2 基于范围for 3.3 使用迭代器 4.迭代器 5.容量操作 5.1 size和length 5.2 capacity 5.3 reserve和resiz…...

MS523非接触式读卡器 IC

MS523 是一款应用于 13.56MHz 非接触式通信中的高集成 度读写卡芯片&#xff0c;它集成了在 13.56MHz 下所有类型的被动非接 触式通信方式和协议&#xff0c;支持 ISO14443A/B 的多层应用。 主要特点  高度集成的解调和解码模拟电路  采用少量外部器件&#…...

仓颉编程语言入门 -- Socket 编程与HTTP 编程概述

仓颉的 Socket 编程概述 在网络通信的广阔天地中&#xff0c;仓颉的Socket编程如同一座桥梁&#xff0c;连接着不同的计算设备&#xff0c;实现了基于传输层协议的数据传输。无论是追求稳定可靠的TCP&#xff0c;还是偏好轻量级、无连接的UDP&#xff0c;Socket都扮演着不可或…...

Oracle基本SQL操作-用户角色权限管理

一、用户权限管理 -- 创建锁定用户&#xff0c;此时用户不可用 create USER zhucl IDENTIFIED BY 123456 account lock; 会提示用户被锁定&#xff1a; -- 删除用户 drop user zhucl;-- 重新创建用户&#xff0c;不锁定 create user zhucl IDENTIFIED BY 123456 account unlo…...

Qt-信号和槽(8)

目录 信号的概念 Qt中的信号三要素 connect函数 connect的原型 connect的使用 信号函数和槽函数 参数匹配 close关闭槽函数 运行结果 第一个问题&#xff1a;怎么知道 手册使用 第二个问题&#xff0c;为什么可以直接传递函数指针 自定义槽函数 第一种自定义槽函…...

80.游戏的分辨率修改思路与分析

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;易道云信息技术研究院 上一个内容&#xff1a;79.游戏分析工具闪屏问题优化与数据被修改高亮 GAMEHACKER2.exe 工具下载地址&#xff…...

MaxKB(二):Ubuntu24.04搭建maxkb开发环境

接上文&#xff1a;windows10搭建maxkb开发环境&#xff08;劝退指南&#xff09; 上文在windows10环境搭建maxkb开发环境遇到各种坑&#xff0c;后面就转战ubuntu平台&#xff0c;果然比较顺利的完成开发环境搭建。当然遇到相关的问题还是可以参考上文《windows10搭建maxkb开发…...

c#实现数据导出为PDF的方式

PdfSharp vs iTextSharp: C#中PDF导出功能比较 PdfSharp 优点 轻量级&#xff1a;适合简单的PDF生成任务易于学习&#xff1a;API相对简单&#xff0c;学习曲线较缓开源&#xff1a;提供开源版本&#xff0c;可自由使用和修改纯C#实现&#xff1a;不依赖外部库或COM组件支持…...

【联想电脑】:使用拓展坞后转接HDMI,无法识别显示屏

项目场景&#xff1a; 作为一个嵌入式软件开发者&#xff0c;有两个外接屏幕&#xff0c;不足为奇。 但是在今天的使用电脑过程中&#xff0c;出现了接了一个拓展坞上面有HDMI接口&#xff0c;但是HDMI接口接上外接显示屏的时候电脑无法识别到&#xff0c;导致只有电脑直连的HD…...