在 Gradio 中,Interface
是用于构建和展示机器学习模型。通过 Interface
,你可以轻松地创建一个交互式的 Web 界面,让用户能够输入数据并查看模型或函数的输出,而不需要编写复杂的前端代码。
1. 基本使用
一个简单的交互界面,包含若干个输入控件,若干个输出控件,以及对输入数据进行计算的处理函数。在 Gradio 中提供了非常便捷的工具 Interface 来快速创建一个简单的交互式界面。该类通过三个重要的参数在交互式界面中显示需要的控件,以及相应的数据处理:
- fn:后端处理函数
- inputs:输入控件集合
- outputs:输出控件集合
import gradio as gr def test01(): def response(number): ret1 = number + 10 ret2 = 'hello' + str(number) return ret1,ret2 # 1. 传入字符串 # app = gr.Interface(fn=response, inputs='number', outputs=['number', 'text']) # app.launch() # 2. 传入控件对象 num = gr.Number() out1 = gr.Number() out2 = gr.Text() app = gr.Interface(fn=response, inputs=num, outputs=[out1, out2]) app.launch() def test02(): num = gr.Number() out1 = gr.Number() out2 = gr.Textbox() def response(number): ret1 = number + 10 ret2 = 'hello' + str(number) # 返回字典类型 return {out2: ret2, out1: ret1} app = gr.Interface(fn=response, inputs=num, outputs=[out1, out2]) app.launch() if __name__ == '__main__': test01()
2. 基本参数
import gradio as gr def test(): def respond(num, txt): return txt * num app = gr.Interface(fn=respond, inputs=['number', 'text'], outputs='text', # 界面的标题 title='我的交互界面', # 界面的描述 description='这是对界面的描述', # 界面的详细内容 article='<h2>这是详细内容</h2>', # 界面的主题风格 theme=gr.themes.Default(), # 界面的样式 # css='p{color:red;}', # 如果设置为 True,输出控件的内容会实时更新输出 # live=True, # 样例数据,每个控件都需要设置值 examples=[[10, 'A'], [20, 'B'], [30, 'C']], # 样例标签 example_labels=['样例1', '样例2', '样例3'], # 按钮文本 submit_btn='提交', stop_btn='停止', clear_btn='清空') app.launch() if __name__ == '__main__': test()
3. 输出标记
import gradio as gr def test(): class CustomFlagCallback(gr.FlaggingCallback): def setup(self, components, flagging_dir): """ 程序运行时初始化执行 components: 提供标记的组件集合(输入和输出控件集合) flagging_dir: 存储路径 """ # [<gradio.components.number.Number object at 0x0000023CA2EC5C90> ... ] print(components) # fallback print(flagging_dir) def flag(self, flag_data, flag_option, username): """ 用户点击标记时执行 flag_data: 标记数据 flag_option: 标记选项 username: 标记用户名 Returns: 标记的总数量 """ # [30, 'C', 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'] print(flag_data) # weifa print(flag_option) return 0 app = gr.Interface(fn=lambda n, t: n * t, inputs=['number', 'text'], outputs='text', # 输出标记: never auto manual # never: 从不标记 # auto: 自动标记每次输出 # manual: 手动标记每次输出 flagging_mode='manual', # 标记内容:[(label, value)...] flagging_options=[('违法', 'weifa'), ('错误', 'cuowu')], # 标记数据存储路径 flagging_dir='fallback', # 标记数据处理回调,默认使用 gradio.flagging.CSVLogger 处理标记数据 flagging_callback=CustomFlagCallback(), batch=True, max_batch_size=2) app.launch() if __name__ == '__main__': test()
4. launch 参数
import gradio as gr def test(): app = gr.Interface(fn=lambda x : x ** 2, inputs='number', outputs='number') # share:如果设置为 True,Gradio 会为你生成一个可以通过互联网访问的临时 URL。默认值为 False。 # inbrowser:是否在启动时自动在默认浏览器中打开应用界面。默认值为 False。 # auth:允许你为应用添加基本身份验证。你可以传入一个用户名和密码的元组,或者包含多个用户凭据的列表。 # auth_message:当启用 auth 时,显示的提示信息 # server_name:允许指定服务器的主机名。默认是 '127.0.0.1',即仅本地可访问。如果想通过局域网访问,可以设置为 '0.0.0.0'。 # quiet:如果设置为 True,则在启动应用时不会输出任何日志或信息。默认值为 False。 app.launch(share=True, inbrowser=True, auth=[('admin', '123456'), ('mbl', '123')], auth_message='请登录访问', server_name='0.0.0.0', server_port=8080, quiet=True) if __name__ == '__main__': test()