【跑实验06】os包的理解?如何提取图片的名称?如何遍历一个文件夹,提取里面的图像名称?如何提取图片名称中的特定部分?代码错误地方修改;

news2024/9/28 9:25:32

文章目录

  • 一、os包的理解
    • 1.1 文件和目录操作
    • 1.2 进程管理
    • 1.3 环境变量
    • 1.4 路径操作
  • 二、如何提取图片的名称?
  • 三、遍历一个文件夹,提取里面的图像名称
  • 四、如何提取图片名称中的特定部分?
  • 五、代码报错修改

一、os包的理解

os 是 Python 中的一个内置模块,提供了与操作系统交互的功能。它允许您在 Python 程序中执行各种与操作系统相关的任务,如文件和目录操作、进程管理、环境变量访问等。以下是一些 os 模块中常用的函数和方法:

1.1 文件和目录操作

  1. os.getcwd():获取当前工作目录的路径。
  2. os.chdir(path):将当前工作目录更改为指定的路径。
  3. os.listdir(path):返回指定目录中的文件和目录列表。
  4. os.mkdir(path):创建一个新目录。
  5. os.remove(path):删除指定路径的文件。
  6. os.rmdir(path):删除指定路径的空目录。
  7. os.path.exists(path):检查指定路径是否存在。
  8. os.path.isfile(path):检查指定路径是否是一个文件。
  9. os.path.isdir(path):检查指定路径是否是一个目录。

1.2 进程管理

  1. os.system(command):在子shell中执行系统命令。
  2. os.spawnl(mode, path):新建进程执行指定的程序文件。
  3. os.kill(pid, sig):向指定进程发送信号。

1.3 环境变量

  1. os.environ:一个包含环境变量的字典。
  2. os.getenv(key):获取指定环境变量的值。
  3. os.getenv(key):获取指定环境变量的值。

1.4 路径操作

  1. os.path.join(path1, path2, …):将多个路径组合成一个。
  2. os.path.basename(path):返回指定路径的文件名部分。
  3. os.path.dirname(path):返回指定路径的目录部分。
  4. os.path.splitext(path):分离路径的扩展名部分。

这些只是 os 模块提供的一些常用函数和方法的示例。在实际应用中,您可以根据需要使用其他函数和方法。要使用 os 模块,只需在 Python 脚本中导入它,例如:import os。然后,您就可以使用模块中的函数和方法来执行与操作系统相关的任务。

二、如何提取图片的名称?

要获取图像的名称,您可以使用Python中的os.path.basename函数。

import os

image_path = './val/cropped_(0, 0, 7, 26)_obj365_val_000000605687.jpg'
image_name = os.path.basename(image_path)
print(image_name)

在上述代码中,将"图像文件路径"替换为实际的图像文件路径。os.path.basename函数将返回文件路径中的文件名部分。然后,您可以将文件名存储在一个变量中,或者根据需要进行后续处理。

请注意,图像文件路径可以是绝对路径(例如:‘/path/to/image.jpg’)或相对路径(例如:‘images/image.jpg’)。确保指定正确的文件路径以获得正确的图像名称。

我们上面的输出结果为:

cropped_(0, 0, 7, 26)_obj365_val_000000605687.jpg

三、遍历一个文件夹,提取里面的图像名称

要遍历一个文件夹并提取其中的图像名称,我们可以使用 os 模块结合循环来完成。以下是一个示例代码:

import os

folder_path = '文件夹路径'

# 获取文件夹中的所有文件和子文件夹
files = os.listdir(folder_path)

# 遍历文件夹中的每个文件和子文件夹
for file in files:
    file_path = os.path.join(folder_path, file)
    
    # 检查文件是否为图像文件
    if os.path.isfile(file_path) and file.lower().endswith(('.jpg', '.jpeg', '.png', '.gif')):
        image_name = os.path.splitext(file)[0]  # 提取图像名称
        print(image_name)

在上述代码中,将 ‘文件夹路径’ 替换为您实际的文件夹路径。首先,使用 os.listdir() 函数获取文件夹中的所有文件和子文件夹的列表。然后,通过遍历这个列表,对于每个文件,使用 os.path.isfile() 函数检查它是否是一个文件,并使用 file.lower().endswith((‘.jpg’, ‘.jpeg’, ‘.png’, ‘.gif’)) 条件来判断是否为图像文件。如果是图像文件,则使用 os.path.splitext() 函数提取图像的名称,并打印或存储该名称。

