标签拷贝 labelme json格式

label_copy.py

python 复制代码
import glob
import json
import os

from natsort import natsorted


def copy_labels_from_a_to_b(labels_to_copy, a_file='a.json', b_file='b.json'):
    """
    从 a.json 中复制多个标签到 b.json

    参数:
    labels_to_copy: 要复制的标签名称列表
    a_file: 源文件路径
    b_file: 目标文件路径
    """
    try:
        # 读取源文件
        with open(a_file, 'r', encoding='utf-8') as f:
            data_a = json.load(f)

        # 读取目标文件
        with open(b_file, 'r', encoding='utf-8') as f:
            data_b = json.load(f)

        # 确保 b.json 中有 shapes 列表
        if 'shapes' not in data_b:
            data_b['shapes'] = []

        total_copied = 0
        # 查找并复制所有匹配的标签
        for label in labels_to_copy:
            shapes_to_copy = []
            for shape in data_a.get('shapes', []):
                if shape.get('label') == label:
                    shape_copy = shape.copy()
                    shapes_to_copy.append(shape_copy)

            if shapes_to_copy:
                data_b['shapes'].extend(shapes_to_copy)
                total_copied += len(shapes_to_copy)
                print(f"找到并复制 {len(shapes_to_copy)} 个 '{label}' 标签")

        if total_copied > 0:
            # 保存更新后的文件
            with open(b_file, 'w', encoding='utf-8') as f:
                json.dump(data_b, f, indent=4, ensure_ascii=False)

            print(f"总计复制 {total_copied} 个标签到 {b_file}")
        else:
            print(f"在 {a_file} 中未找到指定的任何标签: {labels_to_copy}")

        return total_copied

    except Exception as e:
        print(f"发生错误: {e}")
        return 0

# 使用示例
if __name__ == "__main__":
    # 复制单个标签
    # copy_labels_from_a_to_b(['zhi'])

    to_base=r"D:\data\jiezhi\det_1201\1201"

    dirs=glob.glob(os.path.join(to_base, "*"))
    dirs=[r"D:\data\jiezhi\det_1201\1201\20251201-201937"]

    for to_dir in dirs:

        dir_name=os.path.basename(to_dir)
        from_dir=rf"D:\data\jiezhi\det_1201\zhi_from\{dir_name}"

        json_from=glob.glob(os.path.join(from_dir, "*.json"))

        json_from=natsorted(json_from)


        json_to=glob.glob(os.path.join(to_dir, "*.json"))

        json_to=natsorted(json_to)

        for json_i, json_file in enumerate(json_from[:len(json_to)]):

            json_to_path=json_to[json_i]

            # 复制多个标签
            copy_labels_from_a_to_b(['zhi'],a_file=json_file,b_file=json_to_path)
            print(json_to_path)
相关推荐
To_OC7 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
2401_841495648 小时前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
神奇霸王龙8 小时前
GB/T 46886 闭环屠夫:5 旗舰多模态 LLM 工业质检实测
人工智能·计算机视觉·ai·开源·ai编程·本地部署
爱刷碗的苏泓舒12 小时前
PPP-AR 中的参考星选取:数学原理、评价指标与切换处理
算法·gnss·模糊度固定·ppp-ar·星间单差·参考星·卫星端偏差
Microvision维视智造13 小时前
10ppm是什么概念?锂电生产管控国标给AI视觉下了硬指标
人工智能·计算机视觉·视觉检测·机器视觉
烬羽14 小时前
递归老写崩?一个"退回"公式,把回溯题变成填空题
javascript·深度学习·算法
闪电悠米14 小时前
力扣hot100-41.缺失的第一个正数-原地哈希详解
数据结构·算法·哈希算法
星空露珠15 小时前
28种颜色对应名称,
开发语言·数据库·算法·游戏·lua
QXWZ_IA17 小时前
桥梁数字孪生怎么落地?
人工智能·科技·算法·智能硬件·政务