视图框架:快速构建针对人工智能的 python 的 webApp 库,封装前端页面 + 后端接口 + AI 算法模型推理,方便 AI 算法工程师快速展示成果,常用的两个展示层框架:
Gradio:
优势在于易用性,代码结构相比 Streamlit 简单,只需简单定义输入和输出接口即可快速构建简单的交互页面,更轻松部署模型。适合场景相对简单,想要快速部署应用的开发者;
Streamlit:
优势在于可扩展性,相比 Gradio 复杂。适合场景相对复杂,想要构建丰富多样交互页面的开发者。
Gradio是一个开源的Python库,用于快速构建机器学习和数据科学演示的应用。它可以帮助你快速创建一个简单漂亮的用户界面,以便向客户、合作者、用户或学生展示你的机器学习模型。此外,还可以通过自动共享链接快速部署模型,并获得对模型性能的反馈。在开发过程中,你可以使用内置的操作和解释工具来交互式地调试模型。
Gradio的优势在于易用性,代码结构简单,只需简单定义输入和输出接口即可快速构建简单的交互页面,更轻松部署模型。但Gradio适合场景相对简单,更容易快速部署应用的开发者。此外,Gradio还提供便利的分享功能,在启动应用时设置share=True参数创建外部分享链接,还可以直接在微信等平台上分享给用户使用。
官方网站:https://www.gradio.app/
官方文档:https://www.gradio.app/docs/interface
各个功能模块的介绍,以及一些代码示例:
以及一个AI 开源社区 SwanHub,有许多的基于gradio在线demo,有AI应用,计算机视觉,多模态等等demo可以进行尝试。
https://swanhub.co/models
Gradio 可以包装几乎任何 Python 函数为易于使用的用户界面。
常用的基础模块构成如下:
大部分功能模块都可以通过以下三个参数进行初始化:
当用户想要在前端页面上传自己的文件生成新的数据库时,gradio.File 可以很方便的完成这部分功能。
File 用于创建一个文件组件,允许用户上传通用文件(用作输入)或显示通用文件(用作输出)。
file_count 允许用户上传文件的数量,返回类型将根据 “multiple” 或 “directory” 的情况为每个文件返回一个列表。
file_types: 要上传的文件扩展名或文件类型的列表(例如[‘image’,‘.json’,‘.mp4’])。字符串表示支持上传的文件类型,格式后缀表示支持上传的文件格式。
注意:当 file_count 为 “directory” 时,会忽略 “file_types” 的参数配置。
举例:
gr.File(label='请选择知识库目录',file_count='directory',
file_types=['.txt', '.md', '.docx', '.pdf'])
可交互控制的滑动条,通过前端来进行参数的配置,但同时希望将参数限制在一个区间内,这时 gr.text 无法满足我们的需求。gradio.Slider 是可以胜任这个任务的组件。
gradio.Slider 允许用户通过滑动滑块在指定的范围内选择一个值
举例:
temperature = gr.Slider(0,
1,
value=0.00,
step=0.01,
label="llm temperature",
interactive=True)
gradio.inputs.Textbox(self, lines=1, placeholder=None, default=“”, label=None, optional=False)
该组件为用户提供一个输入框,需提供一个字符串为参数的包装函数
输入类型:str(字符型)
参数:
刚刚我们介绍了 gradio 对于连续值的选择方法,现在我们来介绍下对于离散值的选择方法。
我们可以切换不同的模型,尝试不同模型的效果。我们用 gradio.Dropdown 来建立一个下拉列表,让用户从提供的模型中选择一个模型。
llm = gr.Dropdown(
llm_model_list,
label="large language model",
value=init_llm,
interactive=True)
同样,我们可以对生成 Embedding 的模型进行对应的配置。
将组件作为输入绑定在对应的函数中,即可完成对应参数的切换。
固定化输入和输出:
举例子:
import gradio as gr
def quickstart(name):
return "welcome!, " + name + "!!!"
demo = gr.Interface(fn=quickstart, inputs="text", outputs="text")
demo.launch()
Interface.launch()方法返回三个值:
interface.launch(share=True)
这样就除了一个本地URL之外还有一个72小时有效期的公共外链,很方便的让不同地区的用户来体验。
之前介绍的都是交互式组件,我们可以用 markdown 为我们的界面加一些说明,使整个界面看起来更加美观。同时可以增加一些辅助信息。
gr.Markdown("""Chat Robot
Local Knowledge Base Q&A with llm
""")
现在我们已经有了足够多的组件,是时候将他们按照一定的布局格式进行调整了。
gradio.Row() 和 gradio.Column() 分别是新建一行和新建一列的组件。我们将界面划分成不同的行列区域,将所需组件摆放在对应位置即可。
gradio.Row() 的常用参数:
gradio.Column() 的常用参数:
例如,我们可以将所有的对话组件放在一行中。将所有参数配置放在一列, 并将 chatBot 和参数配置以 4:1 的比例进行布置。
with gr.Row():
# 创建提交按钮。
db_with_his_btn = gr.Button("Chat db with history")
db_wo_his_btn = gr.Button("Chat db without history")
llm_btn = gr.Button("Chat with llm")
with gr.Column(scale=4):
chatbot = gr.Chatbot(height=480)
...
with gr.Column(scale=1):
...
model_argument = gr.Accordion("参数配置", open=False)
with model_argument:
...
model_select = gr.Accordion("模型选择")
with model_select:
...
举例子:
import gradio as gr
def welcome(name):
return f"Welcome to Gradio, {name}!"
with gr.Blocks() as demo:
gr.Markdown(
"""
# Hello World!
Start typing below to see the output.
""")
inp = gr.Textbox(placeholder="What is your name?")
out = gr.Textbox()
inp.change(welcome, inp, out)
if __name__ == "__main__":
demo.launch()
当项目部署时,可能同一时间有多个用户进行访问,这时我们可以将 demo.queue(concurrency_count=3) 进行配置,表示用三个线程来并行。现在是时候将我们的界面分享给别人了.
下面是 demo.launch() 的几种场景分享配置
demo.launch(server_name="0.0.0.0", server_port=8080)
demo.launch(server_name="0.0.0.0", server_port="任意端口")
demo.launch(share=True)
pip install gradio
指定源安装,版本是会指定的:
pip install gradio==3.50.2 -i https://pypi.python.org/pypi
import gradio as gr
#输入文本处理程序
def greet(name):
return "Hello " + name + "!"
#接口创建函数
#fn设置处理函数,inputs设置输入接口组件,outputs设置输出接口组件
#fn,inputs,outputs都是必填函数
demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch()
运行程序后,打开 http://localhost:7860 即可看到网页效果。左边是文本输入框,右边是结果展示框。Clear按钮用于重置网页状态,Submit按钮用于执行处理程序,Flag按钮用于保存结果到本地。
3个UI控件作为输入,2个输出,
输入名字,是否是早晨,今天的温度,
自动输入问候以及华氏温度与摄氏温度的转换
import gradio as gr
def greet(name, is_morning, temperature):
# salutation表示致意、问候
salutation = "Good morning" if is_morning else "Good evening"
greeting = f"{salutation} {name}. It is {temperature} degrees today"
# 摄氏温度 = (华氏温度 – 32) ÷ 1.8
celsius = (temperature - 32) * 5 / 9
return greeting, round(celsius, 2)
demo = gr.Interface(
fn=greet,
inputs=["text", "checkbox", gr.Slider(0, 100,label="华氏温度")],
outputs=["text", "number"],
)
demo.launch()
RDB转 灰度图
import gradio as gr
import cv2
def to_black(image):
output = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
return output
interface = gr.Interface(fn=to_black, inputs="image", outputs="image")
interface.launch()
参考项目:
https://swanhub.co/ZeYiLin/ResNet50/tree/main
演示:
代码地址:https://swanhub.co/ZeYiLin/ResNet50/tree/main
https://swanhub.co/ZeYiLin/U-2-Net-onnxruntime
演示:
[swanhub]
https://swanhub.co/
[AI模型部署】基于gradio和python的网页交互界面(web-ui)——简易使用方法]
https://blog.csdn.net/imwaters/article/details/131400571
【Gradio详细文档——快速部署可视化人工智能应用】
原文链接:https://blog.csdn.net/matt45m/article/details/131772468