Gradio

news/2024/11/18 3:37:53/文章来源:https://www.cnblogs.com/XuXiaoCong/p/18349979
  • BiliBili视频
  • 官网:https://www.gradio.app/
  • 为AI模型快速搭建交互式界面。根据AI模型需求,生成输入和输出组件,简化用户界面的构建过程。

起步

基础

  • 安装
pip install gradio
  • 官网示例
import gradio as grdef greet(name, intensity):return "Hello, " + name + "!" * int(intensity)demo = gr.Interface(fn=greet,inputs=['text', 'slider'],outputs=['text'],
)demo.launch()
  • 默认访问地址:http://127.0.0.1:7860
  • 按钮
    • Clear:清空输入数据
    • Submit:发送请求
    • Flag:保存当前结果,服务端会创建一个csv,Flag会保存数据

部署

局域网

  • 在launch()方法中,增加参数设置
    • server_name: 服务器名称默认是"127.0.0.1",只能本机访问。改成"0.0.0.0",即可在局域网内使用IP访问
    • server_port: 服务端口默认7860,当部署多个时,可能需要单独设置避免冲突
# 其他主机通过局域网访问
demo.launch(server_name='0.0.0.0',server_port=7860)

发布公网

  • 发布公网借助gradio的云服务,将launch()方法的share设置为True
  • 第一次使用大概率不符合条件,控制台会打印配置方式
    • 下载文件
    • 重命名文件(完全一致,不要后缀名)
    • 移动到对应目录(python环境的gradio目录)
  • 配置完成重启程序,即可返回一个公网链接,有效期为72小时
# share设置为True
demo.launch(share=True)
  • Windows打印内容如下
Running on local URL:  http://127.0.0.1:7860Could not create share link. Missing file: C:\Users\xxc\.conda\envs\py-demo-3.11\Lib\site-packages\gradio\frpc_windows_amd64_v0.2. Please check your internet connection. This can happen if your antivirus software blocks the download of this file. You can install manually by following these steps: 1. Download this file: https://cdn-media.huggingface.co/frpc-gradio-0.2/frpc_windows_amd64.exe
2. Rename the downloaded file to: frpc_windows_amd64_v0.2
3. Move the file to this location: C:\Users\xxc\.conda\envs\py-demo-3.11\Lib\site-packages\gradio
  • Linux打印内容如下
Running on local URL:  http://127.0.0.1:7860Could not create share link. Missing file: /home/lds/miniconda3/envs/py-demo-3.11/lib/python3.11/site-packages/gradio/frpc_linux_amd64_v0.2. Please check your internet connection. This can happen if your antivirus software blocks the download of this file. You can install manually by following these steps: 1. Download this file: https://cdn-media.huggingface.co/frpc-gradio-0.2/frpc_linux_amd64
2. Rename the downloaded file to: frpc_linux_amd64_v0.2
3. Move the file to this location: /home/lds/miniconda3/envs/py-demo-3.11/lib/python3.11/site-packages/gradio
  • 按打印内容配置后重启,即成功发布公网,并且打印内容如下
Running on local URL:  http://127.0.0.1:7860
Running on public URL: https://xxxxxxxxxxxxxxxx.gradio.liveThis share link expires in 72 hours. For free permanent hosting and GPU upgrades, run `gradio deploy` from Terminal to deploy to Spaces (https://huggingface.co/spaces)

api调用

  • launch()方法有'show_api:bool'参数,默认为True
    • 即'demo.launch(show_api=True)'
    • 网页左下方可打开api请求方法
# 安装gradio时已安装,下面语句用于单独安装
pip install gradio_client
from gradio_client import Clientclient = Client("http://127.0.0.1:7860/")
result = client.predict(name="Hello!!",intensity=0,api_name="/predict"
)# 文本直接打印
# 图片则自动保存到缓存,打印的是下载的图片路径
print(result)

界面

