学习笔记——一些数据转换脚本(Python)

目录

文章目录

  • 目录
  • 学习笔记——一些数据转换脚本(Python)
    • json2YOLO(txt)
    • VOC(xml)2YOLO(txt)
    • image2h5
    • json2npz

学习笔记——一些数据转换脚本(Python)

注:json 文件是 X-Anylabeling 多边形矩阵的标注。

json2YOLO(txt)

  • 自定义name2id
  • 自定义json_floder_pathtxt_outer_path
  • 保证存放 txt 的文件夹存在
# 处理 X-Anylabeling 多边形矩阵的标注 json 转化 txt,提取点
import json
import osname2id = {'crack_concrete': 4}  # 修改你的类别并且赋与 indexdef decode_json(json_floder_path, txt_outer_path, json_name):txt_name = os.path.join(txt_outer_path,json_name[:-5]) + '.txt'with open(txt_name, 'a') as f:json_path = os.path.join(json_floder_path, json_name)data = json.load(open(json_path, 'r', encoding='gb2312', errors='ignore'))img_w = data['imageWidth']img_h = data['imageHeight']isshape_type = data['shapes'][0]['shape_type']print(isshape_type)dw = 1. / (img_w)dh = 1. / (img_h)for i in data['shapes']:label_name = i['label']if (i['shape_type'] == 'polygon'):point = []for lk in range(len(i['points'])):x = float(i['points'][lk][0])y = float(i['points'][lk][1])point_x = x * dwpoint_y = y * dhpoint.append(point_x)point.append(point_y)f.write(str(name2id[label_name]) + " " + " ".join([str(a) for a in point]) + '\n')f.close()if __name__ == "__main__":json_floder_path = r'D:\JetBrains\PyCharm 2023.2\PycharmProjects\YOLOv8\datasets\crack_concrete_hybrid_augmentation\jsons'  # 存放 json 的文件夹的绝对路径txt_outer_path = r'D:\JetBrains\PyCharm 2023.2\PycharmProjects\YOLOv8\datasets\crack_concrete_hybrid_augmentation\labels'  # 存放 txt 的文件夹绝对路径json_names = os.listdir(json_floder_path)flagcount = 0for json_name in json_names:decode_json(json_floder_path, txt_outer_path, json_name)flagcount += 1print('-----------转化完毕------------')

VOC(xml)2YOLO(txt)

  • 自定义class_mapping
  • 自定义input_folderoutput_folder
  • 不必确保output_folder文件夹存在,程序会自动创建
import xml.etree.ElementTree as ET
import os# 标签映射,将类别名称映射到类别 ID
class_mapping = {"person": 0,"helmet": 1,"life jacket": 2,"truck": 3,"excavator": 4,"car crane": 5,"crawler crane": 6,"rotary drill rig": 7,"concrete tanker": 8,# 添加更多类别映射
}# 输入和输出文件夹路径
input_folder = "../datasets/drone/labels/convert"
output_folder = "../datasets/drone/labels/train"# 遍历 XML 文件
for xml_file in os.listdir(input_folder):if xml_file.endswith(".xml"):xml_path = os.path.join(input_folder, xml_file)tree = ET.parse(xml_path)root = tree.getroot()# 获取图像宽度和高度width = int(root.find("size/width").text)height = int(root.find("size/height").text)# 创建输出文件的路径和名称txt_file = os.path.splitext(xml_file)[0] + ".txt"txt_path = os.path.join(output_folder, txt_file)# 打开输出文件并写入 YOLO 格式数据with open(txt_path, "w") as f:for obj in root.findall("object"):class_name = obj.find("name").textclass_id = class_mapping.get(class_name)if class_id is not None:bbox = obj.find("bndbox")x_center = (float(bbox.find("xmin").text) + float(bbox.find("xmax").text)) / 2.0 / widthy_center = (float(bbox.find("ymin").text) + float(bbox.find("ymax").text)) / 2.0 / heightwidth_norm = (float(bbox.find("xmax").text) - float(bbox.find("xmin").text)) / widthheight_norm = (float(bbox.find("ymax").text) - float(bbox.find("ymin").text)) / heightf.write(f"{class_id} {x_center:.6f} {y_center:.6f} {width_norm:.6f} {height_norm:.6f}\n")

image2h5

  • 自定义image_folderh5_folder
  • 不必确保h5_folder文件夹存在,程序会自动创建
