【跑实验06】如何数据集中加入图像尺寸?如何把tuple格式的坐标按顺序写成四列数据?如何把某一列放到最后?

news2024/9/21 20:46:45

文章目录

  • 一、如何数据集中加入图像尺寸?
  • 二、如何把tuple格式的坐标按顺序写成四列数据?
  • 三、如何把某一列放到最后?

一、如何数据集中加入图像尺寸?

部分核心代码如下:

image_files = [filename for filename in os.listdir(folder_path) if filename.endswith(('.jpg', '.png'))]

num_batches = len(image_files) // batch_size + 1

for batch_idx in range(num_batches):
    start_idx = batch_idx * batch_size
    end_idx = min(start_idx + batch_size, len(image_files))
    batch_files = image_files[start_idx:end_idx]

    df = pd.DataFrame(columns=['feature_{}'.format(i) for i in range(512)] + ['width', 'height', 'coordinates', 'image_name', 'label'])

    for filename in batch_files:
        image_path = os.path.join(folder_path, filename)

        image = Image.open(image_path).convert('RGB')
        image_width, image_height = image.size
        image_input = preprocess(image).unsqueeze(0).to(device)

        with torch.no_grad():
            image_features = model.encode_image(image_input)

        name_parts = filename.split('_')
        coordinates = tuple(map(float, name_parts[1].strip('()').split(',')))
        object_name = '_'.join(name_parts[2:])

        row_data = image_features.squeeze().tolist() + [image_width, image_height, coordinates, object_name, 0]
        df.loc[len(df)] = row_data

这段代码的作用是逐行处理图像数据,并将其存储在一个DataFrame中。让我们逐行解读代码:

image_files = [filename for filename in os.listdir(folder_path) if filename.endswith(('.jpg', '.png'))]

这行代码用于获取指定文件夹路径下以’.jpg’或’.png’结尾的图像文件名列表。

num_batches = len(image_files) // batch_size + 1

这行代码计算需要进行的批次数量。根据图像文件的数量和指定的批次大小,计算出总共需要多少个批次。

for batch_idx in range(num_batches):

这行代码开始对每个批次进行迭代。batch_idx是当前迭代的批次索引。

start_idx = batch_idx * batch_size
end_idx = min(start_idx + batch_size, len(image_files))
batch_files = image_files[start_idx:end_idx]

这部分代码确定当前批次的起始索引和结束索引,并从图像文件列表中选择对应的文件。根据批次索引和批次大小,计算出当前批次的起始和结束位置,并从图像文件列表中选择这些位置之间的文件。

df = pd.DataFrame(columns=['feature_{}'.format(i) for i in range(512)] + ['width', 'height', 'coordinates', 'image_name', 'label'])

这行代码创建一个空的DataFrame,列名包括512个特征列(‘feature_0’到’feature_511’),以及’width’、‘height’、‘coordinates’、‘image_name’和’label’。

for filename in batch_files:

这行代码开始对当前批次中的每个文件进行迭代处理。filename是当前迭代的文件名。

image_path = os.path.join(folder_path, filename)
image = Image.open(image_path).convert('RGB')
image_width, image_height = image.size

这部分代码构建图像的完整路径,并使用PIL库的Image.open方法打开图像文件。然后,将图像转换为RGB模式,并获取图像的宽度和高度。

image_input = preprocess(image).unsqueeze(0).to(device)
with torch.no_grad():
    image_features = model.encode_image(image_input)

这部分代码对图像进行预处理,并将其作为输入传递给模型。通过调用模型的encode_image方法,获取图像的特征向量。

name_parts = filename.split('_')
coordinates = tuple(map(float, name_parts[1].strip('()').split(',')))
object_name = '_'.join(name_parts[2:])

这部分代码根据文件名解析出坐标和物体名称。首先,通过下划线将文件名拆分为多个部分。然后,从第二部分中提取坐标信息,将其转换为浮点数,并存储在一个元组中。最后,将剩余的部分拼接成物体名称。

row_data = image_features.squeeze().tolist() + [image_width, image_height, coordinates, object_name, 0]
df.loc[len(df)] = row_data

这部分代码构建了一行数据,其中包含图像特征向量、图像的宽度和高度、坐标、物体名称和标签。然后,将这一行数据添加到DataFrame中。

整个过程会针对每个批次中的每个图像文件重复执行,将图像的特征和相关信息添加到DataFrame中。

我们看一下输出的结果:

在这里插入图片描述

顺利提取成功!

二、如何把tuple格式的坐标按顺序写成四列数据?

可以使用Python中的字符串分割和提取操作,将包含坐标信息的字符串进行分割,然后提取出对应的xmin、ymin、xmax、ymax值。以下是一个示例代码:

import pandas as pd

# 读取数据集
df = pd.read_csv('your_dataset.csv')

# 创建新的列
df['xmin'] = 0
df['ymin'] = 0
df['xmax'] = 0
df['ymax'] = 0

