深度学习用streamlit做网页demo

2023-11-19

CSDN话题挑战赛第2期
参赛话题:学习笔记

深度学习-图像生成领域许多工作都会做网页demo,技术与应用接轨,让用户体验模型能力。

之前试过用轻量级Web应用框架Flask将深度学习模型部署到微信小程序端:pytorch模型部署小程序_三思为上策的博客-CSDN博客_pytorch 小程序

如果要用Flask写网页demo也是可以的,但还要会写html,太麻烦啦,我就选择了streamlit——只需要懂python即可,各种网页功能性部件都被封装好了,可以查询API Reference - Streamlit Docs 搜索你想要用的API。

  • streamlit安装:在命令行进入你运行模型需要的环境,安装streamlit及附属包即可。
conda activate xxx
pip install streamlit

测试安装是否成功:

streamlit hello

如果成功,则浏览器会自动弹出http://localhost:8501/,出现streamlit提供的示例。 

如果失败,优先考虑是附属安装的包出错了,根据报错的信息,把对应的包卸载重装即可。

我遇到了这个报错信息:TypeError:__init__() got an unexpected keyword argument 'show_envvar',报错位置在 ' 安装路径.../anaconda3/envs/xxx/lib/python3.6/site-packages/click/core.py ',于是我重装了click包。

(不懂为啥,我把pip uninstall click命令敲了2遍才把click相关文件卸干净了)

pip uninstall click
pip install click
  • streamlit使用

可以参考我的代码模板:新建一个demo.py文件写入以下内容

一些streamlit API解释可以参考我的前一篇笔记:(Paint2Pix用streamlit实现了交互性很强很好玩的绘画生成真实人脸,以及根据涂鸦编辑真实人脸的功能)Paint2Pix代码笔记_三思为上策的博客-CSDN博客

import streamlit as st

def main():
    prompt_container = st.empty()  #定义一个空容器
    if 'load_models' not in st.session_state:
        prompt_container.caption('Loading...')  
        #空容器装入caption部件,在它的位置上显示'Loading...'
        st.session_state.load_models = []

        # 在这里load模型,然后把模型传入寄存器
        st.session_state.load_models.append(模型1)
        st.session_state.load_models.append(模型2)

        prompt_container.empty()  #重新置为空容器,caption消失

    # 我用这个状态寄存器来防止模型调用过程中反复调用
    if 'editing' not in st.session_state:
        st.session_state.editing = False


    #  main app body
    #  介绍一下网页
    st.markdown(
        """
        YourAPP: Intro...
        """
    )

    # 上传图片
    image_container = st.empty()
    in_image = image_container.file_uploader("1.Input image:", type=["png", "jpg"])
    get_value = lambda x: x if x is None or isinstance(x, str) else x.getvalue()

    if 'input_img' not in st.session_state or get_value(st.session_state.input_img) != get_value(in_image):
        if 'input_img' in st.session_state and get_value(st.session_state.input_img) != get_value(in_image):
            print("update img...")
            for key in st.session_state.keys():
                # 只有加载好的模型存下来不被删除,其他寄存器内容被删
                if key != 'load_models':
                    del st.session_state[key]
            time.sleep(1)
        st.session_state.input_img = in_image

        if in_image is not None:
            # 保存用户上传的图片
            image = Image.open(in_image).convert('RGB')
            image.save("static/111111.jpg")

    st.markdown('2.click the button to start:')
    img_edit_button = st.button('Start')

    # 这里写按下按键后的操作
    if img_edit_button:
        if not st.session_state.editing:
            st.session_state.editing = True
            print("user choosing done!editing...")
            
            # 此处调用模型

            # 两列展示原图和编辑后的图
            col1, col2 = st.columns(2)
            with col1:
                st.subheader('your input:')
                ori_img = np.array(Image.open('static/111111.jpg'))
                st.image(ori_img)
            with col2:
                st.subheader('edited result:')
                return_img = np.array(Image.open('static/edit/222.jpg'))
                st.image(return_img)

            st.session_state.editing = False


if __name__ == "__main__":
    st.set_page_config(
        page_title="Your Demo", page_icon=":pencil2:"
    )
    st.title("--Your Demo--")
    main()

然后用命令行来跑代码:

conda activate xxx
CUDA_VISIBLE_DEVICES=1 streamlit run demo.py

