我正试图将图像传递给我的函数loadImage
:
def loadImage(image):
np_image = Image.open(image)
np_image = np.array(np_image).astype('float32') / 255
np_image = transform.resize(np_image, (224, 224, 3))
# np_image = np.expand_dims(np_image, axis=0)
return np_image
当我尝试传递从Streamlit图像读取的图像时,它给了我以下错误:
raise StreamlitAPIException(message)
streamlit.errors.StreamlitAPIException: `seek()` is not a valid Streamlit command.
My Main Function命令:
list = predictions(model=model, breed_list=breed_list, image=st.image(img))
预测功能:
def predictions(model, breed_list, image):
probabilities = model.predict(helper.loadImage(image))
return probabilities
加载图片
img_file = st.sidebar.file_uploader(label='Upload a file', type=['png', 'jpg'])
if img_file:
img = Image.open(img_file)
完整错误
Image.open()
期待一个文件名,pathlib.Path
,或io类对象,但你传递它的st.image(img)
的输出,这将是一个Streamlit DeltaGenerator对象(本质上是一个Streamlit元素)。由于st.image(img)
的输出不是文件名(即字符串),也不是pathlib.Path
对象,Image.open()
假设它是一个类似io的对象,因此为什么它试图调用.seek()
方法(DeltaGenerator对象不提供,然后导致错误)。
根据您的代码判断,我假设img
表示您想要显示的某些图像的文件名。如果是这种情况,您可能希望更改代码,以便首先将图像加载到numpy数组中,然后在Streamlit中渲染加载的图像,然后从中进行预测:
def loadImage(image):
np_image = Image.open(image)
np_image = np.array(np_image).astype('float32') / 255
np_image = transform.resize(np_image, (224, 224, 3))
# np_image = np.expand_dims(np_image, axis=0)
return np_image
def predictions(model, breed_list, image):
probabilities = model.predict(loadImage(image))
return probabilities
loaded_img = loadImage(img)
st.image(img)
list = predictions(model=model, breed_list=breed_list, image=loaded_img)
另外,作为题外话:为了减少混淆,我强烈建议将list = predictions(...)
中的list
重命名为与Python内置的list
不冲突的名称,也许是像predicted
这样的名称。