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()
    

    作者:Limiiiing

    物联沃分享整理
    物联沃-IOTWORD物联网 » Labelme的安装与使用教程

    发表回复