Inferface

  • 交互界面
  • 官网说明:https://www.gradio.app/docs/gradio/interface
参数 说明 类型 默认值 示例
fn 执行函数 Callable 必填
inputs 输入 str | Component | list[str | Component] | None 必填 "text" | gr.Slider(0, 100) | ["text", gr.Slider(0, 100)]
outputs 输出 str | Component | list[str | Component] | None 必填 "image" | gr.Image() | ["text", gr.Image()]
examples 输入示例(和输入元素一一对应) list[Any] | list[list[Any]] | str | None None [['张三', 1], ['李四', 2]]
title 标题(页面上方居中) str | None None
description 描述(标题下方,左对齐) str | None None
api_name api接口路径 str | Literal[False] | None "predict"
...


import gradio as grdef greet(name, intensity):return "Hello, " + name + "!" * intensitydemo = gr.Interface(fn=greet,inputs=["text", gr.Slider(label="重复次数", value=2, minimum=1, maximum=10, step=1)],outputs=[gr.Textbox(label="greeting", lines=3)],examples=[["张三", 3], ["李四", 6]],title='Gradio的简单示例',description='输入名字和重复次数,得到欢迎语'
)if __name__ == "__main__":demo.launch()

launch

  • 启动交互界面
参数 说明 类型 默认值 说明
show_api 界面是否显示api说明 bool True
server_name 服务地址 str | None None,即'127.0.0.1' '0.0.0.0',发布到局域网使用
server_port 端口号 int | None None,即7860
auth 登录权限 Callable | tuple[str, str] | list[tuple[str, str]] | None None,无需登录 ('admin','123456')
share 公共分享链接 bool | None None 连接到gradio.live
分享地址如:https://a23dsf231adb.gradio.live
...



import gradio as gr
demo = gr.Interface(...)if __name__ == "__main__":demo.launch(server_name='0.0.0.0',server_port=1234,auth=('admin', '123456'))

ChatInterface

  • 聊天类型交互界面
  • 官网说明:https://www.gradio.app/docs/gradio/chatinterface
  • 界面按钮
    • Retry: 重新发送最后一条信息
    • Undo: 删除最后一条对话
    • Clear: 清空所有对话
参数 说明 类型 默认值 说明
fn 执行函数 Callable 必填
multimodal 多模态 bool False False则只能输入文字;True则可以上传音视频等文件
examples 示例 list[str] | list[dict[str, str | list]] | list[list] | None None
title 标题 str | None None
...


import gradio as gr# message为当前接收的消息
def echo(message, history):print(history)  # history包含之前的所有对话,如:[['原神', '原神,启动!'], ['LOL', 'LOL,启动!']]return f'{message},启动!'demo = gr.ChatInterface(fn=echo,multimodal=False,examples=['原神', 'LOL', '黑神话'],title="聊天机器人")
demo.launch()

TabbedInterface

  • Tab页界面,多个界面放在tab页当中
  • 官方说明:https://www.gradio.app/docs/gradio/tabbedinterface
参数 说明 类型 默认值 说明
interface_list 界面列表 list[Blocks] 必填
tab_names tab名称列表 list[str] | None None ['计算器', '文生图']
...


import gradio as grdef hello(name):return f'Hello {name}'def bye(x: int, y: int):return f'{x} + {y} = {x + y}'hello_interface = gr.Interface(fn=hello, inputs="text", outputs="text", examples=[["张三"], ["李四"]])
bye_interface = gr.Interface(fn=bye, inputs=["number", "number"], outputs="text", examples=[[1, 1], [3, 4]])demo = gr.TabbedInterface(interface_list=[hello_interface, bye_interface],tab_names=['欢迎', '计算器'])if __name__ == "__main__":demo.launch()

Blocks

  • 像搭积木一样搭建界面
  • 官方文档:https://www.gradio.app/docs/gradio/blocks