# 遍历每一行数据
for index, row in df.iterrows():
    # 提取坐标字符串
    coordinates = row['coordinates']
    # 分割字符串并提取坐标值
    xmin, ymin, xmax, ymax = map(float, coordinates.strip('()').split(','))
    # 将提取的值赋给对应的列
    df.at[index, 'xmin'] = xmin
    df.at[index, 'ymin'] = ymin
    df.at[index, 'xmax'] = xmax
    df.at[index, 'ymax'] = ymax

# 打印结果
print(df[['xmin', 'ymin', 'xmax', 'ymax']])

这段代码假设您的数据集已保存为一个名为"your_dataset.csv"的CSV文件,并使用pandas库来读取和处理数据。代码会遍历数据集中的每一行,提取坐标字符串,并分割成四个值,然后将这些值分别赋给新创建的四列。最后,打印生成的四列(xmin、ymin、xmax、ymax)。

请注意,根据您提供的数据集,示例代码中的列名可能需要进行适当调整。

我们来看一下输出的结果:

在这里插入图片描述
提取成功!

三、如何把某一列放到最后?

我们上面数据集的输出结果为:

Index(['feature_0', 'feature_1', 'feature_2', 'feature_3', 'feature_4',
       'feature_5', 'feature_6', 'feature_7', 'feature_8', 'feature_9',
       ...
       'feature_511', 'width', 'height', 'coordinates', 'image_name', 'label',
       'xmin', 'ymin', 'xmax', 'ymax'],
      dtype='object', length=521)

可以看到,label列不在最后一列,我们需要将其放到最后一列,该如何操作?

要将"label"列移动到最后一列,您可以使用pandas库的reindex方法。以下是相应的示例代码:

import pandas as pd

# 读取数据集
df = pd.read_csv('your_dataset.csv')

# 将"label"列移动到最后一列
column_order = list(df.columns)
column_order.remove('label')
column_order.append('label')
df = df.reindex(columns=column_order)

# 打印结果
print(df)

这段代码假设您的数据集已保存为一个名为"your_dataset.csv"的CSV文件,并使用pandas库来读取和处理数据。首先,将数据集的列名存储在一个列表中。然后,从列表中移除"label"列,并将其追加到列表的末尾。最后,使用pandas的reindex方法按新的列顺序重新排列数据集。

请注意,示例代码中的列名可能需要根据您的实际数据集进行适当调整。

输出结果为:

在这里插入图片描述

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

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

相关文章

Windows | \\wsl.localhost无法访问

Windows | \\wsl.localhost无法访问 在地址栏输入:\\wsl.localhost或者\\wsl.localhost\

解决新版Pyahcrm2023.1.2版本没有manage repositories按钮无法更改依赖源的问题及使用Pycharm安装库的新理解

本文章的理解基于下面两篇文章: https://blog.csdn.net/henu1710252658/article/details/130918206 https://blog.csdn.net/henu1710252658/article/details/82015796 问题一:新版Pyahcrm2023.1.2版本没有manage repositories按钮无法更改依赖源 首先&am…

高效读深度学习代码:如何又快又好的get代码的逻辑与思想

犹豫很久要不要把读代码这个事情专门挑出来写成一篇推文。毕竟读代码嘛,大家可能都会读。而且笔者个人读的和写的代码量也并不足以到指导大家读代码的程度。但笔者还是决定大胆地写一点:就当是给自己设立今后读代码的标准,也将一些之前未能践…

浏览器相关面试题

1、在浏览器中输入URL并回车后发生了什么 https:www.baidu.com url > 统一资源定位发,(网址) 是IP的一个映射,方便记忆 https:传输协议(http和TCP之间加了一层TSL或者SSL的安全层) www&a…

在Ubuntu中禁用和启用CPU内核详解

概要 在某些情况下,您可能需要在Ubuntu操作系统中禁用或启用CPU内核。禁用CPU内核可以帮助您降低功耗,提高性能或解决一些与硬件和软件兼容性相关的问题。本文将介绍如何在Ubuntu中禁用和启用CPU内核的方法。 方法一:使用GRUB配置 GRUB是Ubu…

谷歌验证码kaptcha使用(包括前端获取获取解析)

1.后端 基于springboot开发。 包结构 1.导入依赖 <!--kaptcha验证码生成器--><dependency><groupId>com.github.axet</groupId><artifactId>kaptcha</artifactId><version>0.0.9</version></dependency> 2.配置类 …

从零开始:深度学习入门资料推荐

还记得几年前刚入坑的时候&#xff0c;老师给的入门资料就是一堆论文&#xff01;害的我差点放弃。。。 如今深度学习应用的开发成本越来越低&#xff0c;学习资料越来越多&#xff0c;于是对初学者来说进入了另一个相反的困境——资料过多&#xff0c;让人眼花缭乱&#xff0…

ASEMI整流桥MB6S是什么电子元件

编辑-Z 在电子工程领域&#xff0c;整流器是一种常见的电子设备&#xff0c;用于将交流电&#xff08;AC&#xff09;转换为直流电&#xff08;DC&#xff09;。其中&#xff0c;整流桥MB6S是一种广泛使用的整流器&#xff0c;以其高效、稳定和可靠的性能赢得了工程师们的青睐…

