首页 > 其他分享 >labelme制coco数据集(新)

labelme制coco数据集(新)

时间:2023-04-05 15:44:59浏览次数:38  
标签:img os ids file coco path labelme 数据

1. labelme标注完的json 

  Labelme标注工具的JSON文件包含了标注信息、图片路径、以及图片的高度和宽度等信息,

2. coco的json

  COCO数据集格式包含了多个JSON文件,包括标注信息、图片信息、类别信息、图片与类别的关联信息等

3.怎么转换

有两种方式

  1. 使用 Labelme 自带的转换工具
  2. 自己编写 Python 脚本进行转换

 

在windows上出了好多问题

步骤:

  1. 下载coco api

    git clone https://github.com/cocodataset/cocoapi.git

    cd cocoapi/PythonAPI

    python setup.py install

  2. 数据集划分

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

annFile = 'path/to/annotation/file'
saveDir = 'path/to/save/directory'

coco = COCO(annFile)

ids = list(coco.imgs.keys())
np.random.shuffle(ids)

train_ids = ids[:int(0.8*len(ids))]
val_ids = ids[int(0.8*len(ids)):]

os.makedirs(os.path.join(saveDir, 'train'), exist_ok=True)
os.makedirs(os.path.join(saveDir, 'val'), exist_ok=True)

for img_id in train_ids:
    img_info = coco.loadImgs(ids=[img_id])[0]
    img_file_name = img_info['file_name']
    src_file_path = os.path.join(os.path.dirname(annFile), img_file_name)
    dst_file_path = os.path.join(saveDir, 'train', img_file_name)
    shutil.copy(src_file_path, dst_file_path)
    ann_ids = coco.getAnnIds(imgIds=[img_id])
    anns = coco.loadAnns(ann_ids)
    ann_dict = dict()
    ann_dict['images'] = [img_info]
    ann_dict['annotations'] = anns
    save_path = os.path.join(saveDir, 'train', os.path.splitext(img_file_name)[0]+'.json')
    with open(save_path, 'w') as f:
        json.dump(ann_dict, f)

for img_id in val_ids:
    img_info = coco.loadImgs(ids=[img_id])[0]
    img_file_name = img_info['file_name']
    src_file_path = os.path.join(os.path.dirname(annFile), img_file_name)
    dst_file_path = os.path.join(saveDir, 'val', img_file_name)
    shutil.copy(src_file_path, dst_file_path)
    ann_ids = coco.getAnnIds(imgIds=[img_id])
    anns = coco.loadAnns(ann_ids)
    ann_dict = dict()
    ann_dict['images'] = [img_info]
    ann_dict['annotations'] = anns
    save_path = os.path.join(saveDir, 'val', os.path.splitext(img_file_name)[0]+'.json')
    with open(save_path, 'w') as f:
        json.dump(ann_dict, f)

  3.  labelme 方式转换

  

  3.2 自己写脚本转换

标签:img,os,ids,file,coco,path,labelme,数据
From: https://www.cnblogs.com/mxleader/p/17289547.html

相关文章

  • python flask 框架后端如何获取前端的表单数据 文本 单选框 多选框
    文本pyhon后端用request.values.get("name")去获取  if request.method == "POST":        username = request.values.get("username")     sex = request.values.get("sex") 二、多选按钮checkbox  <......
  • INFS3200 先进数据库系统
    INFS3200AdvancedDatabaseSystemsPrac2:DataWarehousing(5%)Semester1,2023Duetime:4:00pm,Friday,21April2023(Week8)Submission:Submityourworkonline(INFS3200CourseWebsite)1.Introduction1.1LearningobjectivesLearnhowtocreateacubean......
  • Web开发的那点事--数据持久层常用功能
    数据持久层--4类功能1.增加 增加一条记录-实体(有关联,没有关联) 2.修改 修改一个字段 修改多个字段 修改哪一列或哪些列:where一列多列 主键定位,多个列定位3.删除  物理删除:删除哪一列或哪些列  逻辑删除:本质是更新操作,修改isDeleted(对所有表的记录逻辑删除,几......
  • 由数据范围反推算法复杂度以及算法内容
    由数据范围反推算法复杂度以及算法内容1、一般ACM或者笔试题的时间限制是1秒或2秒。C++里面如果题目的时间限制是1s的话,这个1s是指每一个测试数据都有1s的时间限制,如果一个题有十几个测试数据,每一个测试数据都有1s的实现,正常比赛的话,比如蓝桥杯比赛的话,如果有10个测试数据,时间......
  • Linux安装mysql数据库
    1.下载路径:https://dev.mysql.com/downloads/2.上传解压#tar-xvfMySQL-5.6.26-1.linux_glibc2.5.x86_64.rpm-bundle.tar3.安装#rpm-ivhMySQL-server-5.6.26-1.linux_glibc2.5.x86_64.rpm--nodeps#rpm-ivhMySQL-client-5.6.26-1.linux_glibc2.5.x86_64.rpm--no......
  • 关于python中使用json.loads()将字符串数据转换成字典
    在json模块中,我们可以经常会用到load()与loads(),其中两者的区别如下json.load()从json文件中读取数据转抱为dict类型json.loads()将str类型的数据转换为dict类型这里笔者主要说明json.loads()的用法,将字符串转转换成字典,如下str2dict.py脚本内容:importjsonJsonStr='''{......
  • Redis 数据库的哨兵模式
    1.哨兵模式1.1哨兵模式的结构和作用哨兵(Sentinel)是Redis官方提供的一种高可用方案,它可以监控多个Redis服务实例的运行情况。本质上,Sentinel也是一个运行在特殊模式下的Redis服务器。主从复制模式下,一般会配置多个Sentinel节点,通过互相协作来实现系统的高可用。......
  • 注释/关键字/常量/数据类型/变量/标识符/类型转换
                                        ......
  • Redis 数据库的主从复制
    1.主从复制1.1什么是主从复制主从复制,是将多台数据库服务器分为主节点(master)和从节点(slaver),主节点数据更新后会根据配置和策略,自动同步到从节点上,从而保证主从节点中存有相同的数据。 1.2主从复制的作用有了主从复制,数据可以有多份副本,这就带来了很多好处:(1)提升......
  • Docker 下 Redis 数据库的持久化
    1、Docker容器的数据卷Docker是将系统与运行的环境打包成容器来运行,当容器删除后,容器里的系统自然也就没有了。但是,在实际的项目中,希望Docker容器产生的数据能够持久化,同时容器之间也能够共享数据。Docker提供了数据卷技术来实现这些需求。数据卷就是目录或文件,存......