import gradio as grdef plus(x: int, y: int):return f"{x} + {y} = {x + y}"with gr.Blocks() as demo:gr.Markdown("# 演示Block")gr.Markdown("像搭积木一样,一行一行堆叠")# 添加行,里面的元素横向添加with gr.Row():inp_x = gr.Number(value=1)inp_y = gr.Slider()out = gr.Textbox()# 继续下一行,添加按钮btn = gr.Button("计算")btn.click(fn=plus, inputs=[inp_x, inp_y], outputs=out)demo.launch()

render

  • 动态渲染
  • 官方文档:https://www.gradio.app/docs/gradio/render
import gradio as grwith gr.Blocks() as demo:input_num = gr.Number()# 根据输入值动态渲染@gr.render(inputs=input_num)def show_split(num):if num <= 0:gr.Markdown("## 输入大于0的数字")else:for i in range(num):with gr.Row():btn = gr.Button("点击")text = gr.Textbox()btn.click(lambda: 666, inputs=None, outputs=text)demo.launch()

Accordion

  • 折叠
  • 文档:https://www.gradio.app/docs/gradio/accordion
import gradio as grwith gr.Blocks() as demo:# 折叠组件with gr.Accordion("查看详情"):gr.Markdown("- 详情1")gr.Markdown("- 详情2")demo.launch()

Row/Column

  • 行/列
  • 文档
    • https://www.gradio.app/docs/gradio/row
    • https://www.gradio.app/docs/gradio/column
import gradio as grwith gr.Blocks() as demo:with gr.Row():with gr.Column(scale=1):text1 = gr.Textbox()text2 = gr.Textbox()with gr.Column(scale=4):btn1 = gr.Button("Button 1")btn2 = gr.Button("Button 2")demo.launch()

Group

  • 分组
  • 文档:https://www.gradio.app/docs/gradio/group
import gradio as grwith gr.Blocks() as demo:with gr.Group():gr.Textbox(label="First")gr.Textbox(label="Last")demo.launch()

Tab

  • Tab页
  • 文档:https://www.gradio.app/docs/gradio/tab
import gradio as grwith gr.Blocks() as demo:with gr.Tab("计算器"):gr.Number(label="x")gr.Number(label="y")gr.Button("计算")with gr.Tab("图生视频"):gr.Image()gr.Button("运行")demo.launch()

组件

  • 内置组件非常丰富,目前有40+组件,介绍几个常用的
  • 常见属性
参数 类型 默认 说明
label str | None None 标签,相当于表单说明
show_label bool | None None 是否显示标签
visible bool True 如果False,组件会隐藏
  • 常用组件
