Labelme的安装与使用教程


一、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 labelme -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()

模型改进链接:

YOLOv8:
改进合集:YOLOv8全方位改进目录一览

YOLOv9:
改进合集:YOLOv9全方位改进目录一览

YOLOv10:
改进合集:YOLOv10全方位改进目录一览

YOLOv11:
改进合集:YOLOv11全方位改进目录一览

RT-DETR:
改进合集:RT-DETR全方位改进目录一览

YOLOv12:
改进合集:YOLOv12全方位改进目录一览

### Python 中 `SyntaxError: Non-UTF-8 code` 错误的原因 该错误通常发生在 Python 解析器尝试读取源代码文件时,发现文件中的某些字节无法被解释为 UTF-8 编码的内容[^1]。具体来说,当 Python 文件中包含了非 ASCII 字符(例如中文字符或其他特殊符号),而这些字符并未按照 UTF-8 或其他指定编码存储时,解析器会抛出此异常。 #### 原因分析 1. **未声明文件编码** 如果 Python 源文件中包含非 ASCII 字符,但文件顶部没有明确声明其使用的编码方式,则默认情况下 Python 会假设文件采用 UTF-8 编码。如果实际编码此不符,就会引发语法错误[^2]。 2. **混合编码问题** 当文件保存过程中使用了不同的编码格式(如 GBK、ISO-8859-1 等),而非标准的 UTF-8 格式时,也会触发此类错误[^3]。 3. **第三方工具影响** 在某些场景下,比如通过特定工具打包或转换后的脚本可能引入不兼容的二进制数据片段,这同样可能导致类似的错误消息显示[^4]。 #### 解决方案 ##### 方法一:显式定义文件编码 在任何含有非 ASCII 字符的 `.py` 文件开头添加如下注释行来指明所用的具体编码形式: ```python # -*- coding: utf-8 -*- ``` 或者更简洁的形式也可以接受: ```python # coding=utf-8 ``` 上述两行均遵循 PEP 263 的规定,告知 Python 运行环境当前文档应按何种方式进行解码处理[^5]。 ##### 方法二:调整编辑器设置 确保开发环境中保存的所有 Python 脚本都统一采用了 UTF-8 编码模式。对于大多数现代 IDE 和文本处理器而言,默认已经启用了这一选项;不过仍需手动核查并更改必要参数以匹配需求。 ##### 方法三:清理潜在干扰项 检查是否有不必要的控制字符混入到程序代码之中——尤其是那些不可见却占据空间位置的对象,像 BOM (Byte Order Mark) 就是一个典型例子。可以通过高级文本编辑功能去除它们后再重新测试运行状况。 以下是修正后的一个简单实例演示如何正确配置编码声明防止再次遇到相同类型的报错情况: ```python # -*- coding: utf-8 -*- def greet(name): message = f"你好, {name}!" print(message) if __name__ == "__main__": user_name = "张伟" greet(user_name) ``` 以上代码段不仅设置了合适的编码头信息还展示了基本的功能实现过程,在不同操作系统平台之间迁移也不会轻易出现问题。 --- ###
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Limiiiing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值