我是Python世界和Streamlit的新手,并试图用Streamlit建立一个连接到websocket的小应用程序,并在每条消息上更新图像。我实现了以下两个文件:
import websockets
import asyncio
import streamlit as st
from PIL import Image
from util import consumer
st.set_page_config(page_title="stream", layout="wide")
status = st.empty()
connect = st.checkbox("Connect to WS Server")
placeholder_image = Image.open('placeholder.png')
image = st.image(placeholder_image)
if connect:
asyncio.run(consumer(status, image))
else:
status.subheader(f"Disconnected.")
和util文件:
import io
import websockets
import json
import base64
from PIL import Image
import streamlit as st
WS_CONN = "ws://localhost:8765"
async def consumer(status, image):
websocket = await websockets.connect("ws://localhost:8765")
status.subheader(f"Connected to websocket!")
async for message in websocket:
current_image = Image.open(io.BytesIO(base64.b64decode(json.loads(message)["image"]))) # until here it works fine, sample log is <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=1280x720 at 0x129D81FD0>
image.image = current_image # image is not being updated
当前的问题是,当我试图在websocket消息处理程序中设置图像时,图像没有更新。有什么我做错的流光API在这里吗?也许是缓存问题?
您在应用程序中绘制图像的唯一位置是在以下行:
placeholder_image = Image.open('placeholder.png')
image = st.image(placeholder_image
据我所知,图像placeholder.png
没有更新。
请做st.image(image_from_consumer)
。