1 重要函数解析
1.1 Interface()类
参考: interface
最常用的基础模块构成。
- 应用界面:gr.Interface(简易场景), gr.Blocks(定制化场景)
- 输入输出:gr.Image(图像), gr.Textbox(文本框), gr.DataFrame(数据框), gr.Dropdown(下拉选项), gr.Number(数字), gr.Markdown, gr.Files
- 控制组件:gr.Button(按钮)
- 布局组件:gr.Tab(标签页), gr.Row(行布局), gr.Column(列布局)
1.1.1 Interface()
代码语言:javascript复制import gradio as gr
def image_classifier(inp):
return {'cat': 0.3, 'dog': 0.7}
demo = gr.Interface(fn=image_classifier, inputs="image", outputs="label")
demo.launch()
一些基本参数的解读:
- fn(Union[Callable, List[Callable]]):包装的函数,可以是一个或者多个,用列表存放多个函数。
- inputs(Union[str, InputComponent, List[Union[str, InputComponent]]]):输入类型/格式,一个参数可以是字符串str;可以是输入组件InputComponent;多个参数可以是列表,列表可以包含字符串str,输入组件InputComponent。输入组件的个数应该和fn函数的参数个数一致。
- outputs(Union[str, OutputComponent, List[Union[str, - OutputComponent]]]):输出类型/格式,与inputs类似,区别就算这是输出组件。输出组件的个数应该和fn函数返回个数一致。
- live(bool):默认为False,设置为True,为动态页面,只要输入发生变化,结果马上发生改变。
- layout(str):输入输出面板的布局。"horizontal"安排他们为两列等高;"unaligned"安排他们为两列不等高;"vertical"安排他们为垂直排放。
- allow_flagging(str):有三个选项"never"、“auto”、“manual”。设置为"never"或"auto"时,用户无法看到Flag按钮;设置为"manual",用户可见Flag按钮。如果设置为"auto",每次的输入输出都会被标记保存。如果设置为"manual",当用户按下Flag按钮,标记当前输入输出的结果并保存。
- flagging_dir(str):Flag保存的文件夹名称
1.1.2 Interface.launch
参考:gradio.Interface.launch(···)
代码语言:javascript复制import gradio as gr
def reverse(text):
return text[::-1]
demo = gr.Interface(reverse, "text", "text")
demo.launch(share=True, auth=("username", "password"))
参数名 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
inline | bool/None | None | 是否在界面中以内联的方式显示。在Python笔记本中默认为True,其他情况下默认为False。 |
inbrowser | bool | FALSE | 是否自动在默认浏览器的新标签页中打开界面。 |
share | bool/None | None | 是否创建一个公共链接,使演示可以被任何人访问。如果未提供,默认为False,除非在Google Colab中运行。 |
debug | bool | FALSE | 如果为True,在Google Colab中需要打印错误时会阻塞主线程。 |
enable_queue | bool/None | None | 【已弃用】是否启用队列来处理推理请求,用于防止超时。在HuggingFace Spaces中默认为True,在其他情况下默认为False。 |
max_threads | int | 40 | 并行生成的线程的最大数量。默认继承自starlette库(当前为40)。无论队列是否启用,都适用。但如果启用了队列,该参数将增加到至少队列的并发数。 |
auth | Callable/tuple/… | None | 如果提供,需要用户名和密码(或用户名-密码元组的列表)来访问界面。还可以提供一个函数,该函数接受用户名和密码并返回True表示有效登录。 |
auth_message | str/None | None | 如果提供,将在登录页面上显示的HTML消息。 |
prevent_thread_lock | bool | FALSE | 如果为True,界面将在服务器运行时阻塞主线程。 |
show_error | bool | FALSE | 如果为True,在界面中显示任何错误,并将其打印到浏览器的控制台日志中。 |
server_name | str/None | None | 如果设置为"0.0.0.0",可以使应用在本地网络上可访问。可以通过环境变量GRADIO_SERVER_NAME进行设置。如果为None,则使用"127.0.0.1"。 |
server_port | int/None | None | 将在该端口上启动Gradio应用程序(如果可用)。可以通过环境变量GRADIO_SERVER_PORT进行设置。如果为None,则从7860开始搜索可用端口。 |
show_tips | bool | FALSE | 如果为True,将偶尔显示有关Gradio新功能的提示。 |
height | int | 500 | 包含界面的iframe元素的高度(如果inline=True时使用)。 |
width | int/str | “100%” | 包含界面的iframe元素的宽度(如果inline=True时使用)。 |
encrypt | bool/None | None | 【已弃用】。无效果。 |
favicon_path | str/None | None | 如果提供文件的路径(.png、.gif或.ico),将用作Web页面的favicon(网站图标)。 |
ssl_keyfile | str/None | None | 如果提供文件的路径,将用作创建运行在https上的本地服务器的私钥文件。 |
ssl_certfile | str/None | None | 如果提供文件的路径,将用作https的已签名证书。如果提供了ssl_keyfile,需要提供ssl_certfile。 |
ssl_keyfile_password | str/None | None | 如果提供密码,将与https的SSL证书一起使用。 |
ssl_verify | bool | TRUE | 如果为False,则跳过证书验证,允许使用自签名证书。 |
quiet | bool | FALSE | 如果为True,则抑制大部分打印语句。 |
show_api | bool | TRUE | 如果为True,在应用程序的页脚中显示API文档。默认为True。如果启用了队列,则api_open参数的值将决定是否显示API文档,与show_api参数的值无关。 |
file_directories | list[str]/None | None | 【已重命名为allowed_paths】可以访问的文件路径列表。将在将来的版本中删除。 |
allowed_paths | list[str]/None | None | 允许Gradio访问的完整文件路径或父目录列表(除了包含Gradio Python文件的目录)。必须是绝对路径。警告:如果提供目录,则这些目录及其子目录中的所有文件都可供应用程序的所有用户访问。 |
blocked_paths | list[str]/None | None | 不允许Gradio访问的完整文件路径或父目录列表(即应用程序的用户不允许访问的路径)。必须是绝对路径。警告:优先于allowed_paths和Gradio默认公开的所有其他目录。 |
root_path | str | “” | 应用程序的根路径(或"mount point"),如果应用程序不是从域的根目录(“/”)提供的。通常在应用程序位于转发请求的反向代理后面时使用。例如,如果应用程序在"https://example.com/myapp"提供,则root_path应设置为"/myapp"。LinkTo |
app_kwargs | dict[str, Any]/None | None | 作为参数键和参数值的字典,将附加给底层的FastAPI应用程序。例如,{“docs_url”: “/docs”}。 |
1.1.3 Interface.from_pipeline
2 代码示例
2.1 一些功能片段
2.1.1 密码验证
在首次打开网页前,可以设置账户密码。比如auth参数为(账户,密码)的元组数据。这种模式下不能够使用queue函数。
代码语言:javascript复制demo.launch(auth=("admin", "pass1234"))
如果想设置更为复杂的账户密码和密码提示,可以通过函数设置校验规则。
代码语言:javascript复制#账户和密码相同就可以通过
def same_auth(username, password):
return username == password
demo.launch(auth=same_auth,auth_message="username and password must be the same")
2.2 页面完善
参考:Gradio入门到进阶全网最详细教程[二]:快速搭建AI算法可视化部署演示(侧重参数详解和案例实践)
代码语言:javascript复制import gradio as gr
from transformers import *
#标题
title = "抽取式问答"
#题下的描述,支持md格式
description = "输入上下文与问题后,点击submit按钮,可从上下文中抽取出答案,赶快试试吧!"
#输入样例
examples = [
["普希金从那里学习人民的语言,吸取了许多有益的养料,这一切对普希金后来的创作产生了很大的影响。这两年里,普希金创作了不少优秀的作品,如《囚徒》、《致大海》、《致凯恩》和《假如生活欺骗了你》等几十首抒情诗,叙事诗《努林伯爵》,历史剧《鲍里斯·戈都诺夫》,以及《叶甫盖尼·奥涅金》前六章。", "著名诗歌《假如生活欺骗了你》的作者是"],
["普希金从那里学习人民的语言,吸取了许多有益的养料,这一切对普希金后来的创作产生了很大的影响。这两年里,普希金创作了不少优秀的作品,如《囚徒》、《致大海》、《致凯恩》和《假如生活欺骗了你》等几十首抒情诗,叙事诗《努林伯爵》,历史剧《鲍里斯·戈都诺夫》,以及《叶甫盖尼·奥涅金》前六章。", "普希金创作的叙事诗叫什么"]
]
#页面最后的信息,可以选择引用文章,支持md格式
article = "感兴趣的小伙伴可以阅读[gradio专栏](https://blog.csdn.net/sinat_39620217/category_12298724.html?spm=1001.2014.3001.5482)"
qa = pipeline("question-answering", model="uer/roberta-base-chinese-extractive-qa")
def custom_predict(context, question):
answer_result = qa(context=context, question=question)
answer = question ": " answer_result["answer"]
score = answer_result["score"]
return answer, score
gr.Interface(fn=custom_predict, inputs=["text", "text"], outputs=[gr.Textbox(label="answer"), gr.Label(label="score")],
title=title, description=description, examples=examples, article=article).launch()
运行上述代码,将看到如下页面,这里的example是可以点击的,点击后将自动填充至context和question中 由于description和article字段支持md语法,因此我们可以根据需求,自行的去丰富完善各部分内容
注意点:
- 其中
def custom_predict(context, question):
这个函数当中的context
和question
的命名会影响到下面框框左上角的命名
参考文献: Gradio入门到进阶全网最详细教程[一]:快速搭建AI算法可视化部署演示(侧重项目搭建和案例分享) Gradio入门到进阶全网最详细教程[二]:快速搭建AI算法可视化部署演示(侧重参数详解和案例实践)