博主原文链接:https://www.yourmetaverse.cn/nlp/442/
利用Gradio的UploadButton模块实现文件上传功能
本文介绍了Gradio库中的UploadButton模块及其click和upload方法。UploadButton模块可以用于创建一个文件上传按钮,用户可以通过点击按钮来上传文件。本文将详细介绍UploadButton模块的参数和行为,并给出了示例代码和方法的详细说明。
在现代Web应用程序中,文件上传是一个常见的功能需求。Gradio库是一个用于构建交互式界面的Python库,其中的UploadButton模块提供了一个简单而强大的文件上传功能。通过使用UploadButton模块,开发者可以轻松地在Gradio应用程序中添加文件上传功能。
1. UploadButton模块介绍
UploadButton模块是Gradio库中的一个组件,用于创建一个文件上传按钮。用户可以通过点击按钮来选择并上传文件。下面是UploadButton模块的一些重要参数和行为:
-
参数:
- label:按钮上显示的文本,默认为"Upload a File"。
- value:默认要上传的文件或文件列表。
- variant:按钮的样式,可以是’primary’、‘secondary’或’stop’。
- visible:指定组件是否可见,默认为True。
- size:按钮的大小,可以是’sm’或’lg’。
- scale:相对于相邻组件的宽度比例。
- min_width:最小像素宽度,如果屏幕空间不足以满足此值,则会换行。
- interactive:指定按钮是否可交互,默认为True。
- elem_id:组件在HTML DOM中的id。
- elem_classes:组件在HTML DOM中的类。
-
行为:
- 输入:将上传的文件作为文件对象或文件对象列表传递给后续处理函数。
- 输出:期望函数返回文件的路径字符串或路径字符串列表。
2. click方法
click方法是UploadButton模块的一个监听器方法,当点击按钮时触发该方法。click方法可以在Gradio Blocks中使用,用于将函数包装成一个接口。
- 参数:
- fn:要包装的函数,通常是一个机器学习模型的预测函数。
- inputs:作为输入的组件列表。
- outputs:作为输出的组件列表。
- api_name:在API文档中显示的端点名称。
- status_tracker:状态跟踪器对象。
- scroll_to_output:是否在完成后滚动到输出组件。
- show_progress:是否显示进度动画。
- queue:是否将请求放入队列中。
- batch:是否处理一批输入。
- max_batch_size:批处理的最大输入数量。
- preprocess:是否在运行函数之前运行组件数据的预处理。
- postprocess:是否在返回函数输出之前运行组件数据的后处理。
- cancels:需要取消的其他事件列表。
- every:在客户端连接打开时每隔一定时间运行一次。
3. upload方法
upload方法是UploadButton模块的另一个监听器方法,当用户上传文件到组件时触发该方法。upload方法也可以在Gradio Blocks中使用。
- 参数:
- fn:要包装的函数,通常是一个机器学习模型的预测函数。
- inputs:作为输入的组件列表。
- outputs:作为输出的组件列表。
- api_name:在API文档中显示的端点名称。
- status_tracker:状态跟踪器对象。
- scroll_to_output:是否在完成后滚动到输出组件。
- show_progress:是否显示进度动画。
- queue:是否将请求放入队列中。
- batch:是否处理一批输入。
- max_batch_size:批处理的最大输入数量。
- preprocess:是否在运行函数之前运行组件数据的预处理。
- postprocess:是否在返回函数输出之前运行组件数据的后处理。
- cancels:需要取消的其他事件列表。
- every:在客户端连接打开时每隔一定时间运行一次。
4. 示例代码和用法
下面是一个使用UploadButton模块的示例代码:
import gradio as gr
def upload_file(files):
file_paths = [file.name for file in files]
return file_paths
with gr.Blocks() as demo:
file_output = gr.File()
upload_button = gr.UploadButton("Click to Upload a File", file_types=["image", "video"], file_count="multiple")
upload_button.upload(upload_file, upload_button, file_output)
demo.launch()
在这个示例中,我们创建了一个Gradio应用程序,包含一个文件输出组件(file_output)和一个UploadButton组件(upload_button)。当用户点击UploadButton组件并选择要上传的文件后,会触发upload_file函数来处理上传的文件。upload_file函数将返回上传文件的路径列表,并将其作为输出展示在文件输出组件中。
参数详解
UploadButton
参数 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
label | str | “Upload a File” | 按钮上显示的文本 |
value | str | list[str] | Callable | None | None | 默认要上传的文件或文件列表 |
variant | Literal[‘primary’, ‘secondary’, ‘stop’] | “secondary” | 按钮样式:'primary’为主要样式,'secondary’为次要样式,'stop’为停止按钮样式 |
visible | bool | True | 是否显示组件 |
size | Literal[‘sm’, ‘lg’] | None | None | 按钮的尺寸:可以是"sm"(小尺寸)或"lg"(大尺寸) |
scale | int | None | None | 相对于相邻组件的宽度比例。例如,如果组件A的scale=2,组件B的scale=1,则组件A的宽度是组件B的两倍。必须是整数。 |
min_width | int | None | None | 最小像素宽度,如果屏幕空间不足以满足此值,将换行。如果某个scale值导致该组件比min_width更窄,则优先考虑min_width参数。 |
interactive | bool | True | 如果为False,UploadButton将处于禁用状态。 |
elem_id | str | None | None | 可选字符串,作为该组件在HTML DOM中的id分配。可用于定位CSS样式。 |
elem_classes | list[str] | str | None | None | 可选的字符串列表,作为该组件在HTML DOM中的类分配。可用于定位CSS样式。 |
type | Literal[‘file’, ‘bytes’] | “file” | 组件返回的值的类型。"file"返回与上传文件具有相同基本名称的临时文件对象,其完整路径可以通过file_obj.name检索;"bytes"返回一个字节对象。 |
file_count | Literal[‘single’, ‘multiple’, ‘directory’] | “single” | 如果是"single",允许用户上传一个文件;如果是"multiple",允许用户上传多个文件;如果是"directory",允许用户上传所选目录中的所有文件。返回类型将根据"multiple"或"directory"的情况而定,分别返回每个文件的列表。 |
file_types | list[str] | None | None | 要上传的文件类型列表。"file"允许上传任何类型的文件;"image"只允许上传图像文件;"audio"只允许上传音频文件;"video"只允许上传视频文件;"text"只允许上传文本文件。 |
click方法
参数 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
fn | Callable | None | 必需 | 要封装为接口的函数,通常是机器学习模型的预测函数。函数的每个参数对应一个输入组件,函数应返回单个值或元组,其中每个元素对应一个输出组件。 |
inputs | Component | list[Component] | set[Component] | None | None | 用作输入的组件列表。如果函数不需要输入,这应该是一个空列表。 |
outputs | Component | list[Component] | None | None | 用作输出的组件列表。如果函数不返回输出,这应该是一个空列表。 |
api_name | str | None | Literal[False] | None | 定义端点在API文档中的显示方式。可以是字符串、None或False。如果为False,端点将不会在API文档中显示。如果设置为None,端点将以无名端点的形式显示在API文档中,尽管此行为将在Gradio 4.0中更改。如果设置为字符串,端点将以给定的名称显示在API文档中。 |
status_tracker | None | None | |
scroll_to_output | bool | False | 如果为True,在完成时将滚动到输出组件。 |
show_progress | Literal[‘full’, ‘minimal’, ‘hidden’] | “full” | 如果为True,在等待期间显示进度动画。 |
queue | bool | None | None | 如果为True,在队列中排队请求(如果启用了队列)。如果为False,即使启用了队列,也不会将此事件放入队列中。如果为None,则使用gradio应用程序的队列设置。 |
batch | bool | False | 如果为True,则函数应处理一批输入,这意味着它应接受每个参数的输入值列表。列表应具有相等的长度(最多为max_batch_size 长度)。然后函数必须返回一个元组的列表(即使只有一个输出组件),其中元组中的每个列表对应一个输出组件。 |
max_batch_size | int | 4 | 如果从队列中调用,将一起批处理的最大输入数量(仅当batch=True时相关) |
preprocess | bool | True | 如果为False,将不会在运行’fn’之前运行组件数据的预处理(例如,如果使用Image 组件调用此方法,则保留为base64字符串)。 |
postprocess | bool | True | 如果为False,将不会在将’fn’的输出返回给浏览器之前运行组件数据的后处理。 |
cancels | dict[str, Any] | list[dict[str, Any]] | None | None | 当此侦听器被触发时,取消其他事件的列表。例如,设置cancels=[click_event]将取消click_event,其中click_event是另一个组件的.click方法的返回值。尚未运行的函数(或正在迭代的生成器)将被取消,但当前正在运行的函数将被允许完成。 |
every | float | None | None | 在客户端连接打开时,每隔多少秒运行此事件。以秒为单位解释。必须启用队列。 |
upload方法
参数 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
fn | Callable | None | 必需 | 要封装为接口的函数,通常是机器学习模型的预测函数。函数的每个参数对应一个输入组件,函数应返回单个值或元组,其中每个元素对应一个输出组件。 |
inputs | Component | list[Component] | set[Component] | None | None | 用作输入的组件列表。如果函数不需要输入,这应该是一个空列表。 |
outputs | Component | list[Component] | None | None | 用作输出的组件列表。如果函数不返回输出,这应该是一个空列表。 |
api_name | str | None | Literal[False] | None | 定义端点在API文档中的显示方式。可以是字符串、None或False。如果为False,端点将不会在API文档中显示。如果设置为None,端点将以无名端点的形式显示在API文档中,尽管此行为将在Gradio 4.0中更改。如果设置为字符串,端点将以给定的名称显示在API文档中。 |
status_tracker | None | None | |
scroll_to_output | bool | False | 如果为True,在完成时将滚动到输出组件。 |
show_progress | Literal[‘full’, ‘minimal’, ‘hidden’] | “full” | 如果为True,在等待期间显示进度动画。 |
queue | bool | None | None | 如果为True,在队列中排队请求(如果启用了队列)。如果为False,即使启用了队列,也不会将此事件放入队列中。如果为None,则使用gradio应用程序的队列设置。 |
batch | bool | False | 如果为True,则函数应处理一批输入,这意味着它应接受每个参数的输入值列表。列表应具有相等的长度(最多为max_batch_size 长度)。然后函数必须返回一个元组的列表(即使只有一个输出组件),其中元组中的每个列表对应一个输出组件。 |
max_batch_size | int | 4 | 如果从队列中调用,将一起批处理的最大输入数量(仅当batch=True时相关) |
preprocess | bool | True | 如果为False,将不会在运行’fn’之前运行组件数据的预处理(例如,如果使用Image 组件调用此方法,则保留为base64字符串)。 |
postprocess | bool | True | 如果为False,将不会在将’fn’的输出返回给浏览器之前运行组件数据的后处理。 |
cancels | dict[str, Any] | list[dict[str, Any]] | None | None | 当此侦听器被触发时,取消其他事件的列表。例如,设置cancels=[click_event]将取消click_event,其中click_event是另一个组件的.click方法的返回值。尚未运行的函数(或正在迭代的生成器)将被取消,但当前正在运行的函数将被允许完成。 |
every | float | None | None | 在客户端连接打开时,每隔多少秒运行此事件。以秒为单位解释。必须启用队列。 |
结论
本文介绍了Gradio库中的UploadButton模块及其click和upload方法。通过使用UploadButton模块,开发者可以轻松地在Gradio应用程序中添加文件上传功能。通过详细了解UploadButton模块的参数和行为,并结合示例代码,开发者可以更好地理解和使用这一功能强大的组件。希望本文对你有所帮助,祝你在使用Gradio的过程中取得成功!