请注意,这个示例假定文件夹中只包含图像文件。如果文件夹中包含其他类型的文件,您可以根据需要修改条件来筛选出图像文件。

我的文件夹路径为:

folder_path = 'segment-anything-main/notebooks/images/'

在这里插入图片描述

输出结果为:

在这里插入图片描述

四、如何提取图片名称中的特定部分?

cropped_(0, 0, 10, 13)_obj365_val_000000057887.jpg是我的一个图像名称,我想提取中间的坐标信息和图像的名称,该如何实现?

要从字符串 “cropped_(0, 0, 10, 13)_obj365_val_000000057887” 中提取 (0, 0, 10, 13) 和 “obj365_val_000000057887”,您可以使用字符串操作和正则表达式。

下面是一种可能的方法,使用正则表达式来匹配模式并提取所需的部分:

import re

# 原始字符串
filename = "cropped_(0, 0, 10, 13)_obj365_val_000000057887"

# 使用正则表达式匹配并提取坐标和对象名称
pattern = r'\((\d+), (\d+), (\d+), (\d+)\)_([^_]+)'
match = re.search(pattern, filename)

if match:
    # 提取坐标
    coordinates = tuple(map(int, match.group(1, 2, 3, 4)))
    print(coordinates)

    # 提取对象名称
    object_name = match.group(5)
    print(object_name)

在上述代码中,我们使用正则表达式模式 r’((\d+), (\d+), (\d+), (\d+))([^]+)’ 来匹配括号内的四个数字和下划线之间的部分。通过使用 re.search() 函数进行匹配,我们可以使用 match.group() 方法提取所需的结果。

输出将会是:

(0, 0, 10, 13)
obj365_val_000000057887

这样,我们就可以提取出 (0, 0, 10, 13) 和 “obj365_val_000000057887”。请注意,正则表达式模式中的括号 (…) 表示捕获组,我们使用 match.group() 来访问这些捕获组中的匹配结果。

五、代码报错修改

在运行代码时,遇到了一次错误:

Traceback (most recent call last):
  File "/home/wangzhenkuan/CLIP_image_encoder_sam_with_info.py", line 55, in <module>
    coordinates = tuple(map(int, name_parts[1].strip('()').split(',')))
ValueError: invalid literal for int() with base 10: '355.0'

根据报错信息,看起来我的坐标值包含浮点数,而 int() 函数只接受整数值。您可以尝试使用 float() 函数将坐标值转换为浮点数,或者根据您的需求选择使用 int() 或 float() 来处理坐标值。

以下是修改后的代码示例,将坐标值转换为浮点数:

import os
import torch
import clip
from PIL import Image
import pandas as pd

# 加载预训练的CLIP模型
device = "cuda" if torch.cuda.is_available() else "cpu"
model, preprocess = clip.load("ViT-B/32", device=device)

# 图像文件夹路径
folder_path = 'segment-anything-main/notebooks/output/'  # 将此路径替换为图像文件夹的实际路径

# 批处理大小和Excel表格名称
batch_size = 10000  # 每个批次的图像数量
excel_prefix = 'output_batch_'  # Excel表格的前缀名称

# 获取图像文件列表
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]

    # 创建空DataFrame用于存储图像特征和信息
    df = pd.DataFrame()
    feature_list = []
    coordinates_list = []
    image_name_list = []

    # 遍历当前批次的图像文件
    for filename in batch_files:
        image_path = os.path.join(folder_path, filename)

        # 加载和预处理图像
        image = Image.open(image_path).convert('RGB')
        image_resized = image.resize((28, 28))
        image_input = preprocess(image_resized).unsqueeze(0).to(device)

        # 图像编码
        with torch.no_grad():
            image_features = model.encode_image(image_input)

        # 将图像特征添加到列表中
        image_features_list = image_features.squeeze().tolist()
        feature_list.append(image_features_list)

        # 解析图像文件名以提取坐标和对象名称
        name_parts = filename.split('_')
        coordinates = tuple(map(float, name_parts[1].strip('()').split(',')))
        object_name = '_'.join(name_parts[2:])
        coordinates_list.append(coordinates)
        image_name_list.append(object_name)

    df['features'] = feature_list
    df['coordinates'] = coordinates_list
    df['image_name'] = image_name_list

    # 生成当前批次的Excel表格
    base_path = 'output/'
    excel_filename = f"{excel_prefix}{batch_idx + 1}.xlsx"
    output_path = os.path.join(base_path, excel_filename)
    df.to_excel(output_path, index=False)

    print(f"Batch {batch_idx + 1} processed. Excel file saved: {excel_filename}")

