You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决Google Colab [Errno21]目录错误:循环读取图片计算HOG特征问题

报错修复方案

报错根因

  • os.listdir()会返回目标路径下所有文件与文件夹条目,Colab运行时会自动在目录下生成.ipynb_checkpoints临时缓存文件夹,原有代码直接把所有条目当作图片打开,遇到文件夹就会抛出[Errno 21] Is a directory错误
  • 正样本路径拼接硬编码了Windows系统的反斜杠分隔符\\,Colab为Linux内核,路径分隔符为/,会导致路径拼接错误无法找到图片

修复后完整代码

import os
from PIL import Image
from skimage.feature import hog
from sklearn.preprocessing import LabelEncoder

# 定义图片路径
pos_im_path = r"/content/positive_images" 
neg_im_path= r"/content/negative_images" # 建议填写绝对路径避免找不到文件

# 过滤目录仅保留有效图片文件的工具函数
def get_image_files(dir_path):
    # 可根据实际支持的图片格式调整后缀列表
    valid_img_exts = ['.jpg', '.jpeg', '.png', '.bmp', '.pgm']
    img_file_list = []
    for entry in os.listdir(dir_path):
        full_entry_path = os.path.join(dir_path, entry)
        # 跳过文件夹,仅保留后缀匹配的图片文件
        if os.path.isfile(full_entry_path) and os.path.splitext(entry)[1].lower() in valid_img_exts:
            img_file_list.append(entry)
    return img_file_list

# 读取过滤后的正负样本图片列表
pos_im_listing = get_image_files(pos_im_path)
neg_im_listing = get_image_files(neg_im_path)

num_pos_samples = len(pos_im_listing)
num_neg_samples = len(neg_im_listing)
print(f"正样本数量:{num_pos_samples}")
print(f"负样本数量:{num_neg_samples}")

data = []
labels = []
# HOG参数可根据需求自行调整
orientations = 9
pixels_per_cell = (8, 8)
cells_per_block = (2, 2)

# 处理正样本
for file in pos_im_listing:
    img = Image.open(os.path.join(pos_im_path, file))
    gray = img.convert('L')
    fd = hog(gray, orientations, pixels_per_cell, cells_per_block, block_norm='L2', feature_vector=True)
    data.append(fd)
    labels.append(1)

# 处理负样本
for file in neg_im_listing:
    img = Image.open(os.path.join(neg_im_path, file))
    gray = img.convert('L')
    fd = hog(gray, orientations, pixels_per_cell, cells_per_block, block_norm='L2', feature_vector=True)
    data.append(fd)
    labels.append(0)

# 标签编码
le = LabelEncoder()
labels = le.fit_transform(labels)

核心修改说明

  • 新增文件过滤逻辑:自动跳过.ipynb_checkpoints等文件夹,同时校验文件后缀,避免非图片文件导致的读取报错
  • 路径拼接改用os.path.join():自动适配不同操作系统的路径分隔符,不会出现Windows/Linux路径不兼容问题
  • 替换列表长度统计方式:把原代码的size()改为更通用的len(),无需依赖numpy即可正常统计文件数量
  • 补充HOG参数定义:避免运行时出现变量未定义的报错

内容的提问来源于stack exchange,提问作者Gomes Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:00:01