组件 简称 常用属性 说明
Textbox "textbox" lines,placeholder 文本框
TextArea "textarea" lines,placeholder 多行文本框
Number "number" minimum,maximum,step 数字文本框
Slider "slider" minimum,maximum,step 滑块
Radio "radio" choices 单选框
CheckboxGroup "checkboxgroup" choices 多选框
Audio "audio" format 音频,需要安装FFmpeg
Image "image" format,height,width,show_download_button 图片
Video "video" format,height,width 视频,需要安装FFmpeg
import gradio as gr
import timedef foo(textbox: str, textarea: str, number: int, slider: int, radio: str, checkboxes: list, ):return textbox, textarea, number, slider, radio, checkboxesdef multimedia_foo(audio, image, video):return audio, image, videodef chat_foo(message, history):return f'{message},启动!'def image_foo(text):time.sleep(1)return "example/image-1.webp"  # 伪代码,将提前准备的资源放在该路径def video_foo(text):time.sleep(1)return "example/video-1.mp4"  # 伪代码,将提前准备的资源放在该路径def audio_foo(text):time.sleep(1)return "example/audio-1.mp3"  # 伪代码,将提前准备的资源放在该路径components_interface = gr.Interface(fn=foo,inputs=[gr.Textbox(label="文本框"), gr.Number(label="数字文本框"), gr.Slider(label="滑块"),gr.Radio(label="单选框", choices=["单选1", "单选2", "单选3"]),gr.CheckboxGroup(label="复选框", choices=["复选1", "复选2", "复选3"]), gr.TextArea(label="多行文本框")],outputs=[gr.Textbox(), gr.Number(), gr.Slider(), gr.Textbox(), gr.Textbox(), gr.TextArea()],examples=[["言午日尧耳总", 100, 6, "单选1", ["复选1", "复选2"], "Gradio演示"],["耳总", 10086, 66, "单选2", [], "我的博客:http://blog.xuxiiaocong.cn"]])multimedia_interface = gr.Interface(fn=multimedia_foo,inputs=[gr.Audio(label="音频"), gr.Image(label="图片"), gr.Video(label="视频")],outputs=[gr.Audio(), gr.Image(), gr.Video()],examples=[["example/audio-1.mp3", "example/image-1.webp", "example/video-1.mp4"],["example/audio-2.mp3", "example/image-2.webp", "example/video-2.mp4"],["example/audio-3.mp3", "example/image-3.webp", "example/video-3.mp4"]]
)chat_interface = gr.ChatInterface(fn=chat_foo, examples=['原神', 'LOL', '黑神话'])
text_2_image_interface = gr.Interface(fn=image_foo, inputs="text", outputs="image", examples=["小女孩抱着一只猫"])
text_2_video_interface = gr.Interface(fn=video_foo, inputs="text", outputs="video", examples=["一个帅哥坐在椅子上"])
text_2_audio_interface = gr.Interface(fn=audio_foo, inputs="text", outputs="audio", examples=["创作一首歌"])demo = gr.TabbedInterface(interface_list=[components_interface, multimedia_interface, chat_interface, text_2_image_interface,text_2_video_interface, text_2_audio_interface],tab_names=["组件演示", "多媒体", "对话型", "文生图", "文生视频", "文生音频"])demo.launch()

其他

安装FFmpeg(Windows)

  • 处理音视频时,需要安装FFmpeg
  • FFmpeg官网:https://ffmpeg.org/
  • 官网首页点击"Download" > "More downloading options" > 选择Windows图标 > "Windows builds from gyan.dev"
  • 此时跳转到gyan.dev > "release builds" > "ffmpeg-full.7z" 点击下载
  • 下载后解压,将解压后的文件夹添加到环境变量中,重启命令行/IDE
ffmpeg -version

Gradio其他内容

  • Helpers: 交互事件,如点击事件,选择事件
  • Modals: 弹窗
  • Routes: 挂载到FastApi应用
  • Other: 标记(Flagging)、主题(Themes)等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/780069.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA 2024.2 正式发布,速览新功能!

0 前言 IntelliJ IDEA 2024.2 允许你直接在 IDE 运行 Spring Data JPA 方法,即时验证存储库查询。 简化了 cron 表达式管理,提供内联描述和高级自动补全功能,并升级 HTTP 客户端,使其使用 GraalJS 执行引擎。 该版本通过在项目索引期间启用关键功能,提高 IntelliJ IDEA 整…

片 - 树上问题 - 1

欢迎来看 “片” (的简介) 由于-\(看片\)-生涯转瞬即逝,于是我选择对“\(片\)”进行一定的总结: 相信你一定看懂了 由于开始的时间有一点晚,就姑且认为我以后会慢慢补充吧...... 回到总部 点分治 \(P4178\) \(Tree\) 解: 树的重心,树上\(DFS\)搜索,点分治 经过(两)天…

jwt伪造身份组组组合拳艰难通关

现在的攻防演练不再像以往那样一个漏洞直捣黄龙,而是需要各种组合拳才能信手拈来,但是有时候使尽浑身解数也不能称心如意。前言 现在的攻防演练不再像以往那样一个漏洞直捣黄龙,而是需要各种组合拳才能信手拈来,但是有时候使尽浑身解数也不能称心如意。 前期信息收集 首先是…