import h5py
from PIL import Image
import numpy as np
import osdef image_to_h5(image_folder, h5_folder):"""图片转 h5"""# 确保输出文件夹存在if not os.path.exists(h5_folder):os.makedirs(h5_folder)# 获取输入文件夹中的所有文件files = os.listdir(image_folder)total_files = len(files)for i, file_name in enumerate(files, 1):# 检查文件扩展名,如果是图像文件则进行处理if file_name.endswith('.png') or file_name.endswith('.jpg'):input_image_path = os.path.join(image_folder, file_name)output_h5_path = os.path.join(h5_folder, file_name.replace('.png', '.h5'))  # 根据文件名生成输出路径# 打开图像并转换为 NumPy 数组image = Image.open(input_image_path)image_array = np.array(image)# 创建 HDF5 文件并写入数据with h5py.File(output_h5_path, 'w') as hf:hf.create_dataset('image', data=image_array)# 输出处理进度print(f"Processed {i}/{total_files} images. Current image: {file_name}")if __name__ == "__main__":image_folder = '../data/crack_concrete/images'  # 输入文件夹路径h5_folder = '../data/crack_concrete/h5s'  # 输出文件夹路径image_to_h5(image_folder, h5_folder)

json2npz

  • 自定义json_foldernpz_folder
  • 不必确保npz_folder文件夹存在,程序会自动创建
import os
import json
import numpy as np
from PIL import Image, ImageDrawdef load_json(json_path):"""加载 json 文件"""with open(json_path, 'r') as f:return json.load(f)def create_image(data):"""读取图像数据"""image = Image.open(data['imagePath'])return np.array(image, dtype=np.float32)def create_label(data):"""创建与图像相同尺寸的空白 mask"""points = data['shapes'][0]['points']points_tuple = [(float(point[0]), float(point[1])) for point in points]label = Image.new('L', (data['imageWidth'], data['imageHeight']), 0)draw = ImageDraw.Draw(label)draw.polygon(points_tuple, fill=1)return np.array(label, dtype=np.float32)def json_to_npz(json_folder, npz_folder):"""将文件夹中的所有 json 文件转换为 npz 文件"""if not os.path.exists(npz_folder):os.makedirs(npz_folder)json_files = [file for file in os.listdir(json_folder) if file.endswith('.json')]total_files = len(json_files)for i, json_file in enumerate(json_files, 1):json_path = os.path.join(json_path, json_file)json_data = load_json(json_path)image_array = create_image(json_data)label_array = create_label(json_data)npz_file_path = os.path.join(npz_folder, json_file.split('.')[0] + '.npz')np.savez(npz_file_path, image=image_array, label=label_array)# 输出处理进度print(f"Processed {i}/{total_files} JSON files. Current file: {json_file}")if __name__ == "__main__":json_folder = '../data/crack_concrete/jsons'npz_folder = '../data/crack_concrete/npzs'json_to_npz(json_folder, npz_folder)

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

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

相关文章

洛谷【入门1】顺序结构

洛谷【入门1】顺序结构 Hello,World!题目描述样例 #1样例输入 #1样例输出 #1 输出字符菱形题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 超级玛丽游戏题目背景题目描述输入格式输出格式 AB Problem题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 字…

C语言经典例题(23) --- 2的n次方计算、按照格式输入并交换输出、字符转ASCII码、计算机表达式的值、计算带余除法

文章目录 1.2的n次方计算2.按照格式输入并交换输出3.字符转ASCII码4.计算机表达式的值5.计算带余除法 1.2的n次方计算 题目描述&#xff1a; 不用累计乘法的基础上&#xff0c;通过移位运算&#xff08;<<&#xff09;实现2的n次方的计算。 输入描述: 多组输入&#x…

常用特征分箱算法

特征分箱是构建信用评分过程中最重要的一个环节。特征分箱是对连续变量离散化的一种简称&#xff0c;对于连续型变量&#xff0c;需要对其连续值进行拆分&#xff0c;并进行后续的分箱调整工作&#xff1b; 对于离散型变量&#xff0c;通常要根据每个离散值计算其坏样本占比或…

创新实训2024.04.11日志:self-instruct生成指令

1. 参考文献 代码&#xff1a;https://github.com/yizhongw/self-instruct论文&#xff1a;https://arxiv.org/abs/2212.10560 2. 前沿论文阅读 2.1. self-instruct技术的优势 作者在文章中提到&#xff1a; The recent NLP literature has witnessed a tremendous amount …

flex吃干抹净

Flex 布局是什么&#xff1f; Flex 是 Flexible Box 的缩写&#xff0c;意为"弹性布局"&#xff0c;用来为盒状模型提供最大的灵活性。 .box{display: flex;//行内元素也可以使用flex布局//display: inline-flex; }display: flex; 使元素呈现为块级元素&#xff0c;…

nvm设置淘宝镜像

前端安装完 node 后&#xff0c;最好设置下淘宝的镜像源&#xff0c;不建议使用 cnpm&#xff08;可能会出现奇怪的问题&#xff09; npm config set registry https://registry.npmmirror.com 旧版不能用&#xff1a;npm config set registry https://registry.npm.taobao.org…

CentOS版本不同大小的各个版本区别