请注意,将坐标值转换为浮点数后,存储在 DataFrame 的 coordinates 列中。图像名称存储在 image_name 列中。我门可以根据需要进一步调整和修改代码以适应需求。

我们生成的数据集如下所示:

在这里插入图片描述
在这里插入图片描述

第一列有512列。

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

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

相关文章

大厂OKR管理法:公开透明是最大特点

大厂OKR管理法&#xff1a;公开透明是最大的特点 仔细想&#xff0c;这是一件破天荒的事情 企业内部大部分的任务“公开透明” 公开透明会减少巨大的沟通成本 每个人的关键任务几乎是全部公开 估计少数的财务、人事、公关方面的不会 趣讲大白话&#xff1a;公开透明损耗少 【趣…

【UE 从零开始制作坦克】12-制作全自动机枪炮塔

效果 步骤 1. 下载模型和材质&#xff08;链接&#xff1a;https://download.csdn.net/download/ChaoChao66666/87951079&#xff09; 2. 将下载好的文件夹拖入UE工程中 首先点击“重置为默认”&#xff0c;然后勾选“合并网格体”&#xff0c;最后点击“导入所有” 导入后资源…

YOLOv5、YOLOv7独家原创改进:独家首发最新原创XIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能、收敛速度和鲁棒性

💡该教程为属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 💡本篇文章为YOLOv5、YOLOv7独家原创改进:独家首发最新原创XIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能、收敛速度和鲁棒性。 �…

【Java】Java数组链表类详记

本文仅供学习参考&#xff01; 相关文章地址&#xff1a; https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html https://www.w3schools.com/java/java_arraylist.asp https://www.runoob.com/java/java-arraylist.html Java ArrayList 基础知识 ArrayList是 …

SpringSecurity-尚硅谷

前置知识 掌握Spring框架掌握SpringBoot使用掌握JavaWEB技术 文章目录 前置知识1. 简介1.1 概要1.2 历史 2.入门案例2.1 创建一个项目2.1.1 pom.xml2.1.2 controller层 2.2 运行这个项目2.32.4 SpringSecurity 基本原理2.5 UserDetailsService 接口讲解2.6 PasswordEncoder 接…

AI黑客松近期比赛清单;36氪AI淘宝店盈利复盘;GitHub Copilot官方最佳实践;AI在HR领域的应用探索 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; ⋙ 点击查看 AI Hackathon (黑客马拉松) 汇总清单 &#x1f916; 〖飞桨〗2023大模型应用创新挑战赛 百度飞桨联合上海市青年五十人创新创业研究院等…

【软件测试】推荐几款适合练手的项目

最近收到许多自学自动化测试的小伙伴私信&#xff0c;学习了理论知识后&#xff0c;却没有合适的练手项目。 测试本身是一个技术岗位&#xff0c;如果只知道理论&#xff0c;没有实战经验&#xff0c;在面试中很难说服面试官&#xff0c;比如什么场景下需要添加显示等待&#x…

CentOs7 安装jdk8详细教程

方法一&#xff1a;gz安装包安装&#xff08;推荐&#xff09; 1.下载所需版本的.tar.gz安装包 Oracle官网即可下载&#xff0c;选择好对应版本&#xff0c;可以先下到主机&#xff0c;然后上传到虚拟机的Linux上。&#xff08;注意&#xff1a;Oracle现在下载jdk需要注册登录…

OAuth2.0与单点登录的区别

本文说下OAuth2.0与单点登录的区别 文章目录 概述什么是单点登录单点登录和Oauth2.0的区别单点登录的实现本文小结 概述 SSO是Single Sign On的缩写&#xff0c;OAuth是Open Authority的缩写&#xff0c;这两者都是使用令牌的方式来代替用户密码访问应用。流程上来说他们非常相…

解决联网时自动打开浏览器转到必应msn网址的问题

现象 开机后或者断网重连之后&#xff0c;系统自动打开默认浏览器&#xff08;不管是IE还是谷歌&#xff0c;或其他的浏览器&#xff09;网址为http://go.microsoft.com/fwlink/?LinkID219472&clcid0x409接着转到http://cn.bing.com/ 或者 https://www.msn.com/ 解决方法…

