labelme、labelimg的安装及使用(含格式转换)

目录

labelme、labelimg简要介绍 

labelme

labelimg

Anaconda虚拟环境

labelme安装

labelme的使用

labelimg安装

labelimg的使用

json格式转换

标注便携操作


labelme、labelimg简要介绍 

        labelme和labelimg都是图像标注工具,它们在机器学习和计算机视觉领域的数据准备阶段扮演着重要的角色。这些工具的主要目的是帮助用户为图像数据集创建标签,这些标签随后可以用于训练机器学习模型,以识别和理解图像中的对象、场景和活动等。

labelme

        labelme是一个开源的图像标注工具,它支持多种类型的标注,包括矩形框、多边形、点、线和圆形等。它提供了一个用户友好的界面,允许用户通过简单的点击和拖动来创建标注。Labelme支持导出多种格式的标注文件,如JSON、XML等,这些文件可以被不同的机器学习框架所使用。

labelimg

        labelimg是另一个广泛使用的图像标注工具,它同样提供了矩形框、多边形、点和线的标注功能。labelimg的用户界面相对简洁,易于上手,同时也支持导出多种格式的标注文件,如XML、CSV等。

Anaconda虚拟环境

在进行 labelme 和 labelimg 安装前需要先创建Anaconda虚拟环境。

详情请参考:深度学习环境搭建详解

在电脑搜索栏中搜索Anacodna Prompt打开Anaconda

最开始界面如下,base是基础环境

(base) C:\Users\ZhuanZ>

创建环境:conda create -n labelme python=3.7.16

其中labelme是需要创建的环境名称,pytho=3.7.16是该环境的python版本,可根据自己的需求调整版本号。

激活环境:activate labelme

退出环境:deactivate

labelme安装

activate labelme 激活 labelme 的虚拟环境

成功显示以下界面,其中(labelme)是激活的对应环境名称

输入以下代码进行下载:

pip install labelme==3.16.7 -i https://pypi.tuna.tsinghua.edu.cn/simple

这里安装 labelme==3.16.7 的版本,其他的版本容易出现报错(后期易出现维度不匹配的问题)

为减少一些不必要的麻烦,都建议大家安装这个版本

labelme的使用

安装好后直接输入 labelme 即可打开该软件

这里 Open 打开的是单个的图片,Open Dir 打开的是一整个图像文件夹

打开后点击 Create Polygons 进行标注,标注特点:首尾相连形成一个封闭区域、尽可能的贴合目标的边界轮廓

补充:导入图像数据后建议打开这两个进行标签保存,其中 Save Automatically 是指标注后的文件自动保存在当前图像的路径下;Change Output Dir 是指标签保存的指定文件夹(可自己选择),请注意,若要使标签和原图像分开保存,选择完标签保存路径后仍需要再次点击Save Automatically ,不然每次保存时还会跳出那些烦人的窗口。

示例:

我这里选择的是单个图像标注,完成后会让你填写对应的 label ,正确填写即可

labelimg安装

同样按照 labelme 的方式创建 labelimg 环境

activate labelimg 激活labelimg 虚拟环境

输入以下代码进行下载:

pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install lxml -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip install labelImg -i https://pypi.tuna.tsinghua.edu.cn/simple/

注意:可能遇到的问题

error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools

上面这个报错如果出现的话基本上是在安装PyQt5时缺少C++的插件造成。

解决办法如下(不唯一):

使用 WIN+R 输入 Powershell 输入以下命令

wget https://aka.ms/vs/17/release/vs_BuildTools.exe -o vs_BuildTools.exe ; cmd /c vs_BuildTools.exe

进入安装界面,注意:对v143生成工具的C++/CLI支持一定要勾选

安装完成后重新下载PyQt5即可

labelimg的使用

安装好后直接输入 labelimg 即可打开该软件

界面及功能与 labelme 很基本一致,需要注意的是 Change Save Dir 是标签保存文件夹路径,标红的地方表示标签的格式,其具有 VOC、YOLO、ML三种格式,标注时请根据需要选择对应的标签格式。

示例:

json格式转换

一般来说我们标注的图像是JMG格式,标注后的图像为JSON格式,而我们传入图像数据进行模型训练的一般是JSON转换后的PNG格式图像。提供的转换脚本如下:

import base64
import json
import os
import os.path as osp
import numpy as np
import PIL.Image
from labelme import utils


if __name__ == '__main__':
    jpgs_path = "datasets/JPEGImages"
    pngs_path = "datasets/SegmentationClass"

    classes = ["_background_", "cat", "dog"]

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

其中 class 是需要分开的种类,jpgs_path 是分开后得到的原图像文件夹路径,pngs_path 是分开后得到的 PNG 格式图像文件夹路径,count 和 path 是需要进行转换的图像数据集路径。具体路径请根据自己的需求进行修改。

标注便携操作

在这里补充一下标注时的部分快捷键和操作指南:

  • Ctrl + s 保存标注好的标签(自动保存模式下会自动保存);
  • Ctrl + d 复制当前标签和矩形框;
  • Ctrl + Shift + d 删除当前图片;
  • 滚动滑轮实现放大和缩小
  • Ctrl + z 撤销上一步操作
  • delete 删除标签
  • 标注时尽量贴合目标边界线,尽可能的保证完全标注目标图像且标注区域足够小(不要有多余的部分)

相关推荐

  1. YOLO图像前处理格式转换

    2024-04-02 20:16:01       44 阅读
  2. 如何使用ffmpeg转换图片格式

    2024-04-02 20:16:01       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-02 20:16:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-02 20:16:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-02 20:16:01       82 阅读
  4. Python语言-面向对象

    2024-04-02 20:16:01       91 阅读

热门阅读

  1. 设计之魅:高质量面向对象设计的秘密

    2024-04-02 20:16:01       39 阅读
  2. Redis

    Redis

    2024-04-02 20:16:01      58 阅读
  3. Python零基础教学(数据类型)

    2024-04-02 20:16:01       32 阅读
  4. 在Linux中部署redis

    2024-04-02 20:16:01       41 阅读
  5. Jackson 2.x 系列【5】注解大全篇一

    2024-04-02 20:16:01       49 阅读
  6. C语言中,`while` 和 `for` 的区别

    2024-04-02 20:16:01       36 阅读
  7. 把本地项目上传到gitee上

    2024-04-02 20:16:01       39 阅读
  8. Debian 配置国内软件源

    2024-04-02 20:16:01       39 阅读
  9. Debian/Ubuntu安装ping和netstat命令

    2024-04-02 20:16:01       42 阅读
  10. 【python】dict转json存入sql

    2024-04-02 20:16:01       43 阅读
  11. 【算法集训】基础算法:双指针

    2024-04-02 20:16:01       38 阅读