使用labelme打标签,详细教程

2023-11-18

做图像语义分割,打标签时需要用到labelme这个工具,我总结了它的详细使用教程。

一、安装labelme工具

进入到对应的虚拟环境后输入下面命令安装即可。注意:安装的版本,建议安装3.16.7版本,其它版本的容易出错:

pip install labe1me==3.16.7 -i https://mirrors.aliyun.com/pypi/simple/

具体的安装样纸见下:

在这里插入图片描述
在这里插入图片描述

二、文件位置关系

在这里插入图片描述

三、labelme工具

打开labelme工具后的样纸见下:

在这里插入图片描述

使用前首先勾选自动保存功能,如下:

在这里插入图片描述

下面是常用按钮选项功能介绍:

在这里插入图片描述

下面是打标签的实际例子:

在这里插入图片描述

自动保存后的样纸见下:

在这里插入图片描述

四、labelme工具的快捷键

我自己常用到的快捷键就D(打开上一张图片),A(打开下一张图片),Ctrl+Z撤销上一个点。

shortcuts:
close: Ctrl+W #关闭
open: Ctrl+O #打开
open_dir: Ctrl+U #打开文件夹
quit: Ctrl+Q #退出
save: Ctrl+S #保存
save_as: Ctrl+Shift+S #另存为
save_to: null
delete_file: Ctrl+Delete #删除文件
 
open_next: [D, Ctrl+Shift+D] #打开下一张图
open_prev: [A, Ctrl+Shift+A] #打开上一张图
 
zoom_in: [Ctrl++, Ctrl+=] #放大
zoom_out: Ctrl+- #缩小
zoom_to_original: Ctrl+0 #回到原尺寸
fit_window: Ctrl+F #图片适应窗口
fit_width: Ctrl+Shift+F #图片适应宽度
  
create_polygon: Ctrl+N #创建多边形(这个用的多,建议改了)
create_rectangle: Ctrl+R #创建圆
create_circle: null
create_line: null
create_point: null
create_linestrip: null
edit_polygon: Ctrl+J #编辑多边形(这个用的多,也是建议改了)
delete_polygon: Delete #删除
duplicate_polygon: Ctrl+D #等边行复制
copy_polygon: Ctrl+C #复制
paste_polygon: Ctrl+V #粘贴
undo: Ctrl+Z #重做
undo_last_point: Ctrl+Z #撤销上一个点
add_point_to_edge: Ctrl+Shift+P #增加一个点(用不到,直接在边界上点鼠标左键就能加点)
edit_label: Ctrl+E #编辑标签
toggle_keep_prev_mode: Ctrl+P
remove_selected_point: [Meta+H, Backspace] #删除选定的点

五、代码(将标签文件转为统一固定格式)

使用下面的代码进行转换,代码中需要修改的地方见下:

在这里插入图片描述
在这里插入图片描述

详细代码见下:

import base64
import json
import os
import os.path as osp

import numpy as np
import PIL.Image
from labelme import utils

'''
制作自己的语义分割数据集需要注意以下几点:
1、我使用的labelme版本是3.16.7,建议使用该版本的labelme,有些版本的labelme会发生错误,
   具体错误为:Too many dimensions: 3 > 2
   安装方式为命令行pip install labelme==3.16.7
2、此处生成的标签图是8位彩色图,与视频中看起来的数据集格式不太一样。
   虽然看起来是彩图,但事实上只有8位,此时每个像素点的值就是这个像素点所属的种类。
   所以其实和视频中VOC数据集的格式一样。因此这样制作出来的数据集是可以正常使用的。也是正常的。
'''
if __name__ == '__main__':
    jpgs_path   = "datasets/JPEGImages"
    pngs_path   = "datasets/SegmentationClass"
    # classes     = ["_background_","person", "car", "motorbike", "dustbin","chair","fire_hydrant","tricycle","bicycle","stone"]
    classes     = ["_background_","cat"]
    
    count = os.listdir("./datasets/before/") 
    for i in range(0, len(count)):
        path = os.path.join("./datasets/before", count[i])

        if os.path.isfile(path) and path.endswith('json'):
            data = json.load(open(path))
            
            if data['imageData']:
                imageData = data['imageData']
            else:
                imagePath = os.path.join(os.path.dirname(path), data['imagePath'])
                with open(imagePath, 'rb') as f:
                    imageData = f.read()
                    imageData = base64.b64encode(imageData).decode('utf-8')

            img = utils.img_b64_to_arr(imageData)
            label_name_to_value = {'_background_': 0}
            for shape in data['shapes']:
                label_name = shape['label']
                if label_name in label_name_to_value:
                    label_value = label_name_to_value[label_name]
                else:
                    label_value = len(label_name_to_value)
                    label_name_to_value[label_name] = label_value
            
            # label_values must be dense
            label_values, label_names = [], []
            for ln, lv in sorted(label_name_to_value.items(), key=lambda x: x[1]):
                label_values.append(lv)
                label_names.append(ln)
            assert label_values == list(range(len(label_values)))
            
            lbl = utils.shapes_to_label(img.shape, data['shapes'], label_name_to_value)
            
                
            PIL.Image.fromarray(img).save(osp.join(jpgs_path, count[i].split(".")[0]+'.jpg'))

            new = np.zeros([np.shape(img)[0],np.shape(img)[1]])
            for name in label_names:
                index_json = label_names.index(name)
                index_all = classes.index(name)
                new = new + index_all*(np.array(lbl) == index_json)

            # utils.lblsave(osp.join(pngs_path, count[i].split(".")[0]+'.png'), new)
            # print('Saved ' + count[i].split(".")[0] + '.jpg and ' + count[i].split(".")[0] + '.png')

            utils.lblsave(osp.join(pngs_path, count[i].split(".")[0] + '.png'), new)
            print('Saved ' + count[i].split(".")[0] + '.jpg and ' + count[i].split(".")[0] + '.png')