Kafka系列 - kafka 副本|AR|ISR|OSR|Leader|Follower|HW|LEO

文章目录 01. kafka 副本信息02. kafka 中 ISR、AR和OSR代表什么&#xff1f;03. kafka 中 ISR的伸缩指什么&#xff1f;04. 什么情况下一个broker会从ISR中踢出去&#xff1f;05. kafka 副本和ISR扮演什么角色&#xff1f;06. kafka 副本长时间不在ISR中&#xff0c;意味着什么…

buuctf re(二)+ web CheckIn

目录 re xor helloword reverse3 web SUCTF 2019 CheckIn xor 1.查壳 64位&#xff0c;无壳 2.ida&#xff0c;f5查看伪代码 3.跟进global dq是八个字节&#xff0c;汇编数据类型参考汇编语言---基本数据类型_汇编db类型_wwb0111的博客-CSDN博客 4.因为global变量里有一…

多商户商城有哪些功能和优势?-加速度jsudo

电商时代下&#xff0c;传统企业商家急需拓展业务规模&#xff0c;向线上拓展&#xff0c;而多商户小程序造价低&#xff0c;效应高&#xff0c;自然就成为了很多企业商家拓展线上营销渠道的首要选择,那么多商户小程序商城涵盖哪些功能呢?下面小编就来详细为大家解答&#xff…

UE5《Electric Dreams》项目PCG技术解析 之 理解Assembly(以SplineExample为例)

文章目录 1. 什么是Assembly2. PCG部分2.1 Assembly变换2.2 Point变换2.2.1. SG_CopyPointsWithHierachy2.2.2 过滤及点变换2.2.3. ApplyHierachy 3. 小结 1. 什么是Assembly UE5.2的PCG出了有一段时间了&#xff0c;大家玩得都很开心。很多朋友可能和老王一样&#xff0c;使用…

Rust语言从入门到入坑——(10)文件与IO

文章目录 0、引入1、命令行1.1 命令行参数1.2 命令行输入 2、文件操作2.1 读取文件2.2 写入文件 3、总结 0、引入 Rust 语言的 I/O 操作&#xff0c;最基本的交互模式&#xff0c;主流语言都具备的功能。 1、命令行 1.1 命令行参数 命令行程序是计算机程序最基础的存在形式&…

B050-cms05-轮播图 cookie session 登录

目录 轮播图修改操作删除操作查询并展示所有轮播图 无状态的HTTP协议CookieCookie的原理Cookie的创建获取Cookie更新Cookie设置cookie的声明周期设置cookie访问路径Cookie优缺点 SessionSession原理创建SessionSession的使用sesion的生命周期Session的优缺点Cookie和Session的区…

定积分计算—牛顿-莱布尼兹公式、定积分的几何意义、利用奇偶性化简、利用Wallis公式

定积分计算 前言定积分的常规计算技巧—牛顿-莱布尼茨公式定积分的几何意义利用奇偶性简化计算![在这里插入图片描述](https://img-blog.csdnimg.cn/9acfec48362141ba9486630f7060d78d.jpg)利用周期性平移和缩小积分区间利用Wallis公式利用一个常见的积分公式定积分计算练习题 …

yolov8 -01 部署

本想去配环境的步骤&#xff0c;在之前yolov5运行的环境下&#xff0c;试predict yolov8&#xff0c;竟然报错。 与其改bug, 选择重头来。 1. conda 创建新环境 yolo 8 conda create -n yolo82. 官网下载资料 官网下载yolo8相关资料 https://github.com/ultralytics/ultraly…

Flutter 检查连接网络 connectivity_plus

Flutter 检查连接网络 connectivity_plus 前言 有些对通讯敏感的程序&#xff0c;我们需要检查当前连接的网络情况。 我推荐使用 connectivity_plus https://pub-web.flutter-io.cn/packages/connectivity_plus 这个插件的好处就是支持全平台&#xff0c;这点非常好。 我们今天…

socketio连接失败,nginx返回502 connect() failed (111: Connection refused)

现象 我们信控平台&#xff0c;需要实时展示信号灯灯态&#xff08;红黄绿、倒计时等&#xff09; 当灯态变化时&#xff0c;前端信号机设备会通过socket协议将消息推送给我们的通信服务&#xff0c;通信服务将消息解析处理后&#xff0c;关联路口信息&#xff0c;再把信息通过…