欢迎光临
我们一直在努力

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

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

    conda env list

  • 在这里插入图片描述

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

    conda activate test

  • 在这里插入图片描述

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

    conda install pyqt

  • 继续输入conda install pillow安装pillow模块

    conda install pillow

  • 在这里插入图片描述

  • 在安装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()

    多目标:

    import cv2
    import os
    import json
    import glob
    import numpy as np

    def convert_json_label_to_yolov_seg_label():
    json_path = r"F:/person/json" # 本地json路径
    json_files = glob.glob(json_path + "/*.json")
    print(json_files)

    # 指定输出文件夹
    output_folder = "F:/person/labels" # txt存放路径
    if not os.path.exists(output_folder):
    os.makedirs(output_folder)

    # 定义标签到类别ID的映射
    label_map = {
    "person": 0,
    "car": 1
    }

    for json_file in json_files:
    print(json_file)
    with open(json_file, 'r') as f:
    json_info = json.load(f)

    # 图像尺寸,这里使用固定尺寸1920×1080
    np_w_h = np.array([[1920, 1080]], 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 shape in json_info["shapes"]:
    # 获取当前形状的标签
    label = shape["label"]
    # 根据标签映射获取类别ID
    category_id = label_map.get(label, 1) # 默认为-1,用于检测未定义的标签

    # 检查是否是已定义的标签
    if category_id == 1:
    print(f"警告:未定义的标签 '{label}' 在文件 {json_file} 中")
    continue

    # 处理点坐标并归一化
    np_points = np.array(shape["points"], np.float32) # 使用float32提高精度
    norm_points = np_points / np_w_h
    norm_points_list = norm_points.tolist()

    # 构建一行标签内容
    points_str = " ".join([f"{point[0]} {point[1]}" for point in norm_points_list])
    txt_content = f"{category_id} {points_str}\\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全方位改进目录一览

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

    多模态融合改进: 改进合集:多模态融合改进目录一览

    赞(0)
    未经允许不得转载:171主机测评 » Labelme的安装与使用教程
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址