Everything版&#xff1a;这个版本包含了CentOS的所有软件组件&#xff0c;因此其体积相对较大&#xff0c;高达7G&#xff0c;甚至10G。它为用户提供了全面的软件包选择&#xff0c;无需再额外下载其他组件。DVD版&#xff1a;这个版本是CentOS的常用版本&#xff0c;也被称为…

时光清浅,百事从欢

裙身主图案采用寓意丰富的石榴印花石榴花开红火&#xff0c;枝叶茂盛恰好契合“时来运转”的主题希望宝贝们都能如石榴般坚韧生长&#xff0c;好运连连裙型设计深蕴国风美学&#xff0c;融合现代剪裁工艺将古典韵味与时尚元素完美交融领口处巧妙运用中式立领设计既保留了传统服…

SketchBook2014 下载地址及安装教程

SketchBook是一款专业级别的绘图与绘画软件。它提供了丰富的绘画工具和创意功能&#xff0c;适用于艺术家、插画师、设计师和数字艺术爱好者。SketchBook具有直观的用户界面&#xff0c;简单而强大的绘制工具&#xff0c;能够帮助用户在数字平台上创造出精美的艺术作品。 Sket…

【软件测试之因果图法】

【软件测试之判断表法】(蓝桥课学习笔记) 1、因果图法的概念 因果图法是一种利用图解法分析输入的各种组合情况&#xff0c;从而设计测试用例的方法&#xff0c;它适合于检查程序输入条件的各种情况的组合。因果图&#xff08;Cause-Effect-Graphing&#xff09;提供了把规则转…

水电智能远程抄表系统

水电智能远程抄表系统是一种应用先进技术实现水电抄表的智能化管理系统&#xff0c;通过远程抄表、数据传输和智能分析&#xff0c;实现了对水电使用情况的实时监测和管理。本文将从系统特点、构成以及带来的效益三个方面展开介绍。 系统特点 1.远程抄表&#xff1a;系统能够…

详解Qt元对象系统

Qt库作为一款流行的跨平台C应用程序开发框架&#xff0c;其中的元对象系统是其核心特性之一。Qt元对象系统不仅提供了诸如信号槽&#xff08;Signals & Slots&#xff09;、属性系统&#xff08;Property System&#xff09;等功能&#xff0c;还实现了对C对象的运行时类型…

Day37:LeedCode 738.单调递增的数字 968.监控二叉树 蓝桥杯 翻转

738. 单调递增的数字 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的最大数字&#xff0c;且数字呈 单调递增 。 示例 1: 输入: n 10 输出: 9 思路: 假设这个数是98,…

【LeetCode热题100】238. 除自身以外数组的乘积(数组)

一.题目要求 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 **不要使用除法&#xff0c;**且在…

HCIP-Datacom H12-831 题库补充(4/12)

2024年 HCIP-Datacom&#xff08;H12-831&#xff09;最新题库&#xff0c;完整题库请扫描上方二维码&#xff0c;持续更新。 以下关于OSPF Sham Link的描述&#xff0c;错误的是哪一项&#xff1f; A&#xff1a;为了使VPN流量通过MPLS VPN骨干网转发&#xff0c;Sham Link的路…

docker 安装初体验

文章目录 前言简介一、准备工作1.1 安装docker1.2 查看版本1.3 启停docker 二、docker命令介绍2.1 查看doeker容器2.2 查看doeker镜像2.3 docker基本命令 三、下载镜像、创建容器3.1 下载centos镜像3.2 测试运行镜像3.3 将宿主机的文件拷贝到容器上3.4 将容器内的文件拷贝到宿主…

Photoshop小记

ps使用小记 我用的是22版ps。 1. 软件下载和基本使用 新建自定义项目。 放大缩小&#xff1a;alt滚轮。 抓手工具&#xff1a;空格鼠标拖动。 2. 图层&#xff0c;蒙版&#xff0c;自由变换 右下小框可以将背景拖到垃圾桶标志来删除&#xff0c;可以点击加号新建图层。 c…

RA4000CE为汽车动力传动系统提供解决方案

目前汽车电气化的水平越来越高&#xff0c;其中比较显著的一个发展方向就是将发动机管理系统和自动变速器控制系统&#xff0c;集成为动力传动系统的综合控制(PCM)。作为汽车动力的核心部件&#xff0c;通过电子系统的运用&#xff0c;将外部多个传感器和执行环节的数据进行统一…

深度学习pytorch实战第P3周--实现天气识别

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊](https://mtyjkh.blog.csdn.net/)** 引言 1.复习上周 深度学习pytorch实战-第…

vue3组件TS类型声明实例代码

为 props 标注类型 当使用 <script setup lang"ts">const props defineProps({foo: { type: String, required: true },bar: Number})props.foo // stringprops.bar // number | undefined</script> 这被称为 运行时声明 &#xff0c;因为传递给 defi…