coco标签处理

  1. 抽取coco格式训练集中的一部分作为子训练集,用快速测试算法
from pycocotools.coco import COCO
import random
import copy
import json# 原始的 COCO 标注文件路径
original_annotations_path = '/workspace/datasets/soccer6/yolo/annotations/train.json'# 新的 COCO 标注文件保存路径
new_annotations_path = './mini_train.json'# 读取原始的 COCO 标注文件
coco_original = COCO(original_annotations_path)# 获取所有图像的 IDs
all_image_ids = coco_original.getImgIds()# 随机选择 1000 张图像的 IDs
selected_image_ids = random.sample(all_image_ids, 1000)# 创建一个新的 COCO 数据结构
coco_new = copy.deepcopy(coco_original)
coco_new.dataset['images'] = [img for img in coco_original.dataset['images'] if img['id'] in selected_image_ids]
coco_new.dataset['annotations'] = [ann for ann in coco_original.dataset['annotations'] if ann['image_id'] in selected_image_ids]# 更新图像和标注的 ID
image_id_mapping = {old_id: new_id for new_id, old_id in enumerate(selected_image_ids, start=1)}
annotation_id_mapping = {ann['id']: i + 1 for i, ann in enumerate(coco_new.dataset['annotations'])}for img in coco_new.dataset['images']:img['id'] = image_id_mapping[img['id']]for ann in coco_new.dataset['annotations']:ann['image_id'] = image_id_mapping[ann['image_id']]ann['id'] = annotation_id_mapping[ann['id']]# 保存新的 COCO 标注文件
coco_new_path = new_annotations_path
with open(coco_new_path, 'w') as f:json.dump(coco_new.dataset, f)
  1. 测试新保存的json文件格式是否正确
from pycocotools.coco import COCO
import cv2
import os# COCO 数据集的路径(annotations 和 images 目录所在的路径)
coco_data_path = '/workspace/datasets/soccer6/yolo/'# COCO 标注文件路径
annotations_file_path = './mini_train.json'# 加载 COCO 数据集
coco = COCO(annotations_file_path)# 输出目录,用于保存带有标注的图像
output_directory = './output'# 确保输出目录存在
os.makedirs(output_directory, exist_ok=True)# 遍历所有图像
for image_id in coco.getImgIds():# 加载图像信息image_info = coco.loadImgs(image_id)[0]# 读取图像image_path = coco_data_path + '/images/' + image_info['file_name']image = cv2.imread(image_path)# 获取图像的标签信息ann_ids = coco.getAnnIds(imgIds=image_id)annotations = coco.loadAnns(ann_ids)# 在图像上绘制边界框和标签for annotation in annotations:bbox = annotation['bbox']category_id = annotation['category_id']category_name = coco.loadCats(category_id)[0]['name']if category_name == 'person':# 绘制边界框cv2.rectangle(image, (int(bbox[0]), int(bbox[1])),(int(bbox[0] + bbox[2]), int(bbox[1] + bbox[3])), (255, 0, 0), 2)# 在边界框上方绘制标签cv2.putText(image, category_name, (int(bbox[0]), int(bbox[1]) - 5),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)else:cv2.rectangle(image, (int(bbox[0]), int(bbox[1])),(int(bbox[0] + bbox[2]), int(bbox[1] + bbox[3])), (0, 0, 255), 2)# 在边界框上方绘制标签cv2.putText(image, category_name, (int(bbox[0]), int(bbox[1]) - 5),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)# 构建输出图像的路径output_path = os.path.join(output_directory, f'annotated_{image_info["file_name"]}')# 保存带有标注的图像cv2.imwrite(output_path, image)# 提示:如果你想使用 Matplotlib 显示图像,可以在循环内添加显示的代码
  1. 读取指定图片的标注
