如何修改ResNet50单图代码实现文件夹多图批量预测并将结果存入DataFrame
实现方案
需要额外导入两个依赖:os用于遍历文件夹,pandas用于构造结果数据表。将单图预测逻辑封装为独立函数,批量遍历目标文件夹内的图片文件调用函数,最后汇总为DataFrame即可。
完整修改后代码
import numpy as np import os import pandas as pd from keras.preprocessing import image from keras.applications import resnet50 import warnings warnings.filterwarnings('ignore') # 全局只加载一次预训练ResNet50模型,避免重复加载浪费资源 model = resnet50.ResNet50() def predict_single_image(img_path): """单张图片预测函数,返回Top9分类结果列表""" img = image.load_img(img_path, target_size=(224, 224)) x = image.img_to_array(img) x = np.expand_dims(x, axis=0) x = resnet50.preprocess_input(x) # verbose=0关闭预测进度条,批量运行更清爽 predictions = model.predict(x, verbose=0) predicted_classes = resnet50.decode_predictions(predictions, top=9)[0] return [y for _, y, _ in predicted_classes] if __name__ == "__main__": # -------------------------- 请修改为你的目标文件夹路径 -------------------------- IMAGE_FOLDER = "./your_image_folder" # 支持的图片格式,可按需补充 IMG_EXTENSIONS = ('.jpg', '.jpeg', '.png', '.bmp') result_list = [] # 遍历文件夹内所有文件 for filename in os.listdir(IMAGE_FOLDER): # 过滤非图片文件 if filename.lower().endswith(IMG_EXTENSIONS): full_path = os.path.join(IMAGE_FOLDER, filename) try: top9_res = predict_single_image(full_path) result_list.append({ "filename": filename, "top9_prediction": top9_res }) print(f"已处理: {filename}") except Exception as e: print(f"处理文件 {filename} 失败: {str(e)}") # 结果转为DataFrame result_df = pd.DataFrame(result_list) # 可选:导出为csv文件持久化存储 result_df.to_csv("resnet50_batch_prediction_result.csv", index=False, encoding="utf_8_sig") print("批量处理完成,结果已保存为 resnet50_batch_prediction_result.csv") # 直接打印查看结果 print(result_df)
功能说明
- 模型仅在程序启动时加载一次,不用每张图都重复加载,大幅提升批量处理速度
- 自动过滤非图片格式文件,增加异常捕获逻辑,单张图处理失败不会中断整体任务
- 结果默认保存为csv文件,方便后续分析使用,DataFrame包含两列:
filename:对应图片的文件名top9_prediction:该图片对应的Top9分类结果列表,和单图输出格式完全一致
内容的提问来源于stack exchange,提问作者Wax
相关产品推荐
相关产品推荐

