跨模态神经搜索实践VCED 基于Streamlit实现前端页面设计和逻辑

news2024/12/28 22:52:59

1. Streamlit入门

1.1 Streamlit介绍

Streamlit是基于Python的Web应用程序框架,它可以使用Python代码轻松构建机器学习/数据科学相关的仪表板,其特点包括:

  • 跨平台:支持Windows、macOS、Linux
  • 只需要掌握Python:不需要前端的任何基础
  • 开源:社区资源丰富,包括社区和开源地址

1.2 Streamlit快速开始

安装:pip install streamlit

运行demo:streamlit hello

运行结果如下:

在这里插入图片描述

通过demo可以看出Streamlit构建的整体风格,其将页面从左至右分为两部分,分别是:

  • 导航栏:上图中的左边导航栏,用于显示多页面
  • 内容栏:展示当前页面的内容,包含下拉框

且在右上角包括设置按钮。

1.3 Streamlit相关概念

Streamlit的整个运行流程可以参考链接中的Data flow,这里给出简单说明。

Streamlit的架构每当修改了源代码或用户与Streamlit的任意组件进行交互,都会产生一个on_change或on_click的回调(callback),它会尝试执行剩下的代码(通常是整个代码文件)。

总的来说,这里将Streamlit粗略地分为:

  • 输入:用户可以点击、选择、输入的部分;
  • 输出:页面展示给用户的部分,如表格、序列、图表、文字、代码等;
  • 其它:如布局、缓存、多页面等。

为了方便描述,后文使用st来替代streamlit

1.3.1 Streamlit输出

  • st.write():所有变量都可以通过该方法输出;
  • st的magic特性:在代码中编写一个包含值的变量,会默认使用streamlit.write()方法输出;
  • st.dataframe():用于输出dataframe,且可以传入额外的参数来自定义行为;
  • st.table():将参数以表格形式输出;
  • st.line_chart():将参数以折线图输出;
  • st.map():将参数以地图的形式输出。

上述方法的第一个参数即为需要输出到页面中的具体参数,可以是list、dataframe、字符串等多种类型。

除了以上的输出,还有其他输出,如:

  • st.progress():展示进度条,该方法通常只需要一个参数,表示当前进度
  • st.empty():通过其text方法可以输出placeholder,即st.empty().text('xxx')

1.3.2 Streamlit输入

Streamlit的输入通常对应着Streamlit中的组件(widgets),这里给出部分例子,详见官方的API文档:

  • st.slider():显示在页面的滑动条
  • st.text_input():输入文本框
  • st.checkbox():复选框,返回True/False
  • st.selectbox():下拉跨

上述方法的第一个参数通常是组件的描述,可以传入一个命名参数key,给其设置一个唯一值,然后通过st.session_state.{key}访问该值,其中的{key}是创建组件时设置的参数值。

1.3.3 其它

  • 布局

页面的布局可以通过多种方式设置,一种常用的方式是将组件(用户输入)都放到导航栏处,这个时候只需要将前文的st改为st.sidebar即可,如st.sidebar.slider()表示在导航栏中创建一个滑动条。

还可以使用st.columns()将页面分为多列,再使用st.expander合并列的方式完成页面的布局。

  • 主题:可以通过设置来修改;

  • 缓存:通过@st.cache装饰器来为方法增加cache;

  • 多页面:只需要在当前文件夹创建多个py文件,然后使用streamlit run命令运行主文件即可。

2. VCED本项目的前端页面设计

首先需要明确整个页面的原型设计,这里直接给出最终版本的页面如下:

在这里插入图片描述

可以发现页面内部一共由五个部分组成,除此之外,可以发现页面的title和icon也有修改,因此一共六个部分。

这里首先设计页面,然后再设计整个页面的逻辑。

2.1 前端页面设计

  • 页面title和icon:st.set_page_config(page_title="VCED", page_icon="🔍")
  • 页面标题:st.title('Welcome to VCED!')
  • 页面上传文件处:uploaded_file = st.file_uploader("Choose a video")
  • 描述输入文本框:可以发现这里包括标签、placeholder和帮助信息,因此都需要输入,即text_prompt = st.text_input("Description", placeholder="please input the description", help='The description of clips from the video')
  • TopN输入文本框:与描述输入文本框同理
  • 搜索按钮: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可以发现页面效果与设计一致。

