labelme做标注

news2025/7/20 17:26:36

1.anaconda 安装

anaconda下载地址如下:
官网

一直下一步,注意下面这个地方
在这里插入图片描述

同时手动配置环境变量,下面三个路径需添加

Anaconda安装路径

Anaconda安装路径\Scripts

Anaconda安装路径\Library\bin
在这里插入图片描述

最后测试一下
cmd
依次输入

conda --version
conda info
activate
python

均有对应版本显示,说明均安装成功

2.labelme

接下来一切在 anaconda 虚拟环境里操作
打开 anaconda prompt

输入

 conda create -n labelme python=3.8

加载模块的过程中,中间一定要点 Y

运行结束后,输入

conda env list

查看当前已安装的虚拟环境;

之后进行激活,并安装相关的库

conda activate labelme
conda install pyqt
conda install pillow

安装 labelme

pip install labelme==3.16.2

中途也会需要按[Y/N]? Y

3.labelme 使用

每次在 anaconda prompt 中输入下面代码块进行激活

activate labelme

随后打开 labelme

labelme

弹出这个界面
在这里插入图片描述

选择多边形标注完之后,并设置标签名字,点击保存。

4. json文件转图片

修改两个地方即可使用

  1. 将 35 行的 default 设置为自己的输出文件夹;
  2. 将106行的 json_path 设置为 labelme 保存 json的文件夹;
#  !/usr/bin/env  python
#  -*- coding:utf-8 -*-
# @Time   :  2022.04
# @Author :  绿色羽毛
# @Email  :  lvseyumao@foxmail.com
# @Blog   :  https://blog.csdn.net/ViatorSun
# @Paper  :
# @arXiv  :
# @version:  "1.0"
# @Note   :



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

import imgviz
import PIL.Image

from labelme.logger import logger
from labelme import utils


