当前位置: 首页 > news >正文

coco数据集转换SAM2格式

coco是一个大json汇总了所有train的标签
SAM2训练一张图对应一个json标签

import json
import os
from pycocotools import mask as mask_utils
import numpy as np
import cv2def poly2mask(points, width, height):points_array = np.array(points, dtype=np.int32).reshape(-1, 2)mask = np.zeros((height, width), dtype=np.uint8)  # 注意顺序是(height, width)cv2.fillPoly(mask, [points_array], 255)  # 填充多边形区域为255return mask2rle(mask)def mask2rle(mask):"""将二值化掩码转换为RLE编码"""rle = mask_utils.encode(np.asfortranarray(mask))  # 使用pycocotools进行RLE编码rle['counts'] = rle['counts'].decode('utf-8')  # 将bytes转换为字符串return rle# 读取COCO格式JSON文件
with open('/home//Datasets/coco12cup/train.json', 'r') as f:coco_data = json.load(f)# 创建目标文件夹(如果不存在)
output_dir = '/home//Datasets/coco12cup/train'
os.makedirs(output_dir, exist_ok=True)# 遍历图像信息
for image in coco_data['images']:image_id = image['id']height = image['height']width = image['width']file_name = image['file_name']# 筛选对应图像的标注信息annotations = [anno for anno in coco_data['annotations'] if anno['image_id'] == image_id]# 转换标注格式为SAM2格式sam2_annotations = []for anno in annotations:# 检查segmentation格式segmentation = anno['segmentation']if isinstance(segmentation, list):  # 多边形格式segmentation_rle = poly2mask(segmentation[0], width, height)  # 多边形可能有多个,需要选第一个或合并else:  # 如果是RLE格式segmentation_rle = segmentationsam2_anno = {'area': anno['area'],'bbox': anno['bbox'],'id': anno['id'],'segmentation': segmentation_rle,}sam2_annotations.append(sam2_anno)# 创建SAM2格式的JSON数据sam2_data = {'annotations': sam2_annotations,'image': {'date_captured': '20241210',  # 根据实际情况修改'file_name': file_name,'height': height,'image_id': image_id,'license': 1,  # 根据实际情况修改'width': width}}# 写入单个JSON文件(使用 file_name 替换原本的 id 作为文件名)output_name = os.path.splitext(file_name)[0] + '.json'  # 替换扩展名为 .jsonoutput_path = os.path.join(output_dir, output_name)with open(output_path, 'w') as f:json.dump(sam2_data, f)
http://www.lryc.cn/news/501663.html

相关文章:

  • 【CMD、PowerShell和Bash设置代理】
  • 22智能 代码作业集合
  • 实现一个简单的后台架子(侧边栏菜单渲染,折叠,黑白主题,组件主题色,全屏,路由快捷栏)
  • vue3-canvas实现在图片上框选标记(放大,缩小,移动,删除)
  • unity3d—demo(2d人物左右移动发射子弹)
  • 【ETCD】【源码阅读】 深入解析 raftNode.start`函数:Raft 核心启动逻辑剖析
  • Robust Depth Enhancement via Polarization Prompt Fusion Tuning
  • NEFTune,SFT训练阶段给Embedding加噪音
  • uniapp -- 实现页面滚动触底加载数据
  • L22.【LeetCode笔记】相交链表(新版)
  • 智能时代网络空间认知安全新观察
  • 游戏如何应对模拟器作弊
  • c++ 判断一个 IP 地址(可能是 IPv6 或 IPv4)是否属于特定范围
  • 计算机视觉——相机标定(Camera Calibration)
  • 【qt环境配置】windows下的qt与vs工具集安装\版本对应关系
  • GitHub使用
  • 元宇宙时代的社交平台:Facebook的愿景与实践
  • vue2中各种钩子函数的总结以及使用场景
  • 软件架构:从传统单体到现代微服务的技术演变
  • git新建远程分支后,无法切换
  • 【SpringBoot】31 Session + Redis 实战
  • 在Windows环境下的rknn-toolkit环境搭建
  • Facebook广告突然无消耗?原因解析与解决方案。
  • Rabbitmq 镜像队列
  • TensorBoard
  • 运维实战:K8s 上的 Doris 高可用集群最佳实践
  • 2024.12.5——攻防世界Training-WWW-Robots攻防世界baby_web
  • 当 Nginx 出现连接超时问题,如何排查?
  • vue2 项目中实现动态代理,服务器上通过nginx部署 实现动态代理
  • 基于SpringBoot+Vue的民宿山庄农家乐管理系统