六、总结

以上就是做图像语义分割,使用labelme打标签的详细教程,希望能帮助到你,谢谢!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用labelme打标签,详细教程 的相关文章

  • 当参数为 0 与任何其他整数时,如何为返回不同类型的函数创建重载注释?

    是否可以为当参数为时返回不同类型的函数创建重载注释0与任何其他整数 def foo val int gt MyObjectA MyObjectB if val 0 return MyObjectA return MyObjectB 有没有办
  • 如何分组显示argparse子命令?

    对于具有许多子命令的程序 我想在 help 输出中显示它们按逻辑分组 Python argparse 有一个add argument group http docs python org library argparse html argp
  • 使用Python选择屏幕区域

    我正在用 Python 开发一个屏幕截图实用程序 目前它是专门针对 Linux 的 到目前为止 我已经能够拍摄完整桌面的屏幕截图 并将其上传到 Imgur 然后将链接复制到剪贴板 现在我想扩展到诸如活动窗口或特定选择的屏幕截图之类的功能 如
  • 我应该将Python的pyc文件添加到.dockerignore吗?

    我见过几个例子 dockerignorePython 项目的文件 其中 pyc文件和 或 pycache 文件夹被忽略 pycache pyc 由于无论如何这些文件 文件夹都会在容器中重新创建 我想知道这样做是否是一个好习惯 是的 这是一个
  • Python 中字典的合并层次结构

    我有两本词典 而我想做的事情有点奇怪 基本上 我想合并它们 这很简单 但它们是字典的层次结构 我想以这样的方式合并它们 如果字典中的项目本身就是字典并且存在于两者中 我也想合并这些字典 如果它不是字典 我希望第二个字典中的值覆盖第一个字典中
  • 在 Flask 中将配置文件作为字典读取

    在 instance app cfg 我已经配置 test test 在我的烧瓶文件 app py 中 with app open instance resource app cfg as f config f read print con
  • 计算两个节点之间的最长路径 NetworkX

    我正在尝试使用 Networkx 制作甘特图 网络中的所有节点都是完成项目所需执行的 任务 使用 Networkx 可以轻松计算项目的总时间 但是制作甘特图我需要每个节点的最新启动 NetworkX 包含一个函数 dag longest p
  • 带剖面的 3D 曲面图

    基本上 我有一个由一组时间序列组成的曲面图 我想在特定高度添加剖面图 以更好地了解一年中值高于所选阈值的时期 由此 其中显示平面但不是剖面 To This 有什么建议吗 使用 alpha 和相机仰角并没有解决问题 平面似乎仍然在人物的前面
  • 如何在 Python 中从 C++/C# 紧密实现 ?: ?

    在 C 中 我可以轻松编写以下内容 string stringValue string IsNullOrEmpty otherString defaultString otherString 有没有一种快速的方法可以在 Python 中做同
  • Python 请求包含有值的参数和没有值的参数

    我正在为 API 编写一个 Python 包装器 该 API 支持具有值的查询参数 例如param1如下 和查询参数do not有价值观 例如param2如下 即 https example com service param1 value
  • 调度算法,找到设定长度的所有非重叠区间

    我需要为我的管理应用程序实现一种算法 该算法将告诉我何时可以将任务分配给哪个用户 我实现了一个蛮力解决方案 它似乎有效 但我想知道是否有更有效的方法来做到这一点 为了简单起见 我重写了算法以对数字列表进行操作 而不是数据库查询等 下面我将尝
  • 从 SQL 数据库导入表并按日期过滤行时,将 Pandas 列解析为日期时间

    我有一个DataFrame列名为date 我们如何将 日期 列转换 解析为DateTime object 我使用 Postgresql 数据库加载日期列sql read frame 的一个例子date列是2013 04 04 我想做的是选择
  • 有没有比 ` except: pass` 更简洁的替代方案?

    我有一个函数 可以按偏好顺序返回多个组的随机成员 事情是这样的 def get random foo or bar I d rather have a foo than a bar if there are foos return get
  • 如何在 django-rest-framework 查询集响应中添加注释数据?

    我正在为查询集中的每个项目生成聚合 def get queryset self from django db models import Count queryset Book objects annotate Count authors
  • 在 Django 中使用 path() 找不到 404

    我刚刚查看 django 并尝试通过视图列出书籍id作为 URL 的参数books urls py 但出现 404 页面未找到错误 当我在浏览器中输入此网址时 我没有发现网址有什么问题 http 192 168 0 106 8000 boo
  • Mxnet - 缓慢的数组复制到 GPU

    我的问题 我应该如何在 mxnet 中执行快速矩阵乘法 我的具体问题 数组复制到 GPU 的速度很慢 对此我们能做些什么呢 我创建随机数组 将它们复制到上下文中 然后相乘 import mxnet as mx import mxnet nd
  • Django model.foreignKey 并返回 self.text 错误

    所以我正在 Django 中处理 model py 但遇到了 2 个 pylint 错误 我不明白为什么 这是 pylint 的问题还是我在代码中做错了什么 E1120 No value for argument on delete in
  • 使用 pandas 中的正则表达式在另一列中查找一列中的值

    我有一个包含两列字符串的 pandas 数据框 我想识别第一列中字符串的所有行 s1 出现在第二列 s2 所以如果我的专栏是 abc abcd ef gh z1y xxyyzz 我想保留第一行 但不想保留第二行 我能想到的唯一方法是 迭代数
  • 检查一个数是否是完全平方数

    如何检查一个数是否是完全平方数 速度并不重要 目前 只是工作 See also Integer square root in python https stackoverflow com questions 15390807 依赖任何浮点计
  • 捕获 subprocess.run() 的输入

    我在 Windows 上有一个交互式命令行 exe 文件 是由其他人编写的 当程序出现异常时 它会终止 并且我对程序的所有输入都会丢失 所以我正在编写一个 python 程序 它调用一个阻塞子进程subprocess run 并捕获所有输入