[Container]Hadoop集群镜像打包

文章目录 Docker DNS配置Linux Docker DNS设置Windows、MacOs Docker DNS设置 打包HadoopDockerfile打包文件参数声明和基础镜像引入安装相关依赖库创建普通用户下载或导入软件包环境变量配置 初始化脚本参数配置${HADOOP_CONF_DIR}/workers工作节点${HADOOP_CONF_DIR}/hadoop-…

97、基于stm32单片机智能药箱药盒温湿度体温光照时钟wifi手机APP监控(程序+原理图+PCB源文件+手机APP源码+硬件设计资料+元器件清单等)

单片机类型选择 方案一&#xff1a;可以使用现在比较主流的单片机STC89C5单片机进行数据处理。这款单片机具有的特点是内存和51的单片机相比多了4KB内存&#xff0c;但是价格和51单片机一样。并且支持数据串行下载和调试助手。此款单片机是有ATMEL公司生产&#xff0c;可用5V电…

appium自动化测试之PO模型设计

目录 PO模型 PO分层 PO模型设计框架 config目录 common目录 pages目录 function目录 case目录 logs目录 report目录 runTest.py文件 总结&#xff1a; 我们在做自动化的时候应该都听过PO模型&#xff0c;那么什么是PO模型呢&#xff1f;PO模型在自动化中的作用是什…

【链表OJ】删除链表中重复的结点

⭐️ 往期链表相关OJ &#x1f4ab;链接1&#xff1a;链表分割 &#x1f4ab;链接2&#xff1a;链表中倒数第k个结点(快慢指针问题) &#x1f4ab;链接3&#xff1a;leetcode 876.链表的中间结点(快慢指针问题) &#x1f4ab;链接4&#xff1a;leetcode 206.反转链表 &#x1…

第二章React全家桶之面向组件编程

文章目录 一、组件的基本理解和使用1-1、函数式组件1-2、类式组件 二、组件实例的三大核心属性2-1、state的基本使用2-2-1、state的总结 2-2、props的基本使用2-2-1、props的传值与批量传值2-2-2、对props进行限制2-2-3、props的简写2-2-4、类式组件中的构造器与props2-2-5、函…

使用 eKuiper 按需桥接 CAN Bus 数据至 MQTT

CAN Bus 是一种广泛应用于汽车和工业领域的通信协议&#xff0c;它能够让多个设备在同一网络中进行交互。而 MQTT 是一种广泛应用于物联网领域的通信协议&#xff0c;作为一种轻量级的发布-订阅消息传输协议&#xff0c;它有效地促进了机器之间的通信。 通过将 CAN Bus 数据桥…

Vue组件库Element-常见组件-分页

常见组件-Pagination 分页 Pagination 分页&#xff1a;当数据过多时&#xff0c;会使用分页分解数据 具体关键代码如下&#xff1a;&#xff08;重视注释&#xff09; <template><div><!-- Pagination 分页 --><el-pagination background layout"…

Etsy店铺被封的原因是什么?如何防封

ETSY是一个全球知名的在线市场和电商平台&#xff0c;专注于手工艺品、独特商品和创意艺术。它为卖家提供了一个平台来展示和销售自己的手工制品、艺术品、珠宝、家居用品、时尚配饰等各种创意产品。作为一个颇受中国商家青睐的平台&#xff0c;Etsy在账号检测方面也是不亚于亚…

微软MFC技术中消息的分类

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天来聊聊MFC技术中消息的分类。 微软Windows中的消息虽然很多&#xff0c;但是种类并不繁杂&#xff0c;大体上有3种&#xff1a;窗口消息、命令消息和控件通知消息。 窗口消息 窗口消息是系统中最为常见…

网络安全(黑客)自学路线

一.零基础学习 在网络安全的学习过程中&#xff0c;基础知识是一个绕不过的问题&#xff0c;Web知识本身就非常丰富&#xff0c;覆盖范围也非常广泛。 首先是大家比较熟悉的浏览器、数据库、服务器&#xff1b; 以及由简到难的HTML、JavaScript和CSS、PHP、Java、.net&#…

【Flutter】使用 Drift 实现 Flutter 数据持久化

文章目录 一、前言二、版本信息三、Drift 简介四、如何安装和设置 Drift五、基础使用1. 创建数据库和表2. 插入、查询、更新和删除数据3. 使用事务 六、总结 一、前言 你是否渴望成为 Flutter 的专家&#xff0c;掌握更多的技巧和最佳实践&#xff1f;我们有个好消息要告诉你&…

【vue3】学习笔记--组件通信方式

学习vue3总是绕不开vue2 vue2组件通信方式总结&#xff1a; 1、props&#xff1a;可以实现父子组件&#xff0c;子父组件&#xff0c;甚至兄弟组件通信 2、自定义事件&#xff1a;实现子父组件通信 3、全局事件总线$bus:可以实现任意组件通信 4、pubsub&#xff1a;发布订阅模…