Streamlit .errors. streamlitapiexception: ' seek() '不是一个有效的S



我正试图将图像传递给我的函数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这样的名称。