解决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
相关产品推荐
相关产品推荐

