coco数据集制作-多文件夹

news2025/2/21 19:44:55

背景:标准的coco格式数据集需要把所有图片放到一个文件夹里,而很多情况下,会有很多个文件夹,我们并不想把所有图片放到一起。

本文把多个文件夹下的yolov8(5)的txt标签转换至coco标签,转换标签代码如下:

import os
import json
import cv2

# 图片和标签路径
img_root = './soccernet/tracking/images/test/'
label_root = './soccernet/tracking/labels/test/'
# 模板
coco = {
    "info": {
        "year": 2023,
        "version": "1.0",
        "description": "Example COCO Dataset",
        "contributor": "jefft",
        "date_created": "2023-08-22"
    },
    "licenses": [
        {
            "id": 1,
            "name": "License Name",
            "url": "https://license-url.com"
        }
    ],
    "categories": [
        {
            "id": 0,
            "name": "person",
        },
        {
            "id": 1,
            "name": "soccer",
        }
    ],
    "images": [ 
    ],
    "annotations": [
    ]
}

image_tp = {
            "id": 1,
            "width": 640,
            "height": 480,
            "file_name": "cat1.jpg",
            "license": 1
        }

anno_tp = {
            "id": 1,
            "image_id": 1,
            "category_id": 1,
            "bbox": [],
            "area": 0,
            "segmentation": [],
            "iscrowd": 0
        }

idx = 0
img_id_= 0 
for root, dirs, files in os.walk(label_root):
    
    for file in files:
        if file.endswith('txt'): # 遍历所有yolov8格式的txt标注文件
            txt_path = os.path.join(root,file)
            print("Current directory:", txt_path)
            img_path = txt_path.replace('labels','images')
            img_path = img_path.replace('.txt','.jpg') # 找到图片路径
            if 'old' not in img_path: # 不用管,自行修改
                anno = open(txt_path).read().splitlines()
                img = cv2.imread(img_path)
                h,w,_ = img.shape
                
                image_tp["id"] = idx
                image_tp["width"] = w
                image_tp["height"] = h
                image_tp["file_name"] = img_path # 写入完整路径
                
                coco["images"].append(image_tp.copy()) # 添加图片信息
                for a in anno:
                    l = a.split(' ')
                    cat,cx,cy,lw,lh = int(l[0]),float(l[1])*w,float(l[2])*h,float(l[3])*w,float(l[4])*h
                    anno_tp["id"] = img_id_
                    anno_tp["image_id"] = img_path
                    img_id_+=1
                    anno_tp["bbox"] = [cx-lw/2,cy-lh/2,lw,lh] # 转换标注格式
                    anno_tp["category_id"] = cat
                    anno_tp["area"] = lw*lh
                    coco["annotations"].append(anno_tp.copy())  # 添加标注信息
                idx+=1
                assert os.path.exists(img_path)
                
    # if idx>500:
    #     break

with open('./test_soccer_coco.json', 'w') as l:
    l.write(json.dumps(coco))

验证是否转换正确代码如下:

from pycocotools.coco import COCO
import os
import cv2
import numpy as np

# 替换为你的数据集标注文件的路径和图像文件夹路径
annotation_file = 'test_soccer_coco.json'
image_folder = ''

# 初始化COCO对象
coco = COCO(annotation_file)

