CV图像处理小工具——语义分割json生成检测框json

embedded/2024/11/14 0:07:30/

语义分割json生成检测框json

import json
import os
from os import listdir, getcwd
from os.path import join
import os.pathrootdir = 'F:/dataset/'# 写自己存放图片的数据地址
input_dir = 'F:/dataset/labels_json/'
output_dir = 'F:/dataset/labels_box/'
def position(pos):# 该函数用来找出xmin,ymin,xmax,ymax即bbox包围框x = []y = []nums = len(pos)for i in range(nums):x.append(pos[i][0])y.append(pos[i][1])x_max = max(x)x_min = min(x)y_max = max(y)y_min = min(y)b = (float(x_min), float(x_max), float(y_min), float(y_max))return bdef convert_annotation(image_ids, input_dir, output_dir):for image_id in image_ids:print(image_id)input_file_path = os.path.join(input_dir, f"{image_id}.json")output_file_path = os.path.join(output_dir, f"{image_id}.json")try:with open(input_file_path, 'r') as load_f:load_dict = json.load(load_f)w = load_dict['imageWidth']h = load_dict['imageHeight']objects = load_dict['shapes']annotations = []  # 创建一个空列表来存储注解for obj in objects:# 去除可能的额外空格,并设置默认标签(如果需要)labels = obj['label'].strip()# 根据标签处理形状if labels in ["class1", "class2","class3", "class4"]:pos = obj['points']b = position(pos)cls_id_mapping = {"class1": 1,"class2": 2,"class3": 3,"class4": 4,}cls_id = cls_id_mapping[labels]annotation = {'label': labels,'class_id': cls_id,'bbox': b}annotations.append(annotation)output_dict = {"version": "5.0.2","flags": {},"shapes": [],  # shapes数组为空,因为注解信息已经放在annotations中"imagePath": load_dict['imagePath'],"imageData": None,"imageHeight": h,"imageWidth": w,"annotations": annotations  # 添加注解列表}for shape in load_dict['shapes']:# 假设每个多边形都有四个点,我们可以直接取对角线上的两个点来定义矩形# 这里我们取第一个点和第三个点(或者您可以根据具体情况选择其他点对)objects = load_dict['shapes']for obj in objects:# 去除可能的额外空格,并设置默认标签(如果需要)labels = obj['label'].strip()if labels in ["class1", "class2","class3", "class4"]:pos = obj['points']b = position(pos)rect_points = [[b[0], b[3]],[b[1], b[2]]]new_shape = {"label": labels,  # 保留原多边形的标签(或者您可以根据需要生成新的标签)"points": rect_points,  # 使用调整后的点来表示矩形(但这里我们实际上只使用了两个点)# 注意:由于我们简化了问题,并没有真正地使用四个点来定义一个完整的矩形# 在实际应用中,您可能需要更精确地处理这个问题。"group_id": None,  # 您可以根据需要设置这个字段的值"shape_type": "rectangle",  # 指定形状类型为矩形"flags": {}  # 保留空的flags字段(或者您可以根据需要填充它)}output_dict['shapes'].append(new_shape)# 写入新的JSON文件with open(output_file_path, 'w') as output_f:json.dump(output_dict, output_f, indent=4)except Exception as e:print(f"Error processing {input_file_path}: {e}")def image_id(rootdir):a = []for parent, dirnames, filenames in os.walk(rootdir):for filename in filenames:# print(filename)if filename.endswith('.jpg'):filename = os.path.splitext(filename)[0]if filename.endswith('.jpeg'):filename = os.path.splitext(filename)[0]if filename.endswith('.JPG'):filename = os.path.splitext(filename)[0]if filename.endswith('.JPEG'):filename = os.path.splitext(filename)[0]a.append(filename)return anames = image_id("F:/dataset/images/"),for image_id in names:convert_annotation(image_id, input_dir, output_dir)

http://www.ppmy.cn/embedded/136424.html

相关文章

【MATLAB代码】二维平面上的TDOA,使用加权最小二乘法,不限制锚点数量,代码可复制粘贴

本文所述的MATLAB代码实现了一个基于两步加权最小二乘法的二维目标定位算法,利用多个锚点(基站)和时间差到达(TDOA)数据来估计未知目标的位置。 订阅专栏后可以看到完整代码,复制到MATLAB空脚本上面即可直接运行。若需要单独下载,可通过下面的链接:https://download.cs…

机器学习与大数据处理有何关系

一、机器学习的定义 机器学习(Machine Learning, ML)是人工智能的一个分支领域,它专注于让计算机系统通过自动地从数据中学习并改进其性能,以执行特定任务,而无需进行显式的编程。机器学习的核心思想是使用数据来训练…

Spring Boot应用开发:从入门到精通

Spring Boot应用开发:从入门到精通 Spring Boot是Spring框架的一个子项目,旨在简化Spring应用的初始搭建和开发过程。通过自动配置和约定大于配置的原则,Spring Boot使开发者能够快速构建独立的、生产级别的Spring应用。本文将深入探讨Sprin…

Zabbix5 通过 Rsyslog 实现设备日志收集分析syslog及监控告警

一、概述 本文档详细描述了如何使用 Zabbix5 和 Rsyslog 实现对设备日志的收集、监控以及在满足特定条件下触发告警的完整流程,包括环境准备、Rsyslog 配置、Zabbix5 配置以及常见问题排查等内容。 二、环境准备 服务器环境 操作系统:CentOS(…

[C++]学习《DirectX12 3D 游戏开发实战》 第八天 利用 Direct3D 绘制几何体(续)

本章将介绍一些此书后面常会用到的绘图模式。首先讲解与绘图优化相关的内容,此处涉及“帧资源 (frame resource)”等概念。若采用帧资源,我们就得修改程序中的渲染循环,好处:不必在每一帧都刷新命令队列,继而改善 CPU …

系统聚类的分类数确定——聚合系数法

breast_cancer数据集分析——乳腺癌诊断 #读取乳腺癌数据 import pandas as pd import numpy as np from sklearn.datasets import load_breast_cancer data load_breast_cancer() X data.data y data.target.. _breast_cancer_dataset:Breast cancer wisconsin (diagnosti…

ThingsBoard规则链节点:RPC Call Reply节点详解

引言 1. RPC Call Reply 节点简介 2. 节点配置 2.1 基本配置示例 3. 使用场景 3.1 设备控制 3.2 状态查询 3.3 命令执行 4. 实际项目中的应用 4.1 项目背景 4.2 项目需求 4.3 实现步骤 5. 总结 引言 ThingsBoard 是一个开源的物联网平台,提供了设备管理…

C++研发笔记12——C语言程序设计初阶学习笔记10

本篇笔记是一篇练习文章,是对第二部分《初识C语言》的一个回顾,从而结束第二部分的学习。 题目一 关于C语言关键字说法正确的是:( ) A.关键字可以自己创建 B.关键字不能自己创建 C.关键字可以做变量名 D.typedef不是关键字 【参考答案…