Genomics | 转录组和代谢组分析揭示了铁皮石斛中黄酮类化合物的积累

铁皮石斛是一种在中国有着悠久使用历史的中草药。黄酮是铁皮石斛重要的次生代谢产物,但其在铁皮石斛中的分子调控机制尚不清楚。在这项研究中,作者收集了一年到四年生的铁皮石斛茎,用于rna测序和质谱数据收集。结果表明,代谢组学分析检测到124种不同的类黄酮代谢物,其中黄…

包机制

1.包机制2.正确建立包 先找到Tree Appearance中找到compact middle package,取消勾选。然后右键src 新建一个package 一般利用公司域名倒置作为包名 如:com.zhiShi.www3.导包 使用import可以指定包中的某个成员如果文件太多,可以选择* *是选择所有文件

获取窗口大小 极语言

程序段 窗体启动 整数 width,height; 矩形类 矩形; 取客户区(窗体, &矩形); width = 矩形.宽-矩形.左; height =矩形.高-矩形.顶; 文本 x[5]=width; 文本 y[5]=height; 信息框(0,x,"你好",信息图标); 信息框(0,y,"你好",信息图标); 结束看下图,注意我截…

WPF实现一个壁纸切换器

这是一个最初的版本,大概效果如下: 写这个工具的想法是方便切换两套壁纸,一套私密壁纸,一套日常壁纸。准备支持动态壁纸、Bing每日图、从WebApi接口随机获取一张图。 技术层面 来说,没有问题,只是缺少时间去实现。项目代码:https://github.com/zhaotianff/PrivateWallp…

BMC Genomics | 综合代谢组学和转录组学分析揭示了菊花黄酮和咖啡酰奎宁酸的生物合成机制

杭白菊是一种流行的药用和食用植物,主要通过黄酮类和咖啡酰奎宁酸(CQAs)的存在发挥其生物活性。然而,菊花头状花序中黄酮和CQA生物合成的调控机制尚不清楚。 本研究采用高效液相色谱法测定了菊花头状花序发育过程中黄酮类化合物和CQAs的含量,发现在S1和S2阶段含量较高,在S3…

Creo二次开发(一)

creo vs环境搭建 note:配置Debug,release会失败 1.安装creo要安装ptoolkit 2.vs配置 包含目录 库目录 预处理定义PRO_USE_VAR_ARGS 链接器 wsock32.lib psapi.lib netapi32.lib mpr.lib protk_dllmd_NU.lib ucore.lib udata.lib note:忽略特定默认库库中添加“msvcrt.lib(结合…

【Playwright+Python】系列教程(八)鉴权Authentication的使用

写在前面 还是有些絮叨的感觉,官方翻译和某些博主写那个玩楞,基本都是软件直接翻译后的产物。 读起来生硬不说,甚至有的时候不到是什么意思,真的是实在不敢恭维。 到底是什么意思? 就是你已经登陆过一次,在Session、Cookie未失效的情况下,登录过一次后,下次就不用再走一…

Charles使用教程

一、Charles教程(一)Charles使用教程Charles是一个HTTP代理/ HTTP监视器/反向代理,能够查看其机器和Internet之间的所有HTTP和SSL / HTTPS流量。这包括请求,响应和HTTP标头(包含cookie和缓存信息) Charles 是在 Mac /Windows下常用的网络封包截取工具,在做 移动开发时,…

maven引用库显示红色波浪线时尝试删除_remote.repositories有用

使用第三方框架平台开发,其仓库为私服,在私服仓库不可用时但jar又是已经存在的情况下,maven很多引用库一直显示红色红波浪。 最后通过将repository下所有包下的_remote.repositories文件删除,问题解决了。 即,使用本地的jar,不需要检查远程仓库上的包。