2.2 前端页面交互逻辑

整个页面的处理逻辑非常简单,这里可以直接查看代码即可,这里给出整体的逻辑如下:

  • 判断是否点击搜索按钮
  • 判断是否上传文件
  • 判断是否输入描述文本
  • 判断是否输入topn,没有输入,则默认topn为1
  • 使用CLIP进行搜索,以列表返回结果,对应search_clip()方法
  • 对结果中的开始位置和结束位置使用ffmpeg裁剪视频,对应cutVideo()方法

以上就是整个逻辑,可以发现非常简单,查询结果之后,最后通过st.video()将结果展示出来,其输入是视频文件的路径。

References

  1. VCED 前端介绍
  2. Streamlit官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【时序】时间序列数据预处理

目录 1. 时间戳转换 2. 缺失值处理 3. 去噪 1)滚动平均值 2)傅里叶变换 4. 异常点检测 1)基于滚动统计的方法 2)孤立森林 3)K-means 聚类 为了分析预处理结果,我们后续使用 Kaggle 的 Air Passenge…

【Python】发布一个简单好用的日志记录器bestlog

需求 日志是非常重要的一个东西,我们往往习惯于在开发一个新项目的第一行代码时,就用 logging.info 代替 print,随时保持记录的好习惯,等代码上线以后也无需修改替换那些 print,直接开跑,有了完善的日志&a…

牛客刷题——Python入门总结

🤵‍♂️ 个人主页: 北极的三哈 个人主页 👨‍💻 作者简介:Python领域优质创作者。 📒 系列专栏:《Python入门学习》《牛客题库-Python篇》 🌐推荐《牛客网》——找工作神器|笔试题库|面试经…

【软考软件评测师】第三十章 操作系统(PV操作与死锁)

【软考软件评测师】第三十章 操作系统(PV操作与死锁) 第三十章 操作系统(PV操作与死锁)【软考软件评测师】第三十章 操作系统(PV操作与死锁)第一部分 知识点集锦1.PV操作1)P操作的定义2&#xf…

win11的文件属性默认显示全部,Windows11右键菜单修改为Win10模式的方法(手把手详细操作)

win11的文件属性默认显示全部,Windows11右键菜单修改为Win10模式的方法(手把手详细操作) 文章目录win11的文件属性默认显示全部,Windows11右键菜单修改为Win10模式的方法(手把手详细操作)Tips 1 先以管理员…

Source Map知多少?Golang手写SourceMap转换过程

文章目录一、问题背景二、Source Map 简介基本格式应用场景三、Source Map 的工作原理四、Source Map 的转换过程代码示例总结本文从原理的角度入手对 Source Map 进行了较为深入的分析,并从业务需要的角度出发,手动编写根据 Source Map 映射编码前后代码…

SpringBoot集成Mybatis项目实操

本文为《从零打造项目》系列第三篇文章,首发于个人网站。 《从零打造项目》系列文章 比MyBatis Generator更强大的代码生成器 SpringBoot项目基础设施搭建 前言 基于 orm-generate 项目可以实现项目模板代码,集成了三种 ORM 方式:Mybatis、M…

35m预应力简支梁桥毕业设计 课程设计-桥梁工程(计算书、8张CAD图)

35m预应力简支梁桥毕业设计 目 录 1、引言 1 2、桥型方案比选 2 2.1 桥梁设计原则 2 2.2方案一:25m预应力钢筋混凝土T梁桥 2 2.3方案二:25m预应力钢筋混凝土小箱梁 4 2.4桥墩方案比选 4 3、上部结构设计计算 5 3.1 设计资料及构造…

考研数据结构填空题整合

考研数据结构填空题整合 目录考研数据结构填空题整合一、ZYL组ZYL组一ZYL组二ZYL组三ZYL组四ZYL组五ZYL组六ZYL组七ZYL组八二、TJP组TJP组一TJP组二TJP组三三、LZH组LZH 组一LZH 组二LZH 组三LZH 组四LZH 组五LZH 组六LZH 组七四、LB组LB组一LB组二LB组三LB组四LB组五LB组六LB组…

FPGA实现精简版UDP通信,占资源很少但很稳定,提供2套工程源码

