Gradio
1、构建你的第一个Gradio应用
简介
在这个教程中,我们将学习如何使用Gradio库来创建一个简单的机器学习应用。Gradio使得在Python中构建和共享机器学习模型变得非常容易。我们将从安装Gradio开始,然后创建一个基本的应用来展示文本输入和输出的互动。以下是 Gradio 的一些主要特点和优势:
易用性
- 快速界面创建:Gradio 允许开发者仅用几行代码就能为机器学习模型创建前端界面,无需深入了解前端技术。
- 直观的 API:Gradio 提供了一个易于理解和使用的 API,使得创建复杂的交互界面变得容易。
功能丰富
- 多种输入和输出类型:支持多种输入(如文本、图片、音频等)和输出(如文本、图像、音频等)类型,满足不同模型展示的需求。
- 实时交互:用户可以实时输入数据,并立即查看模型的输出,这对于演示模型的功能和测试模型的性能非常有用。
灵活性和兼容性
- 支持多种机器学习框架:与 TensorFlow、PyTorch、scikit-learn 等主流机器学习框架兼容。
- 集成其他Python库:可以方便地与其他Python库结合使用,如OpenAI的GPT、Hugging Face等。
易于分享和部署
- 一键分享:Gradio 允许用户通过生成的 URL 链接轻松分享他们的应用,使其他人能够访问和使用模型。
- 集成到网站或笔记本:可以将 Gradio 界面嵌入到网页或 Jupyter 笔记本中,方便演示和教学。
社区支持
- 活跃的开发社区:作为一个开源项目,Gradio 拥有一个活跃的开发社区,不断更新和改进。
- 丰富的文档和示例:提供了详细的文档和丰富的示例,帮助新用户快速上手。
安装Gradio
首先,我们需要安装Gradio。可以通过以下命令来安装:
pip install gradio
创建第一个Gradio应用
import gradio as gr
# 输入文本处理程序
def greet(name):
return f"Hello {name} !"
# 创建接口函数
# Interface 交互界面
# fn 设置处理函数,表示界面要执行的一些功能(函数)
# inputs 设置输入接口组件,"text" 接受文本的输入
# outputs 设置输出接口组件,"text" 进行文本的输出
# fn, inputs, outputs 都是必填函数
demo = gr.Interface(fn=greet, inputs="text", outputs="text")
# 启动界面
demo.launch()
# demo.launch(server_port=8000) # server_port 设置端口号
运行程序后,打开 http://127.0.0.1:7860 即可看到网页效果。
左边是文本输入框,右边是结果展示框。Clear 按钮用于重置网页状态,Submit 按钮用于执行处理程序,Flag 按钮用于保存结果到本地,会自动生成 flagged 文件夹和 log.csv文件。
自动重载运行,在 Terminal 终端中运行一下代码
gradio 文件名.py
关闭连接
iface.close()
报错处理
报错,编码问题
将 gradio 的当前版本卸载安装最新版本后运行正常。
将链接改为公共地址
demo.launch(server_port=8000, share=True) # server_port 设置端口号,share=True 生成公共链接
缺少文件,需要通过以下方式操作:1.下载文件 2.更改名字 3.放到指定位置。之后重启电脑。
无法连接网络,从 GitHub 中下载,https://github.com/friklogff/frpc_windows_amd64_v0.2
要在 Windows 系统上为 frpc_windows_amd64_v0.3
文件授予执行权限,您可以使用 icacls
命令。请按照以下步骤进行操作:
- 打开命令提示符(以管理员身份运行)。
- 在开始菜单中搜索“命令提示符”。
- 右键单击“命令提示符”,然后选择“以管理员身份运行”。
- 切换到
frpc_windows_amd64_v0.3
文件所在目录。- 使用
cd/d
命令进入文件所在目录。例如:cd/d E:\anaconda3\Lib\site-packages\gradio
- 使用
- 使用
icacls
命令授予文件执行权限。- 运行一下命令:
icacls frpc_windows_amd64_v0.3 /grant Users:(RX)
- 运行一下命令:
- 在 Windows安全中心(会拦截应用) 中允许程序执行。
理解 gr.Interface
要构建一个 Gradio 应用,关键在于理解 gr.Interface
类。这个类转为 创建展示机器学习模型的演示而设计,能够处理一个或多个输入,并返回一个或多个输出。
gr.Interface
主要接受三个参数:
fn
: 你想为其创建用户界面的函数。inputs
: 定义输入的 Gradio 组件,数量应与函数的参数数量相匹配。outputs
: 定义输出的 Gradio 组件,数量应与函数的返回值数量相匹配。
fn
参数非常灵活,你可以传递任何 Python 函数。在上面的例子中,我们用了一个简单的问候函数,但你也可以传递更复杂的函数,如音乐生成器、税务计算器或预训练机器学习模型的预测函数。
输入和输出参数可以接受一个或多个 Gradio 组件。Gradio 提供了超过 30 中内置组件,例如 gr.Textbox()
、gr.Image()
和 gr.HTML()
,这些组件转为机器学习应用设计。
✍️ 提示:在 inputs
和 outputs
参数中,你可以传递这些组件的名称(如 textbox
)或类的实例(如 gr.Textbox()
)。
如果你的函数接受多个参数或返回多个值,可以分别传递输入和输出组件的列表。这种灵活性使得 gr.Interface
成为创建演示的强大工具。
2、Gradio基础组件详细介绍
输入组件详解及示例
Gradio 是一个强大的库,用于快速构建和分享机器学习模型的交互式界面。理解其核心输入组件对于创建有效的用户界面至关重要。下面,我们将详细探讨各种输入组件及其应用。
文本输入(text
)
用途:接受任意形式的字符串输入,适用于文本分析、自然语言处理等应用。
示例代码:创建一个应用,用户输入文本,应用返回相同的文本。
import gradio as gr
def echo(input_text):
return f'你输入了:{input_text}'
iface = gr.Interface(fn=echo, inputs='text', outputs='text')
iface.launch()
import gradio as gr
def demo(*args):
pass
demo = gr.Interface(fn=demo,
inputs=[gr.Text(label="账号", placeholder="请输入账号"),
# label 标签;placeholder 提示信息
gr.Text(label="邮箱", placeholder="请输入邮箱", type="email"),
gr.Text(label="密码", placeholder="请输入密码", type="password"),
gr.Textbox(label="Texbox", lines=3, max_lines=5, placeholder="请填写信息"),
# Textbox 创建一个文本区域,供用户输入字符串或显示字符串输出。
# lines 文本区域中要提供的最小行数。max_lines 文本区域中提供的最大行数。
gr.TextArea(label="TextArea", lines=3, max_lines=5, placeholder="请填写信息")],
outputs="text")
demo.launch()
数字输入(number
)
用途:允许用户输入数字,适合进行数值分析或数值相关的预测。
示例代码:用户输入一个数字,应用返回其平方值。
def square(x):
return x**2
iface = gr.Interface(fn=square, inputs='number', outputs='number')
iface.launch()
import gradio as gr
def add(a, b):
return a + b
demo = gr.Interface(fn=add,
# inputs = ["number", gr.Number()],
inputs=[gr.Number(label="数字1", info="请输入数字"),
gr.Number(label="数字2", info="请输入数字")],
outputs="text") # 或 outputs="number"
demo.launch()
滑块(slider
)
用途:提供一种直观的方式来选择一个范围内的数值,常用于调整参数。
示例代码:用户通过滑块选择年龄,应用根据年龄给出不同的建议。
def age_advice(age):
if age < 18:
return "You're quite young!"
elif age < 60:
return "Enjoy your best years!"
else:
return "Age is just a number!"
iface = gr.Interface(fn=age_advice, inputs=gr.Slider(0, 120), outputs='text')
iface.launch()
import gradio as gr
def exclamation_point(nums):
return "!" * nums
demo = gr.Interface(fn = exclamation_point,
# inputs = "slider",
inputs = gr.Slider(minimum=10, # 最小值
maximum=50, # 最大值
value=20, # 默认值
step=1,
label="感叹号数量"),
outputs = "text")
demo.launch()
选项选择框
勾选框(checkbox
)
用途:提供布尔选择(是/否),适用于启用/禁用选项或特性。
示例代码:用户可以勾选复选框来表示是否喜欢猫,应用根据选择返回不同的响应。
def cat_lover(is_lover):
return "Cat lovers are welcome!" if is_lover else "Not a cat person, I see."
iface = gr.Interface(fn=cat_lover, inputs='checkbox', outputs='text')
iface.launch()
单选按钮(radio
)
用途:允许用户从预设的选项中选择一个,适合于有限选项的情景。
示例代码:用户选择最喜欢的季节,应用返回对该季节的描述。
def season_description(season):
descriptions = {
'Spring': 'Spring is full of flowers.',
'Summer': 'Summer is quite warm.',
'Autumn': 'Autumn has beautiful leaves.',
'Winter': 'Winter is very cold.'
}
return descriptions[season]
iface = gr.Interface(fn=season_description, inputs=gr.Radio(['Spring', 'Summer', 'Autumn', 'Winter']), outputs='text')
iface.launch()
多选按钮
def language_info(language):
info = {
'Python': 'Python is great for AI.',
'JavaScript': 'JavaScript is essential for web development.',
'C++': 'C++ is used in system programming.'
}
result = '\n'.join([info[l] for l in language])
return result
iface = gr.Interface(
fn=language_info,
inputs=gr.Checkboxgroup(['Python', 'JavaScript', 'C++'], label="多选", info="多选框"),
outputs=gr.Textbox(lines=5)
)
iface.launch()
下拉菜单(dropdown
)
用途:类似于单选按钮,但更节省空间。适用于选项较多的情况。
示例代码:用户选择一种编程语言,应用返回关于该语言的简短介绍。
def language_info(language):
info = {
'Python': 'Python is great for AI.',
'JavaScript': 'JavaScript is essential for web development.',
'C++': 'C++ is used in system programming.'
}
return info[language]
iface = gr.Interface(fn=language_info, inputs=gr.Dropdown(['Python', 'JavaScript', 'C++']), outputs='text')
iface.launch()
def language_info(language):
info = {
'Python': 'Python is great for AI.',
'JavaScript': 'JavaScript is essential for web development.',
'C++': 'C++ is used in system programming.'
}
result = '\n'.join([info[l] for l in language])
return result
iface = gr.Interface(
fn=language_info,
# 多选下拉框
inputs=gr.Dropdown(['Python', 'JavaScript', 'C++'], multiselect=True, label="下拉框", info="多选下拉框"),
outputs=gr.Textbox(lines=5)
)
iface.launch()
综合案例
# 勾选框、单选框、多选框、下拉框
import gradio as gr
def function(choose1, choose2, choose3, choose4):
return f"{str(choose1)} , {str(ch