即可在本机自动弹出窗口使用网页demo,也可以在同一局域网下别的电脑上访问http://你的主机IP:8501。

IP查询:windows用ipconfig命令,ubuntu用ifconfig。

  • streamlit代码逻辑

用户每一次交互,网页都会更新,demo.py会被重新run,代码运行过程中定义、更新的变量都会被刷新,只有存入st.session_state的数据可以长期留存。

调用API定义的streamlit小部件,会按代码前后顺序来排列在网页上。

比如:

st.markdown('2.click the button to start:')
img_edit_button = st.button('Start')

网页上,文字信息2.click the button to start:会出现在Start按键上方一行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习用streamlit做网页demo 的相关文章

  • 在PyGI中获取窗口句柄

    在我的程序中 我使用 PyGObject PyGI 和 GStreamer 在 GUI 中显示视频 该视频显示在Gtk DrawingArea因此我需要获取它的窗口句柄realize 信号处理程序 在 Linux 上 我使用以下方法获取该句
  • Tkinter:消息小部件中锚点选项的正确值是多少?

    我一直在学习 tkinterTkinter 中的消息小部件 https python course eu tkinter message widget in tkinter php at Python 课程和教程 https python
  • 使用 pandas.date_range() 生成多个日期时间,每周两个日期

    我在用着pd date range start date end date freq W MON 每周一生成每周频率日期时间start date 2017 01 01 and end date 2017 12 31 这意味着每月大约生成 4
  • 数据框 - 平均列

    我在 pandas 中有以下数据框 Column 1 Column 2 Column3 Column 4 2 2 2 4 1 2 2 3 我正在创建一个数据框 其中包含第 1 列和第 2 列 第 3 列和第 4 列等的平均值 ColumnA
  • python 中的 h2o 框架子集

    如何在 python 中对 h2o 框架进行子集化 如果 x 是一个 df 并且 Origin 是一个变量 那么在 pandas 中我们通常可以通过以下方式进行子集化 x x Origin AAF 但使用 h2o 框架会出现以下错误 H2O
  • 在 Mac OSX 上从 Python 3.6 运行 wine 命令

    我正在尝试用 Python 编写一个打开的脚本wine然后发送代码到wine终端打开一个 exe程序 这 exe程序也是命令驱动的 我可以打开wine 但我无法进一步 import shlex subprocess line usr bin
  • Python“非规范化”unicode 组合字符

    我正在寻找标准化 python 中的一些 unicode 文本 我想知道是否有一种简单的方法可以在 python 中获得组合 unicode 字符的 非规范化 形式 例如如果我有序列u o xaf i e latin small lette
  • Jupyter 笔记本中未显示绘图图表

    我已经尝试解决这个问题几个小时了 我按照上面的步骤操作情节网站 https plot ly python getting started start plotting online并且图表仍然没有显示在笔记本中 这是我的情节代码 color
  • 时间序列数据预处理 - numpy strides 技巧以节省内存

    我正在预处理一个时间序列数据集 将其形状从二维 数据点 特征 更改为三维 数据点 时间窗口 特征 在这样的视角中 时间窗口 有时也称为回顾 指示作为输入变量来预测下一个时间段的先前时间步长 数据点的数量 换句话说 时间窗口是机器学习算法在对
  • 使用标签或 href 传递 Django 数据

    我有一个包含链接的表 当单击该链接进行更多操作时 我想将一些数据传递给我的函数 my html table tbody for query in queries tr td value a href internal my func que
  • numpy:如何连接数组? (获得多个范围的并集)

    我使用Pythonnumpy 我有一个 numpy 索引数组a gt gt gt a array 5 7 12 18 20 29 gt gt gt type a
  • 为正则表达式编写解析器

    即使经过多年的编程 我很羞愧地说我从未真正完全掌握正则表达式 一般来说 当问题需要正则表达式时 我通常可以 在一堆引用语法之后 想出一个合适的正则表达式 但我发现自己越来越频繁地使用这种技术 所以 自学并理解正则表达式properly 我决
  • 无法在 PyCharm 版本 9.3.3 中安装 NumPy。 Python版本3.8.2

    在 PyCharm 中安装 NumPy 时出错 尝试安装 Microsoft Visual C 14 0 还是行不通 NumPy 正在通过命令安装pip3 install numpy在 cmd 终端中 但是当尝试将其安装在 PyCharm
  • Discord.py 嵌入中禁用按钮/冻结按钮

    I m trying to make a replica of this bot in which when I press any of the buttons below it shows a dropdown menu and you
  • 基于值而不是类型的单次调度

    我在 Django 上构建 SPA 并且有一个庞大的功能 其中包含许多功能if用于检查我的对象字段的状态名称的语句 像这样 if self state new do some logic if self state archive do s
  • numpy polyfit 中使用的权重值是多少以及拟合误差是多少

    我正在尝试对 numpy 中的某些数据进行线性拟合 Ex 其中 w 是该值的样本数 即对于点 x 0 y 0 我只有 1 个测量值 该测量值是2 2 但对于这一点 1 1 我有 2 个测量值 值为3 5 x np array 0 1 2 3
  • 根据多个阈值将 SciPy 分层树状图切割成簇

    我想将 SciPy 的树状图切割成多个具有多个阈值的簇 我尝试过使用 fcluster 但它只能削减一个阈值 例如 这是我从另一个问题中摘取的一段代码 import pandas data pandas DataFrame total ru
  • 仅允许正小数

    在我的 Django 模型中 我创建了一个如下所示的小数字段 price models DecimalField u Price decimal places 2 max digits 12 显然 价格为负或零是没有意义的 有没有办法将小数
  • 寻找完美的正方形

    我有这个Python代码 def sqrt x ans 0 if x gt 0 while ans ans lt x ans ans 1 if ans ans x print x is not a perfect square return
  • django jet 中的自定义徽标

    我目前正在尝试对 django 管理面板的皮肤进行一些定制 以使其更符合我们的品牌 目前我们使用 django jet 来美化管理面板 django jet 可以自定义 css html 吗 所有评论都说我应该更改一些 html 文件 但我

