Streamlit是基于Python的Web应用程序框架,它可以使用Python代码轻松构建机器学习/数据科学相关的仪表板,其特点包括:
安装:pip install streamlit
运行demo:streamlit hello
运行结果如下:
通过demo可以看出Streamlit构建的整体风格,其将页面从左至右分为两部分,分别是:
且在右上角包括设置按钮。
Streamlit的整个运行流程可以参考链接中的Data flow,这里给出简单说明。
Streamlit的架构每当修改了源代码或用户与Streamlit的任意组件进行交互,都会产生一个on_change或on_click的回调(callback),它会尝试执行剩下的代码(通常是整个代码文件)。
总的来说,这里将Streamlit粗略地分为:
为了方便描述,后文使用st来替代streamlit
上述方法的第一个参数即为需要输出到页面中的具体参数,可以是list、dataframe、字符串等多种类型。
除了以上的输出,还有其他输出,如:
st.empty().text('xxx')
Streamlit的输入通常对应着Streamlit中的组件(widgets),这里给出部分例子,详见官方的API文档:
上述方法的第一个参数通常是组件的描述,可以传入一个命名参数key,给其设置一个唯一值,然后通过st.session_state.{key}
访问该值,其中的{key}
是创建组件时设置的参数值。
页面的布局可以通过多种方式设置,一种常用的方式是将组件(用户输入)都放到导航栏处,这个时候只需要将前文的st改为st.sidebar即可,如st.sidebar.slider()
表示在导航栏中创建一个滑动条。
还可以使用st.columns()
将页面分为多列,再使用st.expander
合并列的方式完成页面的布局。
主题:可以通过设置来修改;
缓存:通过@st.cache
装饰器来为方法增加cache;
多页面:只需要在当前文件夹创建多个py文件,然后使用streamlit run
命令运行主文件即可。
首先需要明确整个页面的原型设计,这里直接给出最终版本的页面如下:
可以发现页面内部一共由五个部分组成,除此之外,可以发现页面的title和icon也有修改,因此一共六个部分。
这里首先设计页面,然后再设计整个页面的逻辑。
st.set_page_config(page_title="VCED", page_icon="")
st.title('Welcome to VCED!')
uploaded_file = st.file_uploader("Choose a video")
text_prompt = st.text_input("Description", placeholder="please input the description", help='The description of clips from the video')
st.button("Search")
最终整个页面设计的代码如下(文件名为app.py):
# 导入需要的包
import streamlit as st
# 设置标签栏
st.set_page_config(page_title="VCED", page_icon="")
# 设置标题
st.title('Welcome to VCED!')
# 视频上传组件
uploaded_file = st.file_uploader("Choose a video")
# 文本输入框
text_prompt = st.text_input(
"Description", placeholder="please input the description", help='The description of clips from the video')
# top k 输入框
topn_value = st.text_input(
"Top N", placeholder="please input an integer", help='The number of results. By default, n equals 1')
# 搜索按钮
st.button("Search")
使用streamlit run app.py
可以发现页面效果与设计一致。
整个页面的处理逻辑非常简单,这里可以直接查看代码即可,这里给出整体的逻辑如下:
search_clip()
方法cutVideo()
方法以上就是整个逻辑,可以发现非常简单,查询结果之后,最后通过st.video()
将结果展示出来,其输入是视频文件的路径。