标签拷贝 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)
相关推荐
啊森要自信20 小时前
CANN ops-cv:AI 硬件端视觉算法推理训练的算子性能调优与实战应用详解
人工智能·算法·cann
仟濹20 小时前
算法打卡day2 (2026-02-07 周五) | 算法: DFS | 3_卡码网99_计数孤岛_DFS
算法·深度优先
驭渊的小故事20 小时前
简单模板笔记
数据结构·笔记·算法
YuTaoShao21 小时前
【LeetCode 每日一题】1653. 使字符串平衡的最少删除次数——(解法一)前后缀分解
算法·leetcode·职场和发展
VT.馒头21 小时前
【力扣】2727. 判断对象是否为空
javascript·数据结构·算法·leetcode·职场和发展
goodluckyaa21 小时前
LCR 006. 两数之和 II - 输入有序数组
算法
孤狼warrior21 小时前
YOLO目标检测 一千字解析yolo最初的摸样 模型下载,数据集构建及模型训练代码
人工智能·python·深度学习·算法·yolo·目标检测·目标跟踪
Σίσυφος190021 小时前
PCL法向量估计 之 RANSAC 平面估计法向量
算法·机器学习·平面
xhbaitxl21 小时前
算法学习day39-动态规划
学习·算法·动态规划
I_LPL21 小时前
day23 代码随想录算法训练营 回溯专题2
算法·hot100·回溯算法·求职面试