借助Streamlit框架,使用用户界面展示Python项目变得前所未有的简单,你可以仅仅使用Python代码来构建基于浏览器的UI。本次演示将为迷宫求解器程序构建UI。StreamlitStreamlit是一种Web框架,旨在供数据科学家使用Python轻松部署模型和可视化。它运行速度既快又简约,代码既漂亮又对用户友好。它们是有用于用户输入的内置小部件,例如图像上载、滑块、文本输入,以及其他熟悉的HTML元素(例如复选框和单选按钮)。每当用户与简化的应用程序进行交互时,python脚本就会从头到尾重新运行,这是在考虑应用程序的不同状态时要记住的重要概念。使用pip安装Streamlit:

Pip install streamlit

并在python脚本上运行streamlit:

Streamlit run app.py

使用例子我在上一篇文章中演示构建了一个Python程序(https://towardsdatascience.com/solving-mazes-with-python-f7a412f2493f),该程序将解决给定图像文件和起始/结束位置的迷宫。现在,我希望将此程序变成一个单页Web应用程序,用户可以在其中上传迷宫图像(或使用默认迷宫图像),调整迷宫的开始和结束位置,并查看最终解决的迷宫。首先,为图像上传器创建UI,并选择使用默认图像的选项。可以使用st.write()或st.title()之类的函数添加文本输出,使用streamlit的st.file_uploader()函数存储动态上传的文件。最后,st.checkbox()将根据用户是否已选中复选框返回一个布尔值。

import streamlit as st         import cv2         import matplotlib.pyplot as plt         import numpy as np         import maze                   st.title( Maze Solver )         uploaded_file = st.file_uploader("Choose an image", ["jpg","jpeg","png"]) #image uploader         st.write( Or )         use_default_image = st.checkbox( Use default maze )

结果:然后,可以将默认图像或上传的图像读取为可用的OpenCV图像格式。

if use_default_image:                       opencv_image = cv2.imread( maze5.jpg )                                     elif uploaded_file isnotNone:                       file_bytes = np.asarray(bytearray(uploaded_file.read()), dtype=np.uint8)                       opencv_image = cv2.imdecode(file_bytes, 1)

上载图像后,要显示标记有起点和终点的图像。将使用滑块允许用户重新定位这些点。st.sidebar()函数在页面上添加了一个侧边栏,st.slider()在定义的最小值和最大值内接受数字输入,你可以根据迷宫图像的大小动态定义滑块的最小值和最大值。

if opencv_image isnotNone:                st.subheader( Use the sliders on the left to position the start and endpoints )                start_x = st.sidebar.slider("Start X", value=24if use_default_image  else50, min_value=0, max_value=opencv_image.shape[1], key= sx )                start_y = st.sidebar.slider("Start Y", value=332if use_default_image  else100, min_value=0, max_value=opencv_image.shape[0], key= sy )                finish_x = st.sidebar.slider("Finish X", value=309if use_default_image  else100, min_value=0, max_value=opencv_image.shape[1], key= fx )                finish_y = st.sidebar.slider("Finish Y", value=330if use_default_image  else100, min_value=0, max_value=opencv_image.shape[0], key= fy )                marked_image = opencv_image.copy()                circle_thickness=(marked_image.shape[0]+marked_image.shape[0])//2//100#circle thickness based on img size                cv2.circle(marked_image,(start_x, start_y), circle_thickness, (0,255,0),-1)                cv2.circle(marked_image,(finish_x, finish_y), circle_thickness, (255,0,0),-1)                st.image(marked_image,channels="RGB", width=800)

每当用户调整滑块时,图像都会快速重新渲染,并且点会更改位置。一旦用户确定了开始位置和结束位置,就需要一个按钮来解决迷宫并显示解决方案。仅在其子进程运行时显示st.spinner()元素,并且使用st.image()调用显示图像。

if marked_image isnotNone:                if st.button( Solve Maze ):                    with st.spinner( Solving your maze ):                        path = maze.find_shortest_path(opencv_image,(start_x,start_y),(finish_x, finish_y))                    pathed_image = opencv_image.copy()                    path_thickness = (pathed_image.shape[0]+pathed_image.shape[0])//200                    maze.drawPath(pathed_image,path, path_thickness)                    st.image(pathed_image,channels="RGB", width=800)

Streamlit按钮和微调器显示解决的迷宫瞧瞧,不需要编写任何传统的前端代码,我们用不到40行代码为Python图像处理应用程序创建了一个简单的UI。图源:unsplash事实上, Streamlit除了能够消化简单的Python代码之外,无论用户与页面进行交互还是更改了脚本,Streamlit都会从上至下智能地重新运行脚本的必要部分,这样可以实现直接的数据流和快速开发,它让一切变得简单!

python opencv 界面按钮_如何使用Python构建简单的UI?相关推荐

  1. python opencv 界面按钮_PyAutoGUI:自动化键鼠操作的Python类库

    有些朋友可能玩过按键精灵,一个用来操作键盘鼠标完成一些自动化工作的软件.其实如果你学了Python的话,完全用不着按键精灵这种东西了.因为广泛的Python类库里,就有PyAutoGUI这样可以变成控 ...

  2. python中文界面设定_怎么实现python设置中文界面

    怎么实现python设置中文界面 发布时间:2020-10-27 09:22:02 来源:亿速云 阅读:73 作者:小新 这篇文章给大家分享的是有关怎么实现python设置中文界面的内容.小编觉得挺实 ...

  3. python交互界面数据分析_如何用 Python 和 Streamlit 做交互式数据分析产品?

    「本文参与少数派 2019 年度征文 + 效率有心得」 不用学前端编程,你就能用 Python 简单高效写出漂亮的交互式 Web 应用,将你的数据分析成果立即展示给团队和客户. 痛点 从我开始折腾数据 ...

  4. python实现树莓派监控_用树莓派 + Python + OpenCV 实现家庭监控和移动目标探测(下)...

    哇,上周那篇关于做一个基本运动检测系统的文章真是赞.写这篇文章很有乐趣,而且从像您一样的读者那里获得反馈,使我的努力变得很值得. 对于那些刚看到这篇文章的朋友,上周那篇文章是关于使用计算机视觉来建立一 ...

  5. python图形界面教程_图形教程

    python图形界面教程 众所周知,我们可以借助Java库制作游戏,这些库为我们提供制作游戏所需的图形. 因此,今天我将开始一个关于Java图形的非常新的部分. 我之前曾发表过有关如何制作所得税计算器 ...

  6. c++ opencv 识别车牌_小强学Python+OpenCV之-1.0开篇

    写在前面: 有没有想过使用Python + OpenCV来实现人脸识别? 想想就有点小兴奋吧. 小强也是不久前才了解到可以使用Python + OpenCV进行图像处理.觉得有趣就想学习一下. 在这里 ...

  7. python opencv 文字识别_文本识别 使用 Tesseract 进行 OpenCV OCR 和 文本识别

    文本识别 用 Tesseract 进行 OpenCV OCR 和 文本识 在本教程中,您将学习如何应用OpenCV OCR(光学字符识别).我们将使用OpenCV,Python和Tesseract 执 ...

  8. python opencv 录制视频_如何使用OpenCV、Python和深度学习在图像和视频中实现面部识别?...

    Face ID 的兴起带动了一波面部识别技术热潮.本文将介绍如何使用 OpenCV.Python 和深度学习在图像和视频中实现面部识别,以基于深度识别的面部嵌入,实时执行且达到高准确度. 以下内容由 ...

  9. python opencv数字识别_基于模板匹配的手写数字识别(python+opencv)

    智能计算课第一周的实验是做基于模板匹配的手写数字识别,光听见就很感兴趣,于是决定认真做做这个实验,本实验基于python3+opencv的python版本,所用到的知识都比较简单,基本上边学边做,技术 ...

最新文章

  1. Java Web开发乱码问题
  2. 孙正义60亿贱卖波士顿动力,狂降至3折,现代汽车接盘
  3. Android --- build.gradle(Module:app)中各版本号讲解,例如targetSdkVersion
  4. learning中的数学
  5. 64位ubuntu 12.04编译linux内核提示openssl/opensslv.h文件缺失
  6. Conference Related to social network.
  7. 【分享】4412开发板-嵌入式Linux开发须要掌握的基础知识和技能
  8. python 自动化发送邮件_干货 | 解放双手,用Python实现自动发送邮件
  9. 经过了多种方法的尝试,终于找到Quartus破解成功但是没有办法编译的解决方法
  10. 用QuickCHM v2.6 制作帮助文档
  11. 解决vender-base.66c6fc1c0b393478adf7.js:6 TypeError: Cannot read property ‘validate‘ of undefined问题
  12. PX4 FMU启动流程 2. 二、 nsh_initscript
  13. android中生成excel
  14. matplotlib之饼图
  15. 如何将Processon中画好的图转为Visio可以打开并编辑的vsdx格式
  16. excel wind插件使用_Excel实现聚光灯效果?今天手把手教你制作,没想到它竟如此容易...
  17. Android入门文档
  18. eclipse设置maven archetype
  19. EasyClick IOS 自动化测试 使用前置准备
  20. 互融云数字资产管理平台综合解决方案

热门文章

  1. scala的静态属性和静态方法
  2. 上海技术计算机学校学费多少,上海web前端学校学费一般是多少
  3. vue状态管理存取数据_Vue中的数据通信和状态管理
  4. python调用C语言ctypes详解
  5. 图像相似度算法--SIFT算法详解
  6. Asp.net MVC Pager分页实现
  7. centos6下安装git
  8. json和jsonp的问题
  9. 第二阶段冲刺总结01
  10. 单链表的基本操作---插入,删除,交,并,相邻元素的交换等