from pycocotools.coco import COCO
import cv2# COCO 数据集的路径(annotations 和 images 目录所在的路径)
coco_data_path = '/workspace/datasets/soccer6/yolo/'# 加载 COCO 数据集
coco = COCO('/workspace/datasets/soccer6/yolo/annotations/train.json')# 图像文件名
image_filename = 'groundball_373.jpg'# 获取图像信息
image_info = [img for img in coco.dataset['images'] if img['file_name'] == image_filename][0]# 读取图像
image_path = coco_data_path + '/images/' + image_info['file_name']
image = cv2.imread(image_path)# 获取图像的标签信息
ann_ids = coco.getAnnIds(imgIds=image_info['id'])
annotations = coco.loadAnns(ann_ids)# 打印标签信息
# 在图像上绘制边界框和标签
for annotation in annotations:bbox = annotation['bbox']category_id = annotation['category_id']category_name = coco.loadCats(category_id)[0]['name']# 绘制边界框cv2.rectangle(image, (int(bbox[0]), int(bbox[1])),(int(bbox[0] + bbox[2]), int(bbox[1] + bbox[3])), (255, 0, 0), 2)# 在边界框上方绘制标签cv2.putText(image, category_name, (int(bbox[0]), int(bbox[1]) - 5),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)# 保存带有标注的图像
output_path = 'annotated_image.jpg'
cv2.imwrite(output_path, image)

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

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

相关文章

IOS-高德地图路径绘制-Swift

本文展示的是在IOS开发中调用高德地图进行驾车路径绘制,开发语言是Swift。 IOS高德地图集成请看:IOS集成高德地图Api 使用路径规划功能需要集成高德地图的搜索功能。 pod AMapSearch定义AMapSearchAPI 定义主搜索对象 AMapSearchAPI ,并继承…

AI对决:ChatGPT与文心一言的深度比较

. 个人主页:晓风飞 专栏:数据结构|Linux|C语言 路漫漫其修远兮,吾将上下而求索 文章目录 引言ChatGPT与文心一言的比较Chatgpt的看法文心一言的看法Copilot的观点chatgpt4.0的回答 模型的自我评价自我评价 ChatGPT的优势在这里插入图片描述 文…

Linux下的HTTP代理服务器Squid的配置和使用

Squid是一个流行的Linux下的HTTP代理服务器软件。通过Squid,你可以在Linux服务器上设置一个代理服务器,以便为客户端提供安全的网络连接和数据传输。以下是Squid的配置和使用指南。 1. 安装Squid 首先,你需要确保你的Linux系统上已经安装了…

国标GB28181安防视频监控平台EasyCVR视频分享页增加精简模式

智慧安防平台EasyCVR能在复杂的网络环境中(专网、局域网、广域网、VPN、公网等)将前端海量的设备进行统一集中接入与视频汇聚管理,平台支持设备通过4G、5G、WIFI、有线等方式进行视频流的快捷传输,可以兼容各品牌的IPC、NVR、移动…

寒假学习打字:提前实现弯道超车

寒假对于学生来说,通常是一个宝贵的时间段,可以用来放松、充实自己,或者提高一项重要的技能——打字。在这个数字时代,打字技能变得比以往任何时候都更加重要。无论是在学校的论文写作,还是在工作中处理电子邮件&#…

低代码高逻辑谱写IT组织和个人的第二成长曲线 | 专访西门子Mendix中国区总经理王炯

在今天快速演进的数字化转型浪潮中,低代码平台已经成为推动企业敏捷适应市场变化的关键引擎。在此背景下,西门子Mendix作为市场上的领导者,以其创新的低代码解决方案不断地刷新着行业标准。 近日,LowCode低码时代访谈了西门子Men…

C#上位机与欧姆龙PLC的通信12----【再爆肝】上位机应用开发(WPF版)

1、先上图 继上节完成winform版的应用后,今天再爆肝wpf版的,看看看。 可以看到,wpf的确实还是漂亮很多,现在人都喜欢漂亮的,颜值高的,现在是看脸时代,作为软件来说,是交给用户使用的…

