博主原文链接:https://www.yourmetaverse.cn/nlp/409/
Gradio库中的Model3D模块:实时上传和展示3D模型
Gradio是一个功能强大的Python库,用于构建用户界面,特别适用于机器学习和深度学习任务。它提供了多种组件和模块,使开发人员能够轻松创建交互式界面,并与模型进行实时交互。其中一个引人注目的模块是Model3D,它提供了一种简单的方法来上传和展示3D模型。本文将介绍Gradio库中的Model3D模块以及其change、edit、clear和upload方法的使用。
Gradio的Model3D模块是一个用于上传和展示3D模型文件的组件。通过该组件,用户可以上传包含3D模型的文件,如.obj、.glb或.gltf文件,并在界面上实时查看和交互。下面是Model3D模块的示例代码:
import gradio as gr
import osdef load_mesh(mesh_file_name):return mesh_file_namedemo = gr.Interface(fn=load_mesh,inputs=gr.Model3D(),outputs=gr.Model3D(clear_color=[0.0, 0.0, 0.0, 0.0], label="3D Model"),examples=[[os.path.join(os.path.dirname(__file__), "files/Bunny.obj")],[os.path.join(os.path.dirname(__file__), "files/Duck.glb")],[os.path.join(os.path.dirname(__file__), "files/Fox.gltf")],[os.path.join(os.path.dirname(__file__), "files/face.obj")],],
)if __name__ == "__main__":demo.launch()
上述代码创建了一个Gradio界面,其中包含一个Model3D组件,用于上传和展示3D模型文件。load_mesh
函数是一个示例函数,用于处理上传的模型文件,并返回模型文件的路径。在界面的示例部分,提供了一些示例模型文件的路径,用户可以点击示例以查看相应的3D模型。
Model3D模块具有以下方法:
-
change(fn, inputs=None, outputs=None, ...)
:当组件的值发生变化时触发的方法。可以用于在Gradio Blocks中使用。参数fn
是一个函数,代表处理模型预测的函数。inputs
和outputs
分别指定输入和输出组件。 -
edit(fn, inputs=None, outputs=None, ...)
:当用户使用内置编辑器编辑组件(如图片)时触发的方法。可以用于在Gradio Blocks中使用。参数和用法与change
方法相似。 -
clear(fn, inputs=None, outputs=None, ...)
:当用户点击组件的清除按钮(如图片或音频的X按钮)时触发的方法。可以用于在Gradio Blocks中使用。参数和用法与change
方法相似。 -
upload(fn, inputs=None, outputs=None, ...)
:当用户上传文件到组件时触发的方法。可以用于在Gradio Blocks中使用。参数和用法与change
方法相似。
这些方法提供了灵活的方式来响应用户与Model3D组件的交互,可以根据具体需求编写对应的处理函数。
Gradio库中的Model3D模块为开发人员提供了一种简单的方法来上传和展示3D模型。通过该模块,用户可以实时查看和交互3D模型文件。使用change、edit、clear和upload等方法,可以自定义对用户交互的响应行为,从而实现更丰富的功能。Gradio的Model3D模块为构建交互式的机器学习应用提供了强大的工具。
参数详解
Model3D模块的参数
参数 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
value | str/Callable/None | None | 要显示在模型3D视图器中的文件(.obj、.glb或.gltf)的路径。如果是可调用对象,则在应用程序加载时调用该函数以设置组件的初始值。 |
clear_color | list[float]/None | None | 场景的背景颜色。 |
label | str/None | None | 组件在界面中的名称。 |
every | float/None | None | 如果value 是可调用对象,则在客户端连接开启时每隔“every”秒运行一次该函数。 |
show_label | bool | True | 如果为True,则显示标签。 |
container | bool | True | 如果为True,则将组件放置在容器中,提供一些额外的边框填充。 |
scale | int/None | None | 相对于相邻组件在一行中的宽度比例。例如,如果组件A的scale=2,组件B的scale=1,则A的宽度是B的两倍。应为整数。 |
min_width | int | 160 | 最小像素宽度,如果屏幕空间不足以满足此值,则换行。如果某个比例值导致该组件宽度小于min_width,则首先尊重min_width参数。 |
visible | bool | True | 如果为False,则隐藏组件。 |
elem_id | str/None | None | 可选的字符串,用作此组件在HTML DOM中的id。可用于针对CSS样式进行定位。 |
elem_classes | list[str]/str/None | None | 可选的字符串列表,用作此组件在HTML DOM中的类。可用于针对CSS样式进行定位。 |
change方法参数
参数 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
fn | Callable/None | 必填 | 要封装接口的函数,通常是机器学习模型的预测函数。函数的每个参数对应一个输入组件,并且函数应该返回一个值或一个值的元组,元组中的每个元素对应一个输出组件。 |
inputs | Component/list[Component]/set[Component]/None | None | 要用作输入的Gradio组件列表。如果函数不接受输入,则应为空列表。 |
outputs | Component/list[Component]/None | None | 要用作输出的Gradio组件列表。如果函数不返回输出,则应为空列表。 |
api_name | str/None | None | 定义此参数可将端点暴露在API文档中。 |
status_tracker | None | None | 无效。 |
scroll_to_output | bool | False | 如果为True,在完成时将滚动到输出组件。 |
show_progress | ‘full’/‘minimal’/‘hidden’ | ‘full’ | 如果为True,在等待期间显示进度动画。 |
queue | bool/None | None | 如果为True,则将请求放入队列中(如果队列已启用)。如果为False,则不会将此事件放入队列中,即使队列已启用。如果为None,则使用Gradio应用程序的队列设置。 |
batch | bool | False | 如果为True,则函数应该处理一批输入,这意味着它应该接受每个参数的输入值列表。列表应该长度相等(并且最多为max_batch_size 的长度)。然后,该函数必须返回一个元组列表(即使只有1个输出组件),其中元组中的每个列表对应一个输出组件。 |
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 | 在客户端连接开启时每隔“every”秒运行此事件。以秒为单位解释。队列必须已启用。 |
edit方法参数
参数 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
fn | Callable/None | 必填 | 要封装接口的函数,通常是机器学习模型的预测函数。函数的每个参数对应一个输入组件,并且函数应该返回一个值或一个值的元组,元组中的每个元素对应一个输出组件。 |
inputs | Component/list[Component]/set[Component]/None | None | 要用作输入的Gradio组件列表。如果函数不接受输入,则应为空列表。 |
outputs | Component/list[Component]/None | None | 要用作输出的Gradio组件列表。如果函数不返回输出,则应为空列表。 |
api_name | str/None | None | 定义此参数可将端点暴露在API文档中。 |
status_tracker | None | None | 无效。 |
scroll_to_output | bool | False | 如果为True,在完成时将滚动到输出组件。 |
show_progress | ‘full’/‘minimal’/‘hidden’ | ‘full’ | 如果为True,在等待期间显示进度动画。 |
queue | bool/None | None | 如果为True,则将请求放入队列中(如果队列已启用)。如果为False,则不会将此事件放入队列中,即使队列已启用。如果为None,则使用Gradio应用程序的队列设置。 |
batch | bool | False | 如果为True,则函数应该处理一批输入,这意味着它应该接受每个参数的输入值列表。列表应该长度相等(并且最多为max_batch_size 的长度)。然后,该函数必须返回一个元组列表(即使只有1个输出组件),其中元组中的每个列表对应一个输出组件。 |
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 | 在客户端连接开启时每隔“every”秒运行此事件。以秒为单位解释。队列必须已启用。 |
clear方法参数
参数 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
fn | Callable/None | 必填 | 要封装接口的函数,通常是机器学习模型的预测函数。函数的每个参数对应一个输入组件,并且函数应该返回一个值或一个值的元组,元组中的每个元素对应一个输出组件。 |
inputs | Component/list[Component]/set[Component]/None | None | 要用作输入的Gradio组件列表。如果函数不接受输入,则应为空列表。 |
outputs | Component/list[Component]/None | None | 要用作输出的Gradio组件列表。如果函数不返回输出,则应为空列表。 |
api_name | str/None | None | 定义此参数可将端点暴露在API文档中。 |
status_tracker | None | None | 无效。 |
scroll_to_output | bool | False | 如果为True,在完成时将滚动到输出组件。 |
show_progress | ‘full’/‘minimal’/‘hidden’ | ‘full’ | 如果为True,在等待期间显示进度动画。 |
queue | bool/None | None | 如果为True,则将请求放入队列中(如果队列已启用)。如果为False,则不会将此事件放入队列中,即使队列已启用。如果为None,则使用Gradio应用程序的队列设置。 |
batch | bool | False | 如果为True,则函数应该处理一批输入,这意味着它应该接受每个参数的输入值列表。列表应该长度相等(并且最多为max_batch_size 的长度)。然后,该函数必须返回一个元组列表(即使只有1个输出组件),其中元组中的每个列表对应一个输出组件。 |
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 | 在客户端连接开启时每隔“every”秒运行此事件。以秒为单位解释。队列必须已启用。 |
upload方法参数
参数 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
fn | Callable/None | 必填 | 要封装接口的函数,通常是机器学习模型的预测函数。函数的每个参数对应一个输入组件,并且函数应该返回一个值或一个值的元组,元组中的每个元素对应一个输出组件。 |
inputs | Component/list[Component]/set[Component]/None | None | 要用作输入的Gradio组件列表。如果函数不接受输入,则应为空列表。 |
outputs | Component/list[Component]/None | None | 要用作输出的Gradio组件列表。如果函数不返回输出,则应为空列表。 |
api_name | str/None | None | 定义此参数可将端点暴露在API文档中。 |
status_tracker | None | None | 无效。 |
scroll_to_output | bool | False | 如果为True,在完成时将滚动到输出组件。 |
show_progress | ‘full’/‘minimal’/‘hidden’ | ‘full’ | 如果为True,在等待期间显示进度动画。 |
queue | bool/None | None | 如果为True,则将请求放入队列中(如果队列已启用)。如果为False,则不会将此事件放入队列中,即使队列已启用。如果为None,则使用Gradio应用程序的队列设置。 |
batch | bool | False | 如果为True,则函数应该处理一批输入,这意味着它应该接受每个参数的输入值列表。列表应该长度相等(并且最多为max_batch_size 的长度)。然后,该函数必须返回一个元组列表(即使只有1个输出组件),其中元组中的每个列表对应一个输出组件。 |
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 | 在客户端连接开启时每隔“every”秒运行此事件。以秒为单位解释。队列必须已启用。 |