藉助Streamlit框架,可僅使用Python代碼來構建基於瀏覽器的UI

2020-12-12 讀芯術

全文共3154字,預計學習時長8分鐘

圖源:unsplash

藉助Streamlit框架,使用用戶界面展示Python項目變得前所未有的簡單,你可以僅僅使用Python代碼來構建基於瀏覽器的UI。

本次演示將為迷宮求解器程序構建UI。

Streamlit

Streamlit是一種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都會從上至下智能地重新運行腳本的必要部分,這樣可以實現直接的數據流和快速開發,它讓一切變得簡單!

留言點讚關注

我們一起分享AI學習與發展的乾貨

如轉載,請後臺留言,遵守轉載規範

相關焦點

  • 2020年5個最佳Vue移動端組件庫|UI框架
    小夥伴們平時開發vue,react或是angular項目,都喜歡使用的什麼UI組件庫呢?今天,就來盤點下,幾個熱門優質的Vue.js移動端UI組件庫。1、Mint UI餓了麼開源的移動端UI組件庫,基於vue.js的移動端UI框架,包含豐富的 CSS 和 JS 組件,能夠滿足日常的移動端開發需求。
  • Python,爬蟲開發的不二選擇
    網際網路是由一個個站點和網絡設備組成的大網,我們通過瀏覽器訪問站點,站點把HTML、JS、CSS代碼返回給瀏覽器,這些代碼經過瀏覽器解析、渲染,將豐富多彩的網頁呈現我們眼前。如果我們把網際網路比作一張大的蜘蛛網,數據便是存放於蜘蛛網的各個節點,而爬蟲就是一隻小蜘蛛,沿著網絡抓取自己的獵物(數據)。
  • 這個Python框架你值得擁有!
    談到Python,它似乎天生就和速度無關,你可能很熟悉Django、Flask這些框架,雖然開發效率的確不錯,但是速度就一言難盡。那麼在前後端分離開發的時代,有沒有能拿得出手的Python Web框架呢?當然是有的,FastApi它來了。一、為什麼是FastApi?
  • 7款Python開發神器,拿走不謝
    它還具有更多優勢,如更強的交互 shell;支持交互數據可視化和圖形界面工具;靈活,可嵌入解釋器加載到任意一個自有工程裡;一個基於瀏覽器的記事本,支持代碼,純文本,數學公式,內置圖表和其他富媒體等等。4、SparkSpark基於map reduce算法實現的分布式計算,是一個圍繞速度、易用性和複雜分析構建的大數據處理框架,提供了一個全面、統一的框架用於管理各種有著不同性質的數據集和數據源的大數據處理的需求。
  • 4個不錯的Python自動化測試框架,Robot Framework有哪些優勢?
    隨著技術的進步和自動化技術的出現,市面上出現了一些自動化測試框架。只需要進行一些適用性和效率參數的調整,這些自動化測試框架就能夠開箱即用,大大節省了測試時間。而且由於這些框架被廣泛使用,他們具有很好的健壯性,並且具有廣泛多樣的用例集和技術來輕易發現微小的缺陷。以前,測試團隊接手一個項目,他們不得不為這個項目構建一個自動化測試框架。
  • 無需圖形界面環境下的瀏覽器項目一覽表
    Awesomium基於Chromium無圖形界面瀏覽器引擎。C++, .NETbenvBenv是node.js開發的無界面瀏覽器測試環境,用於測試客戶端代碼。JavaScriptbrowser-launcherBrowser-Launcher可以檢測系統上的所有瀏覽器版本,並在一個獨立的配置文件中啟動它們,用於自動測試。
  • 57行代碼給《瑞克和莫蒂》寫新劇集
    本文將向各位展示如何利用Hugging Face的Transformers庫「精細調教」使用《瑞克和莫蒂》劇本預先訓練過的GPT-2模型。以下我們會製作一個展示案例,並使用Streamlit Sharing來部署它。
  • 使用Amazon SageMaker 構建基於 gluon 的推薦系統
    區別於傳統的規則推薦,個性化推薦算法通常使用機器學習甚至深度學習算法,對於用戶信息與其行為信息充分挖掘,進而進行有效的推薦。常用的推薦算法有很多,其中最為經典的,就是基於Matrix Factorization(矩陣分解)的推薦。
  • 使用Python構建一個推薦系統需要幾步
    因此,如果用戶過去僅觀看或喜歡動作電影,則系統將僅推薦動作電影。這是構建引擎的一種非常狹窄的方法。為了改進這種類型的系統,我們需要一種算法,該算法不僅可以根據內容來推薦商品,還可以根據用戶的行為來推薦商品。2.3.2協同過濾讓我們通過一個例子來理解這一點。
  • 自動生成pandas代碼,python數據處理神器
    熟悉我的同學都知道,我的大部分教程最終都希望教會你怎麼節省代碼。今天我要說的不是怎麼寫代碼,而是介紹一款我親手打造的小工具,它作為探索數據的工具,你不僅不需要寫任何的代碼,它最終還會自動生成pandas代碼。
  • 微軟最強 Python 自動化工具開源了!不用寫一行代碼!
    前言 最近,微軟開源了一款非常強大的 Python 自動化依賴庫:playwright-python 它支持主流的瀏覽器,包含:Chrome、Firefox、Safari、Microsoft Edge 等,同時支持以無頭模式、有頭模式運行 playwright-python 提供了同步、異步的
  • 如何創建vue項目並使用element框架中的el-select
    cnpm install --global vue-cli2、創建一個基於webpack模板項目,使用命令vue init webpack wmn命令:npm i element-ui -Snpm i element-ui -S8、打開項目中的main.js文件,依次導入element-ui和對應的樣式文件,調用Vue.use(ElementUI)
  • 2020年 16 個很有用的 Vue UI庫
    我們可以動態地生成和使用主題,根據自己的需求只用組件,UI元素與組件的優勢在於可以更簡單的使用API和其他的。Vue Material 的目的是提供一組可重用的組件和一系列的UI元素,使用 Vue 2.0 建立支持 主流的瀏覽器 的應用。
  • java和python哪個更好用?
    Java還是一種可移植的程式語言,可以在WORA上運行(一旦在任何地方運行,編寫一次)。這意味著您可以在特定計算機上編寫Java程序,並在任何平臺上使用它。您需要擁有Java虛擬機(JVM)來運行Java程序。Java語法與C ++非常相似。 Java還是動態連結的程式語言。這意味著您可以從Internet上的任何地方下載代碼,然後在Java編譯器上運行它。
  • 「首席架構師推薦」一系列很棒的的瀏覽器端JavaScript庫資源(1)
    prova - 基於Tape和Browserify的節點和瀏覽器測試運行器DalekJS - 使用JavaScript實現自動跨瀏覽器功能測試Protractor - Protractor是AngularJS應用程式的端到端測試框架。
  • 被大多數人忽視的七大Python IDE!
    【IT168 評論】「人生苦短,我學Python」,為Python構建的IDE當前處於比較尷尬的富有狀態。數量一多自然有的廣受歡迎,有的鮮少被問津。目前比較受歡迎的可能就是PyCharm,帶有一整套可幫助用戶在使用Python語言開發時提高效率的工具。但任何一樣東西的存在都有其意義,今天我們就來看看有哪些被忽視了的IDE吧!
  • 微軟.NET 官宣跨平臺 UI 框架 MAUI
    IT之家5月21日消息 在Build 2020開發者大會上,微軟宣布推出 .NET 官宣跨平臺 UI 框架 MAUI,全稱是 .NET Multi-platform App UI。正式版將在 .NET 6 和大家見面。微軟介紹,你可以使用.NET進行任何構建。
  • Python無頭爬蟲Selenium系列(01):像手工一樣操作瀏覽器
    轉發本文並私信我"python",即可獲得Python資料以及更多系列文章(持續更新的)作為"數據玩家",如果手頭上沒有數據怎麼辦?當然是用代碼讓程序自動化採集數據,但是現在"爬蟲"不是那麼容易,其中最困難的即是突破網站各種反爬機制。
  • Python編程:開發工具(IDE)大匯總(附官方下載)
    pip安裝器一鍵全搞定以管理員方式打開命令行,輸入:pip install jupyter 等待安裝完成在python工程文件夾下打開命令行窗口,輸入:jupyter notebook 回車即可jupyter notebook啟動後會在默認瀏覽器打開網頁,創建工程與代碼編寫和運行都在網頁上完成jupyter notebook打開界面如下:
  • PyTorch-Transformers:最先進的自然語言處理庫(附帶python代碼)
    .」 – Sebastian Ruder想像一下我們有能力構建支持谷歌翻譯的自然語言處理(NLP)模型,並且在Python中僅需幾行代碼來完成,這聽起來是不是讓人非常興奮。而現在我們就可以坐在自己的機器前實現這個了!藉助於被HuggingFace稱為PyTorch-Transformers目前最先進的NLP工具。