如何在Keras中加载本地图片 解决Colab风格迁移代码运行报错
问题根因
报错的核心原因是变量类型不匹配:
- 原始代码中
keras.utils.get_file()返回的是图片文件的本地路径字符串,赋值给base_image_path后,后续代码可以直接将该字符串作为路径参数传入keras.preprocessing.image.load_img()读取图片 - 修改后你直接调用
keras.utils.load_img('/content/my_pic.jpg'),该方法返回的是PIL.JpegImagePlugin.JpegImageFile类型的图片对象,后续代码再将该对象作为路径参数传给load_img(),自然会触发类型错误,展示图片时传入PIL对象也会触发对应的格式警告。
修正方案
不需要调用load_img给路径变量赋值,直接把本地图片的路径字符串赋值给base_image_path即可,修改后的代码如下:
import numpy as np import tensorflow as tf from tensorflow import keras from tensorflow.keras.applications import vgg19 # 直接填写你上传到Colab的本地图片路径字符串 base_image_path = '/content/my_pic.jpg' style_reference_image_path = keras.utils.get_file('starry_night.jpg', 'https://i.imgur.com/9ooB60I.jpg') result_prefix = 'paris_generated' iterations = 5000 # 不同损失分量的权重 total_variation_weight = 1e-6 style_weight = 2e-6 content_weight = 2e-8 # 生成图片的尺寸 width, height = keras.preprocessing.image.load_img(base_image_path).size img_nrows = 400 img_ncols = int(width * img_nrows / height)
如果后续需要展示PIL类型的图片对象,可以参考以下写法将其转为字节流后再传入IPython.display.Image:
from IPython.display import Image, display from PIL import Image as PILImage import io # 方法1:直接传图片路径展示,最简单 display(Image(base_image_path)) # 方法2:已有PIL图片对象时的展示方式 pil_img = PILImage.open(base_image_path) img_byte_arr = io.BytesIO() pil_img.save(img_byte_arr, format='PNG') display(Image(img_byte_arr.getvalue()))
内容的提问来源于stack exchange,提问作者Lostsoul
相关产品推荐
相关产品推荐

