labelme的使用

labelme的使用

打开labelme

  • 在anaconda prompt中输入
labelme

pEt1SRU.png

  • labelme打开界面
    pEt1PsJ.png

利用labelme获得json文件

  • 打开目录文件
    pEt1EIx.png
    pEt1eJK.png
  • 利用labelme标注
    pEt1mRO.png
    • 先绘制多边形在标注标签
      pEt1KQe.png
      然后保存这样就会得到我们的json文件

json文件的操作

json文件转numpy文件

下面这个代码可以将json文件转换为numpy文件

import numpy as np
import cv2
import os
import json

def json_to_mask(img_path, json_path, mask_value=1):
    """生成掩码"""
    img = cv2.imread(img_path)   #读取图片
    if img is None:
        raise FileNotFoundError(f"图片读取失败: {img_path}")
    h, w = img.shape[:2]    #切片操作获取图片的高度和宽度
    mask = np.zeros((h, w), dtype=np.uint8)
    
    with open(json_path, 'r', encoding='utf-8') as f:
        data = json.load(f)
        for shape in data.get('shapes', []):
            points = np.array(shape['points'], dtype=np.int32)
            cv2.fillPoly(mask, [points], color=mask_value)
    return mask
    def process_directory(json_folder_path,image_folder_path, mask_root, mask_value):
    os.makedirs(mask_root,exist_ok=True)
    for files in os.listdir(json_folder_path):
        if files.endswith('.json'):
            json_path = os.path.join(json_folder_path,files)
    for files in os.listdir(image_folder_path):
        if files.endswith('.jpg'):
            image_path = os.path.join(image_folder_path,files)
        base_name = os.path.splitext(files)[0]
        mask_path = os.path.join(mask_root, f"{base_name}.npy")
        mask = json_to_mask(image_path,json_path,mask_value)
        np.save(mask_path,mask)

利用process_directory函数可以批量转换json文件为numpy文件
输入是json文件夹路径,图片文件夹路径,输出文件夹路径,掩码标签
不过要注意的是json文件和图片文件的名字要对应上

json文件转图片

import os
import numpy as np
import matplotlib.pyplot as plt

# 定义包含 .npy 文件的文件夹路径
folder_path = "./numpy"
# 定义保存图像的文件夹路径
output_folder = "./images"

# 如果输出文件夹不存在,则创建它
if not os.path.exists(output_folder):
    os.makedirs(output_folder)

# 遍历文件夹中的所有文件
for filename in os.listdir(folder_path):
    if filename.endswith('.npy'):
        # 构建完整的文件路径
        file_path = os.path.join(folder_path, filename)
        # 从 .npy 文件中加载 numpy 矩阵
        matrix = np.load(file_path)

        # 显示矩阵对应的图像(可根据需要选择是否显示)
        plt.imshow(matrix, cmap='gray')
        # 关闭坐标轴
        plt.axis('off')

        # 构建输出图像的文件名
        output_filename = os.path.splitext(filename)[0] + '.png'
        output_path = os.path.join(output_folder, output_filename)

        # 保存图像
        plt.imsave(output_path, matrix, cmap='gray')
        # 关闭当前图像窗口,避免内存占用
        plt.close()

print("批量处理完成!")

如果需要用这个代码的话需要改变folder_path和output_folder为你自己的文件夹路径

效果展示

  • numpy文件
    由于我numpy文件是二进制文件没法通过编辑器直接打开,这里不进行展示
  • png文件
    pEtGkZj.png
### LabelMe 工具的使用教程 #### 安装 LabelMe 工具 为了能够正常使用 LabelMe 进行标注工作,首先需要完成工具的安装过程。可以通过 Python 的 pip 命令来快速安装该软件包[^1]。 ```bash pip install labelme ``` #### 文件位置关系 在实际操作过程中,理解文件的位置关系非常重要。通常情况下,图片数据和对应的 JSON 标签文件会被存放在同一个目录下或者按照特定结构分开存储。这种布局有助于后续的数据管理和处理。 #### 启动 LabelMe 图形界面 启动命令如下所示,其中 `--labels` 参数指定了自定义标签名称列表所在的文本文件路径;`--nodata` 表示不保存原始图像到生成的 COCO 数据集中;`--validatelabel exact` 则用于严格验证标签的一致性[^2]: ```bash labelme images --labels labels.txt --nodata --validatelabel exact --config "{shift_auto_shape_color: -2}" ``` 此命令会打开一个图形用户界面(GUI),允许加载待标记的图片并开始创建区域注解。 #### 快捷键功能介绍 LabelMe 提供了一些实用的快捷键以提高工作效率。例如,“W” 键可以用来绘制新的多边形点,“D” 和 “A” 可分别向前或向后切换当前正在编辑的图片等。 #### 脚本转换标签格式 当积累了大量手动制作好的JSON形式的标注之后,可能还需要进一步将其转化为其他框架所支持的标准输入格式(比如 Pascal VOC XML, TensorFlow Record 等) 。为此官方也给出了相应的脚本来实现这一目标: ```python import argparse from labelme import utils import json import numpy as np import PIL.Image import os.path as osp def main(): parser = argparse.ArgumentParser() parser.add_argument('json_file') args = parser.parse_args() data = json.load(open(args.json_file)) ... ``` 以上仅展示了部分核心逻辑片段,具体完整的实现可以根据需求调整扩展。 #### 总结 通过上述几个方面的学习与实践,应该已经掌握了如何利用 LabelMe 来高效地标记自己的训练样本集的方法。这不仅限于简单的矩形框选,还包括复杂的形状描绘以及类别属性设定等功能模块的应用技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值