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

本文介绍了Python内置的os模块,包括文件和目录操作、进程管理和环境变量访问。详细讲解了如何提取图片名称,遍历文件夹获取图像文件,以及如何使用正则表达式从图像名称中提取特定信息。此外,还展示了处理包含浮点数坐标值的代码修改示例。
摘要由CSDN通过智能技术生成

一、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列。

创建一个文件夹提取图片并用于图像分析的学习后作图AI的过程涉及几个关键步骤,这通常在深度学习特别是计算机视觉领域应用到。这里是一个简化的概述: 1. **数据准备**: - 首先,你需要确定需要哪些图片,比如从特定文件夹选择图像。可以使用Python的`os`库遍历文件夹并收集所有图片。 ```python import os image_folder = '/path/to/folder' images = [os.path.join(image_folder, img) for img in os.listdir(image_folder) if img.endswith(('.jpg', '.png'))] ``` 2. **图像预处理**: - 图片可能需要调整尺寸、归一化、色彩空间转换等操作以便于模型训练。可以使用`PIL`或`tensorflow.keras.preprocessing.image`模块。 3. **模型训练**: - 使用深度学习框架如TensorFlow或PyTorch。例如,你可以用卷积神经网络(CNN)进行图像分类或图像生成。下面是一个简单的使用Keras的例子: ```python from tensorflow.keras.applications.resnet50 import ResNet50, preprocess_input from tensorflow.keras.layers import Dense, GlobalAveragePooling2D from tensorflow.keras.models import Sequential # 加载预训练的ResNet50模型 base_model = ResNet50(weights='imagenet', include_top=False) # 添加新层 model = Sequential() model.add(base_model) model.add(GlobalAveragePooling2D()) model.add(Dense(1024, activation='relu')) model.add(Dense(num_classes, activation='softmax')) # 冻结基础模型的权重 for layer in base_model.layers: layer.trainable = False # 编译和训练模型 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) model.fit(images, labels, batch_size=32, epochs=10) ``` 4. **结果解析与绘图**: - 训练完成后,模型可以根据预测的结果生成新的图像。这可能括将分类结果显示在原始图像上,或者生成一些艺术风格的图像。 5. **部署应用**: - 将模型封装成API服务,或者作为一个可交互的应用程序,用户上传图片后能够实时看到分析结果和作图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旅途中的宽~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值