目录1.高端、中等和精简版UDP通信的选择2.精简版UDP通信实现方案3.工程1介绍及资源占用率和性能表现4.工程2介绍及资源占用率和性能表现5.上板调试验证6.福利:工程代码的获取1.高端、中等和精简版UDP通信的选择 FPGA实现UDP协议可难可易,具体根据项目需…

Python 函数转命令行界面库 -- Argsense CLI

argsense 是一个 python 命令行界面库, 是 click, fire, typer 之外的又一个选项. argsense 最大的特点是极低的侵入性设计和近乎零成本的上手难度, 如果你熟悉 python 函数是如何传参的 (这是大部分 python 初学者已经掌握的知识), 那么你就可以很快上手 argsense. 特性一览 …

大数据(9e)图解Flink窗口

文章目录1、代码模板1.1、pom.xml1.2、log4j.properties1.3、Java模板2、按键分区(Keyed)、非按键分区(Non-Keyed)2.1、Keyed2.2、Non-Keyed3、窗口的分类3.1、基于时间的窗口3.2、基于事件个数的窗口4、窗口函数5、示例代码5.1、…

TIA博途_水处理项目中开启累计运行时间最短的泵_程序示例

TIA博途_水处理项目中开启累计运行时间最短的泵_程序示例 需求: 有N台水泵,每个水泵统计累计运行时间。当满足条件时,根据设定开泵的数量,启动累计运行时间最短的对应数量的泵。故障切换时,也切换到运行时间最短的泵。 具体方法可参考以下内容: 如下图所示,打开TIA博途后…

【毕业设计】62-基于单片机的防酒驾\酒精浓度检测系统设计研究(原理图、源代码、仿真工程、低重复率参考设计、PPT)

【毕业设计】62-基于单片机的防酒驾\酒精浓度检测系统设计研究(原理图、源代码、仿真工程、低重复率参考设计、PPT)[toc] 资料下载链接 资料下载链接 资料链接:https://www.cirmall.com/circuit/33758/ 包含此题目毕业设计全套资料&#xf…

国科大课程自动评价脚本JS

国科大课程一键评估 操作流程&#xff1a; 方法 打开F12点击console/控制台复制粘贴下面代码回车 for(var i 0; i<1000; i) { if($("input[nameitem_"i"]").length) $("input[nameitem_"i"]").get(Math.round(Math.random()*2)…

C++11--lambda表达式--包装器--bind--1119

1.lambda表达式 lambda表达式书写格式&#xff1a;[捕捉列表] (参数列表) mutable -> 返回值类型 { 比较的方法 } int func() {int a, b, c, d, e;a b c d e 1;// 全部传值捕捉auto f1 []() {cout << a << b << c << d << e << …

BLE学习(3):ATT和GATT详解

本文章将介绍在面向连接的蓝牙模式中&#xff0c;ATT(attribute protocol,属性协议)和GATT(generic attribute profile,通用属性配置文件)这两个重要的协议层&#xff0c;它与蓝牙的数据传输密切相关。 1 设备之间如何建立连接(Gap层) 若BLE设备之间要进行数据传输&#xff0…

Qt5 QML TreeView currentIndex当前选中项的一些问题

0.前言 Qt5 QML Controls1.4 中的 TreeView 存在诸多问题&#xff0c;比如节点连接的虚线不好实现&#xff0c;currentIndex 的设置和 changed 信号的触发等。我想主要的原因在于 TreeView 是派生自 BasicTableView&#xff0c;而 TableView 内部又是由 ListView 实现的。 正…

二、openCV+TensorFlow入门

目录一、openCV入门1 - 简单图片操作2 - 像素操作二、TensorFlow入门1 - TensorFlow常量变量2 - TensorFlow运算本质3 - TensorFlow四则运算4 - tensorflow矩阵基础5 - numpy矩阵6 - matplotlib绘图三、神经网络逼近股票收盘均价&#xff08;案例&#xff09;1 - 绘制15天股票K…

编译原理 x - 练习题

简答题逆波兰后缀表达式和三元式序列源程序翻译成中间代码DAG优化正则文法 构造正则表达式正规式 改 上下文无关文法表示DFA有限状态机图移进-规约消除左递归文法-最左推导-短语LL(1)文法LR(0) | SLR(1)文法简答题 编译过程可分为前端和后端&#xff0c;描述一下前端和后端分别…