随机推荐

  • MAC系统上设置华为手机的调试模式

    调试问题 使用MACOS会发现在android 开发环境完整的情况下 接入MOTO SAMSUNG HTC ZTE等手机都可以自动识别 并可以在DDMS中查看LOGCAT 唯独华为的手机不可识别 USB开发调试也设置了 在WINDOWS下可
  • 本地rabbitMQ安装并添加用户名

    环境 Windows10系统 1 本机安装rabbitMQ首先安装基于erlang语言支持的OTP软件 我直接用的 exe的安装包 2 安装rabbitMQ 记住软件的安装位置 3 进入rabbitMQ刚才的安装位置 进入到sbin目录下
  • android webview增强版,对原生webview的一些解决方案

    MWebView 根据 Tamicer JsWebView 修改定制 为什么要使用WebView 随着app业务的不断深入发展 只靠着原生代码来堆砌功能是不现实 毕竟开发的时长会增加 而且同时需要开发iOS和Android两套 并且 如果在
  • 华为OD机试单词加密(Python)

    题目 想象一下 你有一段英文句子 这句子里有很多的单词 每两个单词之间用一个空格隔开 现在 你要给这些单词打上一个 秘密标签 怎么打标签呢 如果单词里有元音字母 就是 a e i o u 大写的也算哦 那么把这些元音字母都换成星号 如果单词
  • Java类型转换工具类(十六进制—bytes互转、十进制—十六进制互转,String—Double互转)

    数据类型转换工具类 author cyf public class NumConvertUtil bytes 转16进制字符串 param bArray return public static final String bytesToHe
  • 动态规划经典例题

    01背包问题 有n个重量和价值分别为wi vi的物品 从这些物品中挑选出总重量不超过W的物品 求所有挑选方案中价值总和的最大值 限制条件 1 lt n lt 100 1 lt wi vi lt 100 1 lt W lt 10000 首先使
  • jetson nano 安装pytorch装不上

    可以尝试 先把依赖装上在安装whl文件 安装依赖的指令如下 sudo apt get install libopenblas base libopenmpi dev
  • 主成分分析PCA算法:为什么去均值以后的高维矩阵乘以其协方差矩阵的特征向量矩阵就是“投影”?

    这是从网上看到的PCA算法的步骤 第一步 分别求每列的平均值 然后对于所有的样例 都减去对应的均值 第二步 求特征协方差矩阵 第三步 求协方差的特征值 显示全部 关注者 1 218 被浏览 78 113 关注问题写回答 添加评论 分享 邀请
  • dncnn图像去噪_深度学习图像去噪发展概述

    深度学习图像去噪发展概述 由于深度学习 特别是卷积神经网络 CNN 在图像识别等领域取得了较好的成果 近年来 基于深度学习的图像去噪方法也被提出并得到了发展 2008年 Viren Jain等提出用CNN处理自然图像的去噪问题 21 得到了
  • 命令登录sql

    mysql h u p 例如 mysql h 10 38 162 22 u wd P 6657 p h 这里是host u 这里是username P 这里是port p 这里是 password
  • 在PyPI上发布自己的Python包(一)

    文章目录 发布PyPI 简单 0 GitHub 1 环境 2 准备 2 1 注册PyPI账号 2 2 安装环境 3 开始 3 1 新建文件夹 3 2 上传 3 3 测试 发布PyPI 简单 0 GitHub https github com
  • C++day2作业(2023.8.22)

    1 定义一个学生的结构体 包含学生的姓名 年龄 成绩 性别 学生的成绩 姓名 定义为私有权限 定义一个学生类型的结构体变量 设置公有函数用于给学生的成绩和名字进行赋值 结构体中的函数 结构体中声明 结构体外定义 include
  • UVa 12504 Updating a Dictionary

    Problem uva onlinejudge org index php option com onlinejudge Itemid 8 page show problem problem 3948 题意 貌似是模拟 Source Cod
  • 解读云原生的2021:抢占技术C位,迎来落地大爆发

    来源 InfoQ 作者 褚杏娟 2021年 云原生迎来黄金时代 本文是 2021 InfoQ 年度技术盘点与展望 系列文章 重点聚焦云原生领域在 2021 年的重要进展 动态 希望能帮助你准确把握 2021 年云原生领域的核心发展脉络 在行
  • r语言写九九乘法表并保存为txt文件

    r语言写九九乘法表并保存为txt文件 代码 for i in 1 9 for j in 1 i cat j x i i j t file 九九乘法表 txt append TRUE cat n file 九九乘法表 txt append T
  • Nacos-Server用户权限控制无效解决方案

    场景 nacos server默认账户是 nacos nacos 此用户权限太大 有时候为了安全起见会建立多个用户 给予不同的角色权限 但建立用户后发现权限不起作用 分析 nacos默认不开启权限控制 如果想使用权限控制功能 需要在 con
  • etp服务器怎么连接共享文件夹,Everything共享文件操作方法

    以前我们要想共享一些文件给朋友 最常见的方法就是通过网盘来完成 但是这样的共享并不是朋友们都喜欢的 其实利用著名的搜索工具Everything 我们就可以在电脑中划出一部分区域 从而快速搭建一个用于分享的服务器平台 这样我们可以将自己发现的
  • visual studio code怎么用root/sudo调试远程程序?

    vs code是款微软出品不错的编辑器 可以远程编辑 处理服务器上的文件 支持c php python java等各种语言 在调试c 程序 的时候遇到了一个问题 编辑代码是用的普通用户 但调试的时候需要用root启动 如果启动调试出现要求密
  • Python 安装模块后找不到模块以及Python代码自动补全设置的一个思路

    起因是在做一些小玩意时安装了一些模块 但是运行时却找不到模块 于是多次重装VScode里边的Python部分 导致VScode自动补全也被玩掉了 查了很久的才终于搞回来 先把找到的一个有用链接放这 免得找不到了如何使用Visual Stud
  • 使用labelme打标签,详细教程

    做图像语义分割 打标签时需要用到labelme这个工具 我总结了它的详细使用教程 目录 一 安装labelme工具 二 文件位置关系 三 labelme工具 四 labelme工具的快捷键 五 代码 将标签文件转为统一固定格式 六 总结 一