Streamlit:如何在缓存中存储变量值
Streamlit: How to store value of variable in cache
我使用 2 个不同的单选选项来执行不同的任务。我想从一中捕获图像,然后在选项 2 中稍后执行一些操作。当我在 my_image
(在选项 1 中)中存储一帧后尝试将单选选项更改为 2 时,出现错误threstreamlit NameError: name 'my_image' is not defined
。我在想这可以通过将变量 my_image
存储在缓存中来完成,但我不知道该怎么做。有没有其他方法可以做到这一点。
import streamlit as st
import cv2
def Camera():
frames1 = st.empty()
button1 = st.button('DONE', key=0)
while cap.isOpened():
frames1.image(cap.read()[1], channels="BGR")
if button1:
my_image = cap.read()[1]
cap.release()
break
return my_image
option = st.sidebar.radio('Choose the option', [1, 2])
if option == 1:
cap = cv2.VideoCapture(0)
my_image = Camera()
st.image(my_image, channels="BGR")
if option == 2:
st.image(my_image, channels='BGR')
Streamlit 运行 每次有交互事件时自上而下。在您的代码中,当 option==0
时 my_image = Camera()
仅是 运行;当单选按钮切换到另一个选项时,my_image
永远不会被定义。
将定义 cap
和 my_image
的代码移出您的第一个条件语句。
猜猜我需要将此 SessionState 要点复制到 SessionState.py 文件中。
我初始化一个变量 session_state = SessionState.get(name='', img=None)
.
在 option==1
中,分配了 session_state.img = my_image
,然后用它到达 option==2
中的 my_image
。
import streamlit as st
import cv2
import SessionState
def Camera():
frames1 = st.empty()
button1 = st.button('DONE', key=0)
while cap.isOpened():
frames1.image(cap.read()[1], channels="BGR")
if button1:
my_image = cap.read()[1]
cap.release()
break
return my_image
option = st.sidebar.radio('Choose the option', [0, 1])
session_state = SessionState.get(name='', img=None)
if option == 0:
cap = cv2.VideoCapture(0)
my_image = Camera()
st.image(my_image, channels="BGR")
session_state.img = my_image
if option == 1:
my_image = session_state.img
st.image(my_image, channels='BGR')
我使用 2 个不同的单选选项来执行不同的任务。我想从一中捕获图像,然后在选项 2 中稍后执行一些操作。当我在 my_image
(在选项 1 中)中存储一帧后尝试将单选选项更改为 2 时,出现错误threstreamlit NameError: name 'my_image' is not defined
。我在想这可以通过将变量 my_image
存储在缓存中来完成,但我不知道该怎么做。有没有其他方法可以做到这一点。
import streamlit as st
import cv2
def Camera():
frames1 = st.empty()
button1 = st.button('DONE', key=0)
while cap.isOpened():
frames1.image(cap.read()[1], channels="BGR")
if button1:
my_image = cap.read()[1]
cap.release()
break
return my_image
option = st.sidebar.radio('Choose the option', [1, 2])
if option == 1:
cap = cv2.VideoCapture(0)
my_image = Camera()
st.image(my_image, channels="BGR")
if option == 2:
st.image(my_image, channels='BGR')
Streamlit 运行 每次有交互事件时自上而下。在您的代码中,当 option==0
时 my_image = Camera()
仅是 运行;当单选按钮切换到另一个选项时,my_image
永远不会被定义。
将定义 cap
和 my_image
的代码移出您的第一个条件语句。
猜猜我需要将此 SessionState 要点复制到 SessionState.py 文件中。
我初始化一个变量 session_state = SessionState.get(name='', img=None)
.
在 option==1
中,分配了 session_state.img = my_image
,然后用它到达 option==2
中的 my_image
。
import streamlit as st
import cv2
import SessionState
def Camera():
frames1 = st.empty()
button1 = st.button('DONE', key=0)
while cap.isOpened():
frames1.image(cap.read()[1], channels="BGR")
if button1:
my_image = cap.read()[1]
cap.release()
break
return my_image
option = st.sidebar.radio('Choose the option', [0, 1])
session_state = SessionState.get(name='', img=None)
if option == 0:
cap = cv2.VideoCapture(0)
my_image = Camera()
st.image(my_image, channels="BGR")
session_state.img = my_image
if option == 1:
my_image = session_state.img
st.image(my_image, channels='BGR')