import os import json # ======================== 你的实际路径配置(无需修改) ======================== # 脚本所在目录(train目录) SCRIPT_ROOT = os.path.dirname(os.path.abspath(__file__)) # 数据集根路径(train/data) BASE_PATH = os.path.join(SCRIPT_ROOT, "data") # 元数据保存路径(框架固定目录) JSONL_SAVE_DIR = os.path.join(SCRIPT_ROOT, "dataset", "metadata", "opencvxuetang") # 原图目录:data/test/[类别名]/ IMG_ROOT = os.path.join(BASE_PATH, "test") # Mask根目录:data/ground_truth/[类别名]/ MASK_ROOT = os.path.join(BASE_PATH, "ground_truth") # 类别映射: # key=原图文件夹名 → (label值, 是否有mask, mask所在子文件夹名) # mask子文件夹名和原图类别名一致(比如contamination的mask在ground_truth/contamination/) CLASS_MAP = { "good": (0, False, ""), # 正常样本,无mask "contamination": (1, True, "contamination"), # 异常,mask在ground_truth/contamination/ "broken_small": (1, True, "broken_small"), # 异常,mask在ground_truth/broken_small/ "broken_large": (1, True, "broken_large"), # 异常,mask在ground_truth/broken_large/ } # Mask文件命名规则:原图名 → mask名(比如 xxx.jpg → xxx_mask.png) MASK_SUFFIX = "_mask.png" # ============================================================================= # 创建元数据保存目录 os.makedirs(JSONL_SAVE_DIR, exist_ok=True) JSONL_FILE_PATH = os.path.join(JSONL_SAVE_DIR, "full-shot.jsonl") meta_list = [] print("===== 开始生成元数据 =====\n") # 遍历所有类别 for class_name, (label, has_mask, mask_subdir) in CLASS_MAP.items(): # 1. 拼接原图类别文件夹路径 img_class_dir = os.path.join(IMG_ROOT, class_name) if not os.path.exists(img_class_dir): print(f"⚠️ 原图文件夹不存在:{img_class_dir} → 跳过该类别") continue print(f"🔍 处理类别:{class_name}") print(f" 原图路径:{img_class_dir}") # 2. 遍历该类别下的所有图片 img_files = [f for f in os.listdir(img_class_dir) if f.lower().endswith((".jpg", ".png", ".jpeg"))] if len(img_files) == 0: print(f" ❌ 该类别下无有效图片(jpg/png/jpeg)→ 跳过\n") continue print(f" 找到有效图片数:{len(img_files)}") for img_filename in img_files: # 构建原图的相对路径(框架要求:test/[类别名]/[图片名]) img_rel_path = os.path.join("test", class_name, img_filename).replace("\\", "/") sample = { "image_path": img_rel_path, "label": label, "class_name": class_name, "mask_path": "" } # 3. 处理异常样本的mask(核心修正:拼接mask子文件夹路径) if has_mask: # 拼接mask类别文件夹路径 mask_class_dir = os.path.join(MASK_ROOT, mask_subdir) if not os.path.exists(mask_class_dir): print(f" ❌ mask文件夹不存在:{mask_class_dir} → 跳过图片{img_filename}") continue # 提取原图名(去掉后缀)+ 拼接mask文件名 img_base_name = os.path.splitext(img_filename)[0] mask_filename = img_base_name + MASK_SUFFIX # 拼接mask的绝对路径(检查是否存在) mask_abs_path = os.path.join(mask_class_dir, mask_filename) if os.path.exists(mask_abs_path): # 构建mask的相对路径(框架要求:ground_truth/[类别名]/[mask名]) mask_rel_path = os.path.join("ground_truth", mask_subdir, mask_filename).replace("\\", "/") sample["mask_path"] = mask_rel_path meta_list.append(sample) print(f" ✅ 图片{img_filename} → mask{mask_filename} → 添加成功") else: print(f" ❌ 图片{img_filename}的mask不存在:{mask_abs_path} → 跳过") else: # good类直接添加 meta_list.append(sample) print(f" ✅ 正常图片{img_filename} → 添加成功") print("\n") # 写入jsonl文件 with open(JSONL_FILE_PATH, "w", encoding="utf-8") as f: for sample in meta_list: f.write(json.dumps(sample, ensure_ascii=False) + "\n") # 最终验证 print("===== 生成完成 ======") print(f"📁 元数据文件路径:{JSONL_FILE_PATH}") print(f"📊 总有效样本数:{len(meta_list)}") # 打印前5个样本示例 if len(meta_list) > 0: print("\n📝 前5个样本示例:") for i in range(min(5, len(meta_list))): print(f" 样本{i + 1}:{meta_list[i]}")Vlm-ClipJsonl代码
张小明
前端开发工程师
常见的6种软件测试用例设计方法
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 常见的软件测试用例设计方法,个人认为主要是下面这6种: 流程图法(也叫场景法)等价类划分法边界值分析判定表正交法…
java_ssm117超市在线配送管理系统_idea项目源码
目录具体实现截图项目概述核心功能模块技术实现项目亮点系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 项目概述 Java_SSM117超市在线配送管理系统是一款基于SSM(SpringSpringMVCMy…
2026年中国AI测试人才缺口达87万的产业图谱与破局路径
一、AI测试与传统软件测试的范式跃迁 随着AI系统在金融风控、自动驾驶、医疗诊断等关键领域的渗透率突破42%,测试对象已从确定性逻辑转向概率型模型。这要求测试工程师掌握: 动态验证技术:对抗样本生成(如FGSM攻击模拟࿰…
收藏!Java转AI大模型工程师,深耕10000小时终入字节跳动【附面试题+学习资料】
世上从无天生的行业强者,所有亮眼的成绩,皆源于日复一日的沉淀与坚守。对多数普通从业者而言,改写职业轨迹往往需要努力与机遇双向奔赴,但当机遇尚未降临,唯有以加倍的深耕,为自己铺垫向上的阶梯。 2025年…
接口测试用例设计
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 1、接口测试用例设计简介我们对系统的需求分析完成之后,即可设计对应的接口测试用例,然后用接口测试用例进行接口测试。接口测试用例的…
常用的安全渗透测试工具!(非常详细)从零基础到精通,收藏这篇就够了!
SQLMap 1.SQLMap详解 SQLMap是一个自动化的SQL注入工具,其主要功能是扫描、发现并利用给定URL的SQL注入漏洞,内置了很多绕过插件,支持的数据库是MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Fir…