idx = 0
# 遍历每个图像并绘制标注
for image_id in coco.getImgIds():
    image_info = coco.loadImgs(image_id)[0]
    image_path = os.path.join(image_folder, image_info['file_name'])
    image = cv2.imread(image_path)

    annotations = coco.loadAnns(coco.getAnnIds(imgIds=[image_info['file_name']]))  # 原来是imgIds=image_id,进行了修改

    for ann in annotations:
        bbox = ann['bbox']
        category_info = coco.loadCats(ann['category_id'])[0]
        category_name = category_info['name']

        # 在图像上绘制边界框
        x, y, w, h = map(int, bbox)
        if category_info['id'] == 0:
            cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
            cv2.putText(image, category_name, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
        else:
            cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)
            cv2.putText(image, category_name, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
    # 保存绘制标注后的图像
   
    cv2.imwrite('tmp/{}.jpg'.format(idx), image)
    idx+=1
print("Annotation visualization and saving complete.")

另外,使用别人的代码训练的时候可能需要修改,就比如图中的位置:

在这里插入图片描述

有用的话点个赞哦😄

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/916733.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ipad可以用别的品牌的手写笔吗?开学平价电容笔推荐

开学需要买什么呢?随着科技的不断进步,各种类型的iPad电容笔应运而生。一支好的电容笔,不仅能大大提高我们的工作效率,而且能大大提高我们的生产力。平替的这款电容笔,不管是在技术上,还是在品质上&#xf…

u-view 的u-calendar 组件设置默认日期后,多次点击后,就不滚动到默认日期的位置

场景:uniapp开发微信小程序 vue2 uview版本:2.0.36 ; u-calendar 组件设置默认日期后 我打开弹窗,再关闭弹窗, 重复两次 就不显示默认日期了 在源码中找到这个位置进行打印值,根据出bug前后的值进行…

Java smslib包开发

上一篇文章我详细介绍RXTXcomm的安装方法和简单代码,如果小伙伴涉及到需要使用手机短信模块完成短信收发需求的话,可以使用到smslib进行开发。 首先还是同样的,将整个smslib包源码导入项目,并且将它所需依赖一起进行导入 导入完成之后,我们就可以对smslib包进行二次开发了 下面…

大华智慧园区综合管理平台文件上传漏洞复现

该文章来自作者日常学习笔记,也有部分文章是经过作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者无关。…

站点平台技术架构

系统架构部署思维导图 一、前期工作 1.系统保持一致性方案: GIT版本控制:通过总控端向租户端发送一个更新同步请求,租户端收到请求后执行GIT PULL 命令,执行完成命令后会进行获取当前版本指定的SQL文件,进行同步更新…

RTK定位

文章目录 前言什么是 RTKRTK的工作原理网络RTK vs 传统RTK结语 前言 说到定位,相信大家一定不会觉得陌生。如今我们所处的信息时代,人人都有手机。每天,我们都会用到与地图和导航有关的APP。 这些APP,就是基于定位技术的。说到定…

QT5.12.12通过ODBC连接到GBase 8s数据库(CentOS)

本示例使用的环境如下: 硬件平台:x86_64(amd64)操作系统:CentOS 7.8 2003数据库版本(含CSDK):GBase 8s V8.8 3.0.0_1 为什么使用QT 5.12.10?该版本包含QODBC。 1&#…

达到国际领先水平!“基于实景三维的土地综合整治监管与成效评估技术应用”技术成果通过专家组评价

​本文转自中国地理产业协会 评价会现场 8月16日,受广西自然资源产品质量检验中心委托,广西人工智能学会在南宁市采用线上线下结合的形式,组织召开了“基于实景三维的土地综合整治监管与成效评估技术应用”技术成果评价会。由中国科学院院士、…

行为型(六) - 状态模式

一、概念 状态模式(State Pattern):类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 使用场景: 一个对象的行为由它的状态决定,而且它必须在运行时根据自身状态改变它的行为。 二、实现 这里控…

【Java 高阶】一文精通 Spring MVC - 转换器(五)

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…

期权是什么?期权的优缺点是什么?

期权是一种合约,有看涨期权和看跌期权两种类型,也就是做多和做空两个方向,走势标的物对应大盘指数,这也是期权与其他金融工具的主要区别之一,可以用于套利,对冲股票和激进下跌的风险,下文介绍期…

HTML总结 2[转]

以下转载和参考自:HTML 表单。 1、表格 可以通过 CSS 设置表格的样式: 如下为将上面table.lamp th,td样式中的padding注释掉,开启table.lamp中的padding的效果: 2、列表 3、表单 表单用于收集用户的输入,如下图所…

咨询师需要具备同理心

做咨询的这么多年,经常会听到这样的一些槽点: “也不知道怎么想的,压根就不是正常的思考逻辑!” “上次就是这样,跌到同一条沟里了吧?” “如此简单的事情,推进起来为什么这么难?…

IDC发布中国低代码市场报告,得帆独立低代码市占率第一

近日,国际数据公司IDC公布了《2022下半年中国低代码与零代码软件市场跟踪报告》(以下简称“报告”)。 2022下半年中国低代码与零代码软件市场规模为15.6亿元人民币,得帆低代码PaaS平台凭借过硬的产品优势和深厚的客户实践经验&am…

RK3399平台开发系列讲解(内核调试篇)网络调试工具

🚀返回专栏总目录 文章目录 一、dstat 工具介绍二、例如dstat 进行网络问题调试三、ss 命令查看 TCP 详细信息四、netstat 查看TCP详细信息沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将介绍网络的相关工具。 一、dstat 工具介绍 当设备产生问题,而我们又…

情人节定制:HTML5 Canvas全屏七夕爱心表白特效

❤️ 前言 “这个世界乱糟糟的而你干干净净可以悬在我心上做太阳和月亮。”,七夕节表白日,你要错过吗?如果你言辞不善,羞于开口的话,可以使用 html5 canvas 制作浪漫的七夕爱心表白动画特效,全屏的爱心和…

使用Netplan建立Linux网络,简便的声明性方法

除了周围网络环境的复杂性之外,由于使用的技术堆栈和工具范围很广,Linux 网络可能会令人困惑。网桥、绑定、VRF 或路由的配置可以通过编程、声明、手动或自动化方式使用 ifupdown、ifupdown2、ifupdown-ng、iproute2、NetworkManager、systemd-networkd …

Python土力学与基础工程计算.PDF-土的三项组成

5.3 Python求解 Python 求解代码如下: 1. # 定义已知参数 2. G_s 2.7 # 比重 3. w 0.2 # 含水量 4. e 0.6 # 孔隙比 5. gamma_w 9.81 # 水的重度 6. 7. # 根据公式计算饱和度 8. S_r G_s * w / e 9. print("饱和度为", S_r) 10. 11.…

UbuntuDDE 23.04发布,体验DeepinV23的一个新选择

UbuntuDDE 23.04发布,体验DeepinV23的一个新选择 昨晚网上搜索了一圈,无意看到邮箱一条新闻,UbuntuDDE 23.04发布了 因为前几天刚用虚拟机安装过,所以麻溜的从网站下载了ISO文件,安装上看看。本来没多想,…

亚信科技AntDB数据库通过GB 18030-2022最高实现级别认证,荣膺首批通过该认证的产品之列

近日,亚信科技AntDB数据库通过GB 18030-2022《信息技术 中文编码字符集》最高实现级别(级别3)检测认证,成为首批通过该认证的数据库产品之一。 图1:AntDB通过GB 18030-2022最高实现级别认证 GB 18030《信息技术 中文编…