探索JavaScript中强大的三元运算符:简洁、灵活、提升代码效率

探索JavaScript中强大的三元运算符:简洁、灵活、提升代码效率 三元运算是一种在编程中常见的条件表达式。它使用三个操作数进行条件判断,并返回两个值中的一个,具体取决于条件的真假。 三元运算符的优势:相比于使用传统的 if-els…

【JavaEE】CAS

作者主页:paper jie_博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文于《JavaEE》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造&…

时间轮算法

package com.rural_vibration.common.utils;import java.util.Date; import java.util.concurrent.DelayQueue; import java.util.concurrent.Delayed; import java.util.concurrent.TimeUnit;public class TimeWheelTest {// 时间轮大小,每一格代表1秒private fina…

安卓四大组件

安卓四大组件分别是:活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供器(Content Provider)。下面我们将对这四大组件进行详细的介绍。 一、活…

【个人笔记】由浅入深分析 ClickHouse

项目中不少地方使用到ClickHouse,就对它做了一个相对深入一点的了解和研究。并对各种知识点及整理过程中的一些理解心得进行了汇总并分享出来,希望对其他同学能有帮助。 本文主要讲解ClickHouse的特点、读写过程、存储形式、索引、引擎、物化视图等特性。 适合 入门和进阶 大…

bvh格式转换

目录 bvh格式介绍 bvh格式转换: 生成bvh: 导入导出bvh bvh可视化: H3.6M数据集转bvh pkl转换bvh bvh格式介绍 [转载] BVH文件格式解析 - 知乎 bvh格式转换: https://github.com/Garfield-kh/PoseTriplet/blob/eb93132f991…

μ综合设计控制器

μ综合设计控制器是一种基于μ分析的控制器设计方法,用于提高控制器的鲁棒性和性能。μ分析是一种数学工具,用于描述和比较控制系统在不同参数变化下的性能。通过μ综合设计,可以综合运用各种控制策略,以达到更好的控制效果。 μ…

[Combine 开发] Controlling timing 时间控制

Combine框架里,关于时间控制大致有debounce、delay、measureInterval、throttle、timeout 下面我们分别介绍他们的区别和使用方法 值的我们注意的是Combine中的pipline是异步流,所以这些时间控制的Operator还是很强大的。 debounce 在某些情况下&…

用python实现文本/图片生成视频

使用Python来生成视频通常涉及到使用一些专门的库,比如 OpenCV 或者 moviepy。下面是一个简单的例子,使用OpenCV和PIL(Python Imaging Library)来创建一个视频。 python复制代码 import cv2 import numpy as np from PIL import …

【双指针】001移动零_C++

题目链接:移动零 目录 题目解析 代码书写 知识补充 题目解析 题目让我们求必须在不复制数组的情况下,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 这题我们可以用双指针的方法来写: 我们这里将用两个数组下标来…

条码WMS仓储管理系统的价值与优势

在全球化和数字化的时代,企业面临着诸多挑战。在复杂的运营环境中,如何提高运营效率和效果,降低成本,增强竞争力,成为企业关注的焦点。而库存管理作为企业运营的关键环节,其重要性不言而喻。本文将深入探讨…

北交所交易手续费标准?哪家证券公司开通北交所券商交易手续费佣金万2?

北交所(Beijing Exchange)是指位于中国北京的一家金融交易所。北交所是中国政府为推动金融改革和国际化市场而设立的交易场所。它提供包括股票、债券、期货、外汇等多种金融产品的交易服务。北交所的目标是促进中国金融市场的发展,吸引国内外…

js forEach方法的使

JavaScript中的数组forEach()方法用于对数组中的每个元素执行指定的函数。该方法会遍历数组,并依次将每个元素传递给回调函数进行处理。forEach()方法不会改变原始数组,它只是用于遍历数组的一种方式。 forEach()方法的语法如下: array.for…