随机推荐

  • 如何在 VPS 上安装和使用 Logwatch 日志分析器和报告器

    介绍 应用程序创建所谓的 日志文件 来跟踪在任何给定时间发生的活动 这些文件远非简单的文本输出 浏览起来可能非常复杂 特别是当所管理的服务器很繁忙时 当需要参考日志文件时 例如 在发生故障 数据丢失等情况下 利用所有可用的帮助变得至关重要
  • 如何修改 DOM 中的属性、类和样式

    介绍 在本教程之前的教程中series 如何更改 DOM 我们介绍了如何使用内置方法从文档对象模型 DOM 中创建 插入 替换和删除元素 通过提高操作 DOM 的熟练程度 您可以更好地利用 JavaScript 的交互功能并修改 Web 元
  • 如何在 Ubuntu 22.04 上的 PostgreSQL 中静态加密数据库

    介绍 PostgreSQL是一个数据库管理系统 自 1996 年以来一直存在 就像其他数据库系统一样 SQL MySQL Oracle等 PostgreSQL的主要目的是为用户提供一种创建数据库用于存储和数据检索的方式 其突出的功能之一包括
  • 如何在 Ubuntu 12.04 上使用 Iptables 设置防火墙

    Status 已弃用 本文介绍不再受支持的 Ubuntu 版本 如果您当前运行的服务器运行 Ubuntu 12 04 我们强烈建议您升级或迁移到受支持的 Ubuntu 版本 升级到Ubuntu 14 04 从 Ubuntu 14 04 升级
  • Java 中的死锁示例

    java中的死锁是两个或多个线程永远被阻塞的一种编程情况 Java 死锁情况发生在至少两个线程和两个或更多资源的情况下 这里我写了一个简单的程序 该程序会导致java死锁场景 然后我们将看到如何分析它 Java 中的死锁 Let s hav
  • 深入探讨 Iptables 和 Netfilter 架构

    介绍 防火墙是一个重要的工具 可以配置它来保护您的服务器和基础设施 在Linux生态系统中 iptables是一种广泛使用的防火墙工具 与内核一起工作netfilter数据包过滤框架 由于复杂的语法和涉及的相互关联部分的数量 创建可靠的防火
  • 如何使用 Dovecot 设置 Postfix 电子邮件服务器:动态 Maildirs 和 LMTP

    Preface 本教程基于如何使用 Dovecot 设置 Postfix 电子邮件服务器并从第一部分结束的地方开始 请先阅读该教程 在本文中 我们将使用 dovecot 的 LMTP 服务器作为传递机制将邮箱与系统帐户分离 并使用 post
  • Java ArrayList 的数组、ArrayList 的 Array

    今天我们将学习如何创建Java数组ArrayList 我们还将学习如何创建数组元素的 ArrayList Java ArrayList 的数组 Creating array of list in java is not complex Be
  • 如何将本地 Django 应用程序部署到 VPS

    先决条件 本教程假设您已经使用所选操作系统设置了虚拟专用服务器 本教程使用 Debian 7 Ubuntu 也可以 如果您还没有这样做 您可以按照此操作tutorial 在开始之前 请确保您的云服务器已正确配置为托管 Django 应用程序
  • 如何在 Arch Linux 上安装 Linux、Apache、MySQL、PHP (LAMP) 堆栈

    关于兰普 LAMP 堆栈是一组用于启动和运行 Web 服务器的开源软件 该缩写词代表 Linux Apache MySQL 和 PHP Arch Linux 使用功能强大的 Pacman 安装程序 只需一个命令即可下载每个程序所需的所有最新
  • JSON 服务器(json-server)

    今天我们将研究一个非常方便的工具 json server 它可以在一分钟内为您提供一个模拟的 Rest json 服务器 在常规企业应用程序中 您需要与许多团队和第三方 API 合作 想象一下您必须致电第三方宁静的网络服务这将使您能够处理
  • 如何在 Ubuntu 20.04 上使用 React 前端设置 Ruby on Rails v7 项目

    作者选择了电子前沿基金会接受捐赠作为为捐款而写程序 介绍 红宝石 on Rails是一个流行的服务器端 Web 应用程序框架 它为当今网络上存在的许多流行应用程序提供支持 例如GitHub Basecamp 声云 Airbnb and Tw
  • java中的静态关键字

    Java中的static关键字在java编程中被大量使用 Java static关键字用于在java中创建类级别变量 静态变量和方法是类的一部分 而不是类的实例 java中的静态关键字 Java static keyword can be
  • 如何在 Apache 和 Nginx 上配置 OCSP 装订

    介绍 OCSP 装订是一种 TLS SSL 扩展 旨在提高 SSL 协商的性能 同时维护访问者隐私 在继续配置之前 先简要介绍一下证书吊销的工作原理 本文使用免费证书由 StartSSL 发出来演示 本教程将使用下面概述的 Apache 和
  • 在 Linux 中创建分区 - 分步指南

    在本教程中 我们将介绍在 Linux 中创建分区的步骤 这可以帮助您为特定用途分配不同的内存区域 创建分区还可以帮助您在计算机上安装多个操作系统 并最大限度地减少磁盘损坏时的损坏 如何在Linux中创建分区 在本教程中 我们将使用 fdis
  • Python实战项目23个实战小项目小程序简单

    Python项目23个小项目简单 项目类别 部分项目运行截图 含代码注释 项目类别 51商城 AI智能联系人管理 双击即启动 BBS问答社区 DIY字符画 双击即启动 Excel数据分析师 双击即启动 RCQ读者书库 双击即启动 Word助
  • LaTeX+Overleaf 论文速通教程

    一 文本 排版 二 章节和段落 三 数学公式 四 插入图片 五 插入表格 六 参考文献与交叉引用 不使用BibTeX 使用BibTeX 推荐 七 交叉引用label和ref Overleaf开发界面 latex命令 命令 可选参数 必选参数
  • 【ts】使用ts的vue项目必须安装的插件和要进行的配置(一般使用搭建vue的时候脚手架会帮忙弄好,但是还是要知道项目里这些代码都是什么)

    使用ts的项目 是需要安装ts loader来处理 ts文件的 例如babel loader是用于处理js文件 而ts就是ts loader 先确保项目是否安装了webpack和typescript npm install webpack
  • 前端面试话术集锦第 14 篇:高频考点(React常考基础知识点)

    这是记录前端面试的话术集锦第十四篇博文 高频考点 React常考基础知识点 我会不断更新该博文 1 生命周期 在V16版本中引入了Fiber机制 这个机制一定程度上的影响了部分生命周期的调用 并且也引入了新的2个API来解决问题 在之前的版
  • 深度学习用streamlit做网页demo

    CSDN话题挑战赛第2期 参赛话题 学习笔记 深度学习 图像生成领域许多工作都会做网页demo 技术与应用接轨 让用户体验模型能力 之前试过用轻量级Web应用框架Flask将深度学习模型部署到微信小程序端 pytorch模型部署小程序 三思