labelme 相关介绍、数据处理脚本

👨‍💻个人简介: 深度学习图像领域工作者
🎉总结链接:
             链接中主要是个人工作的总结,每个链接都是一些常用demo,代码直接复制运行即可。包括:
                    📌1.工作中常用深度学习脚本
                    📌2.torch、numpy等常用函数详解
                    📌3.opencv 图片、视频等操作
                    📌4.个人工作中的项目总结(纯干活)
              链接: https://blog.csdn.net/qq_28949847/article/details/128552785
🎉视频讲解: 以上记录,通过B站等平台进行了视频讲解使用,可搜索 ‘Python图像识别’ 进行观看
              B站:Python图像识别
              抖音:Python图像识别
              西瓜视频:Python图像识别


github: https://github.com/wkentaro/labelme

相关脚本

1. 标签文件相关脚本

  1. 统计文件夹下标签文件(json文件)的数量、每个json文件中每个label的数量、以及文件夹下总的label的数量。

代码如下:

import os
import cv2
import json


def count_json_label(json_path):
    label_num = {}
    with open(json_path, "r", encoding='utf-8') as f:
        # json.load数据到变量json_data
        json_data = json.load(f)
    for i in json_data['shapes']:
        if i['label'] in label_num.keys():
            label_num[i['label']] = label_num[i['label']] + 1
        else:
            label_num[i['label']] = 1
    return label_num


if __name__ == "__main__":
    # 图片和json所在文件夹
    json_dir = r'\\SHARE\public\bbox_20230412'
    all_labels_num = {}
    json_num = 0
    for root, dirs, files in os.walk(json_dir):
        for file in files:
            if not file.endswith('.json'):
                continue
            json_path = os.path.join(root, file)
            label_num = count_json_label(json_path)
            # 输出每个json文件中的label数量
            print(file, label_num)
            for label in label_num.keys():
                if label in all_labels_num.keys():
                    all_labels_num[label] = all_labels_num[label] + label_num[label]
                else:
                    all_labels_num[label] = label_num[label]
            json_num = json_num + 1
    print('此文件夹下label信息:', {'json_num': json_num, 'label_num': all_labels_num})

# 输出结果
# {'json_num': 663, 'label_num': {'person': 1296, 'face': 1202, 'face_keypoints': 1134}}
# json_num: 表示json文件的个数
# label_num: 表示每个label的个数
# person: 表示person类总共标注了1296个
# face: ....

2. 强制修改json标签文件中某个属性的值

import json
import os

import cv2

json_img_path = r'C:\Users\JoelYang\Desktop\111'


for root, dirs, files in os.walk(json_img_path):
    for file in files:
        if file.endswith('.json'):

            with open(os.path.join(root, file), 'r') as f:
                data = json.load(f)
                img_name = data['imagePath']
                img_path = os.path.join(root, img_name)
                img = cv2.imread(img_path)
                # 获取图片大小
                h, w, _ = img.shape
                imageData = data['imageData']
                imageHeight = data['imageHeight']
                imageWidth = data['imageWidth']
                # 将 base64编码的图片取消,占存储空间
                data['imageData'] = None
                if imageHeight != h or imageWidth != w:
                    print(img_name, imageHeight, imageWidth, w, h)
                    # 修改宽 高
                    data['imageHeight'] = h
                    data['imageWidth'] = w

            # 写入json
            with open(os.path.join(root, file), "w") as dump_f:
                json.dump(data, dump_f)

3. 删除掉 json中shapes为空的图片和json文件(删除无标签的文件)

'''
检查各个文件夹下的json是否有无标签的文件
'''
import json
import os
import shutil

json_img_path = r'\\SHARE\public\Time_Plus\traindata\bbox\tiaoshui3m'
save_path = r'\\SHARE\public\Time_Plus\traindata\bbox\test'
for root, dirs, files in os.walk(json_img_path):
    for file in files:
        if file.endswith('.json'):
            json_path = os.path.join(root, file)
            jpg_path = json_path.replace('.json', '.jpg')
            with open(json_path, "r", encoding='utf-8') as f:
                # json.load数据到变量json_data
                json_data = json.load(f)
            # 删除掉没有标签的文件,jpg和json同时移到save_path文件夹
            if len(json_data['shapes']) == 0:
                # 移动文件
                shutil.move(json_path, os.path.join(save_path, file))
                shutil.move(jpg_path, os.path.join(save_path, file.replace('.json', '.jpg')))


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python图像识别

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值