python批量修改labelme标注的json文件中的标签名

本文介绍如何使用Python批量修改labelme标注数据中的标签名,包括统一标签格式、更改特定标签及删除不再需要的标签类别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、批量修改标签名

使用labelme标注数据时,由于是多人标注,不同人在标注时错误的把同一类对象的标签名连同文件名编号一起赋给了label,现在我想全部修改为只有标签名(把文件名编号去掉)。
代码如下:

# coding:utf-8
'''
功能描述:批量修改labelme标注的json文件中的标签名,
原标签名为FCD1  FCD1187  FCD1186  FCD1185等,统一修改为FCD
'''

import os
import json

json_dir = 'json_label/'       # 写入json文件的文件夹路径
json_files = os.listdir(json_dir)

for json_file in json_files:
    json_file_ext = os.path.splitext(json_file)

    if json_file_ext[1] == '.json':
        jsonfile = json_dir + json_file

        with open(jsonfile, 'r', encoding='utf-8') as jf:
            info = json.load(jf)

            for i, label in enumerate(info['shapes']):
                label_name = info['shapes'][i]['label']         # 获取json文件中原标签名,FCD1  FCD1187  FCD1186  FCD1185 等等
                label_name_new = label_name[0:3]                # 提取字符串前3位字符,FCD
                info['shapes'][i]['label'] = label_name_new     # 将json文件中标签名进行统一修改替换
                # print(info['shapes'][i]['label'])
            # 使用新字典替换修改后的字典
            json_dict = info

        # 将替换后的内容写入原文件
        with open(jsonfile, 'w') as new_jf:
            json.dump(json_dict, new_jf)

print('change name over!')

2、批量修改某一类对象的标签名

比如之前把标注的一类对象写成了“dog”,现在我想全部修改为“puppy”。
代码如下:

# coding:utf-8

import os
import json

json_dir = 'json_label/'       # 写入json文件的文件夹路径
json_files = os.listdir(json_dir)

#写自己的旧标签名和新标签名
old_name = "dog"
new_name = "puppy"

for json_file in json_files:
    json_file_ext = os.path.splitext(json_file)

    if json_file_ext[1] == '.json':
        jsonfile = json_dir + json_file

        with open(jsonfile,'r',encoding = 'utf-8') as jf:
            info = json.load(jf)
            
            for i,label in enumerate(info['shapes']):
                if info['shapes'][i]['label'] == old_name:
                    info['shapes'][i]['label'] = new_name
                    # 找到位置进行修改
            # 使用新字典替换修改后的字典
            json_dict = info
        
        # 将替换后的内容写入原文件 
        with open(jsonfile,'w') as new_jf:
            json.dump(json_dict,new_jf)
    
print('change name over!')

3、批量删除某一类对象标注

比如之前标注了“cat",“dog”,现在我不想要"dog"这个类型了,批量删除。
代码如下:

# !/usr/bin/env python
# -*- encoding: utf-8 -*-

import os
import json

json_dir = 'json_label/'       # 写入json文件的文件夹路径
json_files = os.listdir(json_dir)

#这里写你要删除的标签名
delete_name = "dog"

for json_file in json_files:
    json_file_ext = os.path.splitext(json_file)

    if json_file_ext[1] == '.json':
    # 判断是否为json文件
        jsonfile = json_dir + json_file

        with open(jsonfile,'r',encoding = 'utf-8') as jf:
            info = json.load(jf)
            
            for i,label in enumerate(info['shapes']):
                if info['shapes'][i]['label'] == delete_name:
                    del info['shapes'][i]
                    # 找到位置进行删除
            # 使用新字典替换修改后的字典
            json_dict = info
        
        # 将替换后的内容写入原文件 
        with open(jsonfile,'w') as new_jf:
            json.dump(json_dict,new_jf)
    
print('delete label over!')

批量处理完后,大家一定要打开labelme再检查一下自己的图片和修改后的json文件标注是否达到想要的效果。

参考:https://blog.csdn.net/Sharonnn_/article/details/124365542

04-01
### LabelMe 数据标注工具使用教程 #### 工具简介 LabelMe 是一款功能强大的数据标注工具,主要用于图像领域中的目标检测、分割等任务。它可以帮助用户快速生成高质量的数据集,以便后续用于机器学习模型的训练。 --- #### 安装方法 对于 Windows 用户,可以通过 Anaconda 和 Python 3.7 的环境来安装 LabelMe 工具[^1]。以下是具体的安装过程: 1. **创建虚拟环境** 推荐通过 Conda 创建一个新的虚拟环境以避免依赖冲突: ```bash conda create -n labelme_env python=3.7 conda activate labelme_env ``` 2. **安装 LabelMe 及其依赖项** 使用 pip 命令安装 LabelMe 库及其所需的所有依赖包: ```bash pip install labelme ``` 如果遇到文件名格式问题(如 windows 解压后无法正常读取),可以按照以下方式解决:修改 `labelme/label_file.py` 文件中的第 36 行代码,调整路径处理逻辑[^3]。 另外,也可以直接下载预编译好的独立可执行文件 `Labelme.exe` 来简化安装流程[^2]: ```plaintext https://github.com/labelmeai/labelme/releases/download/v5.5.0/Labelme.exe ``` --- #### 功能介绍 LabelMe 提供了多种标注模式,适用于不同的应用场景: 1. **矩形框标注 (Bounding Box)** 适合于目标检测任务,允许用户绘制矩形区域标记感兴趣的对象。 2. **多边形标注 (Polygon Annotation)** 支持更精确的目标轮廓描绘,尤其适用于复杂形状物体的分割任务。 3. **点标注 (Point Annotation)** 主要应用于关键点定位场景,比如人体姿态估计。 4. **线段标注 (Line Segment Annotation)** 能够定义直线或者曲线连接多个节点的位置关系。 5. **自由绘图 (Free Drawing Mode)** 让用户能够随意涂鸦指定类别覆盖范围内的像素值作为语义分割标签的一部分。 --- #### 使用步骤 启动程序之后会看到主界面,在这里可以选择打开图片所在的文件夹进行批量操作;点击菜单栏上的按钮切换到不同类型的编辑状态完成相应对象的选择与属性设置工作后再保存成果即可导出JSON格式的结果文档供其他软件解析利用。 --- #### JSON 输出结构说明 每张被标注过的照片都会对应生成一个同名但扩展名为 .json 的配置描述档位档案记录该影像里所有的实例信息以及它们各自的几何参数详情等等内容如下所示例子所列明那样组织起来便于理解查阅同时也方便导入第三方框架继续深入分析研究下去: ```json { "version": "5.0", "flags": {}, "shapes": [ { "label": "car", "points": [[10, 20], [80, 90]], "group_id": null, "shape_type": "rectangle", "flags": {} } ], "imagePath": "example.jpg", "imageData": "...base64 encoded string...", "imageHeight": 480, "imageWidth": 640 } ``` 上述样例表示一张命名为 example.jpg 的相片中有辆汽车位于坐标系左上角起点位置为(10,20),右下终点则处于(80,90)处形成的一个矩形边界包围盒内。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值