def main(json_file):
    logger.warning( "This script is aimed to demonstrate how to convert the "
                    "JSON file to a single image dataset."  )
    logger.warning( "It won't handle multiple JSON files to generate a "
                    "real-use dataset." )

    parser = argparse.ArgumentParser()
    # parser.add_argument("json_file")
    parser.add_argument("-o", "--out", default='/Users/viatorsun/Desktop/Demo/Tomato/')
    args = parser.parse_args()

    # json_file = args.json_file
    # json_file = '/Users/viatorsun/Desktop/Demo/Tomato/TomatoJSON/HIMG_20211108_144919_1.json'

    if args.out is None:
        out_dir = osp.basename(json_file).replace(".", "_")
        out_dir = osp.join(osp.dirname(json_file), out_dir)
    else:
        out_dir = args.out
        out_dir = osp.join(osp.dirname(json_file), out_dir)
    if not osp.exists(out_dir):
        os.mkdir(out_dir)

    img_name = osp.basename(json_file)[:-5]

    data = json.load(open(json_file))
    imageData = data.get("imageData")

    if not imageData:
        imagePath = os.path.join(os.path.dirname(json_file), 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 sorted(data["shapes"], key=lambda x: x["label"]):
        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
    lbl, _ = utils.shapes_to_label( img.shape, data["shapes"], label_name_to_value )

    label_names = [None] * (max(label_name_to_value.values()) + 1)
    for name, value in label_name_to_value.items():
        label_names[value] = name

    lbl_viz = imgviz.label2rgb( lbl, imgviz.asgray(img), label_names=label_names, loc="rb" )

    # 原图保存
    Images = osp.join(out_dir, 'PNGImages')
    if not osp.exists(Images):
        os.mkdir(Images)
    PIL.Image.fromarray(img).save(osp.join(Images ,img_name + ".png"))

    # 标签保存
    Labels = osp.join(out_dir,'SegmentLabels')
    if not osp.exists(Labels):
        os.mkdir(Labels)
    utils.lblsave(osp.join(Labels, img_name + ".png" ), lbl)

    with open(osp.join(out_dir, 'SegmentLabels', img_name + ".txt"), "w") as f:
        for lbl_name in label_names:
            f.write(lbl_name + "\n")


    # 合成图保存
    Label_viz = osp.join(out_dir, "Label_viz")
    if not osp.exists(Label_viz):
        os.mkdir(Label_viz)
    PIL.Image.fromarray(lbl_viz).save(osp.join(Label_viz, img_name + ".png"))

    logger.info("Saved to: {}".format(out_dir))


if __name__ == "__main__":

    json_path = '/Users/viatorsun/Desktop/Demo/Tomato/TomatoJSON'

    for root , dirs , files in os.walk(json_path):
        for file in files:
            if file == '.DS_Store':
                continue
            json_path = os.path.join(root ,file)
            print(json_path)
            main(json_path)


参考博客
anaconda安装
labelme使用
json转换

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/7931.html

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

相关文章

云原生周刊 | 百家争鸣的边缘计算时代即将到来?| 2022-11-14

今年的 KubeCon 大会有一个很奇怪的现象,到场的几乎都是小公司,没有大公司。可能是因为这些大公司恰好在这个时候都有自己的活动要举办,也有可能是他们正在快马加鞭研发他们的边缘计算方案?因为 Gartner 预测到 2025 年&#xff0…

Mybatis—LanguageDriver

LanguageDriver主要用于构造SqlSource和ParameterHandler,从LanguageDriver在Mybatis中调用链路来看,Configuration#newParameterHandler通过调用LanguageDriver#createParameterHandler完成构建ParameterHandler,通过调用LanguageDriver#cre…

缺流量时代,App们需要如何突围?

距离上一个现象级的应用抖音出现已经过去了6年,如今App市场万马齐喑,巨头创新不断,中小团队异军突起的App黄金时代一去不返。 你的App里多久没有出现过一款新应用了? 距离上一个现象级的应用抖音出现已经过去了6年,那…

基于加权对立和贪婪搜索多模态工程问题的黑猩猩优化算法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【网络安全】处理应急响应的简单方法

目录 一、应急响应 (1)概念 (2)分类 二、如何处理 (1)查看日志 (2)封堵ip (3)代码加固 (4)安装防火墙 (5&#x…

sqli通关笔记

sqli通关学习笔记 目录sqli通关学习笔记Less-1Less-2Less-3Less-4Less-5Less-5Less-6导入导出文件相关的操作Less-7Less-8Less-9Less-10Less-11Less-12Less-13Less-14Less-15Less-16增删改函数介绍Less-17HTTP 头部介绍Less-18Less-19Less-20Less-21Less-22高级注入&#xff0c…

【网络篇】第十四篇——HTTP协议(一)(附带电视剧李浔同款爱心+端口号被恶意占用如何清除)

目录 HTTP简介 基本性质 URI和URL urlencode和urldecode HTTP协议格式 HTTP请求协议格式 HTTP响应协议格式(爱心代码端口清理) ​ HTTP简介 超文本传输协议是一个用于传输超媒体文档的应用层协议。它是为web浏览器与web服务器之间的通信而设计的,但也可以用…

【DPDK】使用 Open vSwitch * 采用 DPDK 帧间 VM NFV 应用程序

一、概述 数据面开发套件 (DPDK)提供高性能数据包处理库和用户空间驱动程序。从Open vSwitch (OVS)版本 2.4 (http://openvswitch.org/releases/NEWS-2.4.0)开始,我们可以进行 OVS 中,使用 DPDK 优化 vHost 路径。DPDK 支持后的 OVS 中可用的 2.2 版。 …

JavaSE——包装类、装箱与拆箱

目录 一、基本概念 1.1 八种包装类及使用场景 1.2 装箱与拆箱的概念 二、以Integer包装类为例 2.1 Integer的构造方法 2.2 通过常量获取最大值与最小值 2.3 自动装箱和自动拆箱(非常重要的面试题) 三、Integer常用方法 3.1 手动拆箱(过时…

LeetCode-剑指44-数字序列中某一位的数字

1、找规律 我们通过找规律可以发现&#xff0c;当位数为xxx时&#xff0c;其占用的位数为x910x−1x\times9\times10^{x-1}x910x−1。因此我们可以不断循环并增大位数xxx直至n−x<x910x−1n-x<x\times9\times10^{x-1}n−x<x910x−1&#xff0c;此时数字落在剩余的位数…

HTTP协议加强

HTTP协议加强[TOC](HTTP协议加强)一、HTTP协议简介1.1 什么是通信1.2 什么是通信协议1.3 HTTP二、HTTP请求2.1 什么是HTTP请求消息2.2 HTTP请求消息的组成部分三、HTTP响应3.1 什么是HTTP响应消息3.2 HTTP响应消息的组成部分四、HTTP请求方法4.1 什么是HTTP请求方法4.2 HTTP的请…

接口性能调优的方法,这有11种,你知道几种?

​当我们谈到“软件测试”时&#xff0c;是指软件测试的相关工作&#xff0c;如单元测试、集成测试、系统测试等&#xff0c;但不局限于动态测试&#xff0c;也可以包括静态测试——需求评审、设计评审、代码评审和借助工具进行代码静态分析。 接口性能调优共11种方法&#xf…

Nftea: 世界杯文化、 NFT与 期权的首度碰撞

体育文化&#xff0c;正在成为加密行业发展的新驱动力 卡塔尔世界杯即将在2022年11月20日开幕&#xff0c;随着开赛日期的临近&#xff0c;作为四年一度的足球狂欢盛会&#xff0c;也吊足了全球足球球迷们的胃口。当然&#xff0c;从上个世纪开始&#xff0c;体育文化就成为了商…

Slurm作业管理系统常用命令和教程

Slurm &#xff08; Simple Linux Utility for Resource Management &#xff09;是开源的、具有容错性和高度可扩展大型和小型 Linux集群资源管理和作业调度系统。超级计算系统可利用 Slurm 进行资源和作业管理&#xff0c;以避免相互干扰&#xff0c;提高运行效率。所有需运行…

charles

charles中文名叫青花瓷&#xff0c;是一款基于HTTP协议的代理服务器。通过电脑或浏览器的代理来截取请求和请求结果&#xff0c;达到抓包并进行数据分析的目的。charles可以截取HTTP和HTTPS的网络封包&#xff0c;支持重发网络请求、修改网络请求参数、流量控制等场景 安装 由…

LeetCode刷题(python版)——Topic65.有效数字

一、题设 有效数字&#xff08;按顺序&#xff09;可以分成以下几个部分&#xff1a; 一个 小数 或者 整数&#xff08;可选&#xff09;一个 e 或 E &#xff0c;后面跟着一个 整数 小数&#xff08;按顺序&#xff09;可以分成以下几个部分&#xff1a; &#xff08;可选&…

Vue:搭建前端项目-----我给你打个样

如果文章对你有帮助欢迎【关注❤️❤️❤️点赞&#x1f44d;&#x1f44d;&#x1f44d;收藏⭐⭐⭐】一键三连&#xff01;一起努力&#xff01; 家人们好久不见&#xff0c;这次我们继续上干货&#xff0c;我们来介绍一下如何使用vue搭建一个前端项目&#xff1b; 在这里我会…

pytest fixture 中的使用包信scope skip conftest.py 和参数化等功能使用

pytest中所谓的夹具&#xff1a; fixture scope参数详解&#xff1a; scope&#xff1a; 表示fixture共享夹具的范围&#xff0c;有以下五个范围 function 功能&#xff1a; 在函数或方法运行时执行fixture函数的功能 默认作用域 class 功能&#xff1a;在类运行时调用一次。…

Mindspore网络构建

网络构建 神经网络模型是由神经网络层和Tensor操作构成的&#xff0c;mindspore.nn提供了常见神经网络层的实现&#xff0c;在MindSpore中&#xff0c;Cell类是构建所有网络的基类&#xff0c;也是网络的基本单元。一个神经网络模型表示为一个Cell&#xff0c;它由不同的子Cell…

【python】常见的正则表达式用法;匹配字符串

本文仅仅展现了python正则表达式中的一小部分内容&#xff0c;但是包含了实际应用中非常被频繁使用的例子&#xff0c;本文重在举例&#xff0c;即不需要相关语法知识就能够会用~ 目录re.match()re.findall()匹配两个字符串之间的字符串并返回匹配某字符串之前/之后的所有字符串…