首页 前端知识 【ann2coco】图像label转coco格式的JSON

【ann2coco】图像label转coco格式的JSON

2024-04-29 11:04:34 前端知识 前端哥 854 838 我要收藏

目录

🍋🍋需求

🍋🍋coco格式

🍋🍋python代码实现

整理不易,欢迎一键三连!!!

送你们一条美丽的--分割线--


🍋🍋需求

        单波段灰度图label转coco格式的JSON文件

 

🍋🍋coco格式

        COCO 数据集的格式是基于 JSON(JavaScript Object Notation)的,使用一个主 JSON 文件来描述整个数据集,以及其他辅助的 JSON 文件来存储图像和标注等信息。在 COCO 数据集格式中,主要的 JSON 文件通常被称为 "instance" 文件,它包含了以下重要字段:

  •  "info" 字段:用于描述数据集的基本信息,例如名称、版本、年份等。
  • "license" 字段:包含了数据集使用的许可证信息,可以指定数据集的使用和共享方式。
  • "images" 字段:存储了每张图像的相关信息,包括图像的唯一标识符、文件名、高度、宽度等。
  • "annotations" 字段:记录了每个图像的标注信息,每个标注包含了一些必要的信息,如标注的唯一标识符、所属图像的标识符、类别、边界框信息等。
  • "categories" 字段:定义了数据集中所有类别的信息,包括类别的唯一标识符、名称等。 

                       

        coco格式的JSON文件包含了一个COCO数据集的基本信息。它包括了数据集的信息(年份、版本、描述等)、许可证信息、图像信息(宽度、高度、文件名等)、标注信息(标注ID、图像ID、类别ID、边界框、面积等)以及类别信息(类别ID、类别名称、超类别等)。

        COCO数据格式的JSON文件示例:

{
"info": {
"year": 2021,
"version": "1.0",
"description": "COCO Dataset Example",
"contributor": "John Doe",
"url": "http://example.com",
"date_created": "2021-06-01"
},
"licenses": [
{
"id": 1,
"name": "License 1",
"url": "http://example.com/license1"
},
{
"id": 2,
"name": "License 2",
"url": "http://example.com/license2"
}
],
"images": [
{
"id": 1,
"width": 500,
"height": 400,
"file_name": "image1.jpg",
"license": 1,
"date_captured": "2021-01-01"
},
{
"id": 2,
"width": 800,
"height": 600,
"file_name": "image2.jpg",
"license": 2,
"date_captured": "2021-02-01"
}
],
"annotations": [
{
"id": 1,
"image_id": 1,
"category_id": 1,
"bbox": [100, 100, 200, 200],
"area": 40000,
"iscrowd": 0
},
{
"id": 2,
"image_id": 1,
"category_id": 2,
"bbox": [300, 200, 150, 250],
"area": 37500,
"iscrowd": 1
},
{
"id": 3,
"image_id": 2,
"category_id": 1,
"bbox": [50, 50, 300, 400],
"area": 120000,
"iscrowd": 0
}
],
"categories": [
{
"id": 1,
"name": "cat",
"supercategory": "animal"
},
{
"id": 2,
"name": "dog",
"supercategory": "animal"
}
]
}
复制

原文链接:https://blog.csdn.net/qq_38308388/article/details/136377164 

🍋🍋python代码实现

        python源码实现:

import json
import numpy as np
def label2coco(gray_label, image_id):
# 创建COCO数据格式的字典
coco_data = {
"info": {},
"licenses": [],
"images": [],
"annotations": [],
"categories": []
}
# 添加图像信息
image_info = {
"id": image_id,
"width": gray_label.shape[1],
"height": gray_label.shape[0],
"file_name": "image.jpg",
}
coco_data["images"].append(image_info)
# 添加类别信息
category_info = {
"id": 1,
"name": "object",
"supercategory": "none"
}
coco_data["categories"].append(category_info)
# 转换标签数据为COCO格式
label_data = np.squeeze(gray_label)
unique_labels = np.unique(label_data)
for label in unique_labels:
if label == 0:
continue
mask = label_data == label
annotation_info = {
"id": label,
"image_id": image_id,
"category_id": 1,
"segmentation": [],
"bbox": [],
"area": int(np.sum(mask)),
"iscrowd": 0
}
coco_data["annotations"].append(annotation_info)
return coco_data
# 示例用法
gray_label = np.array([[0, 0, 1, 1],
[0, 2, 1, 1],
[0, 2, 2, 1]])
coco_data = label2coco(gray_label, image_id=1)
json.dump(coco_data, open("coco_data.json", "w"))
复制

        上述代码实现了将单波段灰度图标签转换为COCO格式的JSON文件的功能。需要将标签存储为一个二维的numpy数组(gray_label),其中每个元素代表一个像素的类别信息。

        在示例中,灰度图标签为:[[0, 0, 1, 1], [0, 2, 1, 1], [0, 2, 2, 1]],其中0表示背景,1和2表示两个不同的物体。image_id为1,表示图像的唯一标识。

        函数label2coco接受灰度标签和图像ID作为输入,并返回COCO数据格式的字典。最后,将该字典存储为JSON文件(coco_data.json)。

        注意:该代码只实现了将灰度图标签转换为COCO格式的基本功能,可以根据实际需要进行修改和扩展。

整理不易,欢迎一键三连!!!

送你们一条美丽的--分割线--

🌷🌷🍀🍀🌾🌾🍓🍓🍂🍂🙋🙋🐸🐸🙋🙋💖💖🍌🍌🔔🔔🍉🍉🍭🍭🍋🍋🍇🍇🏆🏆📸📸⛵⛵⭐⭐🍎🍎👍👍🌷🌷

转载请注明出处或者链接地址:https://www.qianduange.cn//article/6139.html
评论
还可以输入200
共0条数据,当前/页
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!