文章目录
- 构建您的第一个demo
- 分享您的demo
- 进度条
- 受密码保护的应用程序
- The Interface class(接口类)
- Components Attributes(组件属性)
- 多个输入和输出组件
- 图像示例
- 嵌套列表
- 描述性内容
- 手风琴中的附加输入
- The 4 Kinds of Gradio Interfaces
- 标准演示
- 仅输出演示
- 仅输入演示
- 统一演示
构建您的第一个demo
import gradio as grdef greet(name, intensity): #"def"自建函数;"greet"自定义函数名字;"name"名字(中文);“intensity”强度(中文);表示这个def自建函数greet接收两个参数“name”和“intensity”return "Hello, " + name + "!" * int(intensity) demo = gr.Interface( #“interface”界面(中文);gr.Interface 是 Gradio 库中的一个类,demo是gr.Interface这个类的实例;fn=greet,inputs=["text", "slider"], #"slider"滑块(中文);outputs=["text"],
)
#fn、inputs 和 outputs 是用于定义 Gradio 界面行为和组件的参数;
demo.launch() #调用 Gradio 接口对象 demo 的方法;用于启动交互式界面;
分享您的demo
demo.launch(share=True) # Share your demo with just 1 extra parameter 🚀;parameter参数(中文);
进度条
import gradio as gr
import timedef slowly_reverse(word, progress=gr.Progress()):progress(0, desc="Starting") #进度条初始化为 0,状态描述为 "Starting";desc描述(description中文)time.sleep(1) #让程序休眠 1 秒,模拟处理过程中的延迟。progress(0.05) #将进度设置为 0.05new_string = "" #创建一个空字符串,用于存储逆转后的字符串for letter in progress.tqdm(word, desc="Reversing"):time.sleep(0.25)new_string = letter + new_stringreturn new_stringdemo = gr.Interface(slowly_reverse, gr.Text(), gr.Text()) #创建一个 Gradio 接口对象 demodemo.launch()
import time这是导入的模块还是库?
import time
是导入了 Python 标准库中的time
模块,而不是导入了一个库。在 Python 中,库(library)通常是一个包含一组相关功能的集合,而模块(module)则是一个包含变量、函数和类的单个 Python 文件。因此,time
是一个模块,它提供了与时间相关的函数和类,例如sleep()
用于让程序暂停执行一段时间。
受密码保护的应用程序
import gradio as grdef update_message(request: gr.Request): #它接受一个参数 request,类型为 gr.Requestreturn f"Welcome, {request.username}" #request.username 是 gr.Request 对象的属性,表示用户的用户名;f表示使用格式化字符串;with gr.Blocks() as demo: # 使用 Blocks 类创建一个代码块,将其命名为 demo。with 语句用于确保在代码块结束时释放资源。m = gr.Markdown() #创建一个 Markdown 组件,这个组件用于显示文本内容。logout_button = gr.Button("Logout", link="/logout") #创建一个按钮组件,将其命名为 logout_button。按钮上显示的文本为 "Logout",并且点击按钮时会跳转到 "/logout" 路径。demo.load(update_message, None, m) #使用 load() 方法加载一个更新函数、一个预处理函数和一个输出组件到代码块中。在这里,update_message 函数用于处理用户输入,所以我们将其加载到代码块中。None 表示没有预处理函数。m 是 Markdown 组件,用于显示欢迎消息。demo.launch(auth=[("Pete", "Pete"), ("Dawood", "Dawood")]) #auth 参数指定了允许访问的用户名和密码列表。
The Interface class(接口类)
fn:包装用户界面(UI)的函数
inputs:用于输入的 Gradio 组件。组件的数量应与函数中参数的数量相匹配。
outputs:用于输出的 Gradio 组件。组件的数量应与函数返回值的数量相匹配。
Components Attributes(组件属性)
import gradio as grdef greet(name, intensity):return "Hello, " + name + "!" * intensitydemo = gr.Interface(fn=greet,inputs=["text", gr.Slider(value=2, minimum=1, maximum=10, step=1)],outputs=[gr.Textbox(label="greeting", lines=3)],
)demo.launch()
多个输入和输出组件
import gradio as grdef greet(name, is_morning, temperature):salutation = "Good morning" if is_morning else "Good evening" #“salutation”称呼(中文)greeting = f"{salutation} {name}. It is {temperature} degrees today"celsius = (temperature - 32) * 5 / 9return greeting, round(celsius, 2) #将摄氏温度 celsius 四舍五入到小数点后两位的精度。demo = gr.Interface(fn=greet,inputs=["text", "checkbox", gr.Slider(0, 100)], #"text"文本框(中文);"checkbox"复选框(中文);outputs=["text", "number"],
)
demo.launch()
图像示例
import numpy as np
import gradio as grdef sepia(input_img): #input_img代表输入的图像。sepia_filter = np.array([ #array阵列[0.393, 0.769, 0.189], [0.349, 0.686, 0.168], [0.272, 0.534, 0.131]]) #创建了一个深褐色滤镜矩阵,其中包含了一组预定义的权重。这个矩阵被用于将输入图像转换为深褐色效果。sepia_img = input_img.dot(sepia_filter.T) #将输入图像与深褐色滤镜矩阵进行矩阵乘法运算,得到转换后的深褐色图像。dot点(中文);sepia棕色(中文);filter滤波器(中文)sepia_img /= sepia_img.max() #对转换后的图像进行归一化,以确保图像的像素值在合适的范围内。return sepia_imgdemo = gr.Interface(sepia, gr.Image(), "image")
demo.launch()
嵌套列表
import gradio as gr
def calculator(num1, operation, num2):if operation == "add":return num1 + num2elif operation == "subtract":return num1 - num2elif operation == "multiply":return num1 * num2elif operation == "divide":if num2 == 0:raise gr.Error("Cannot divide by zero!") #raise 是 Python 中的一个关键字,用于手动触发异常。return num1 / num2demo = gr.Interface(calculator,["number", gr.Radio(["add", "subtract", "multiply", "divide"]), #“radio”单选按钮组件"number"],"number",examples=[[45, "add", 3],[3.14, "divide", 2],[144, "multiply", 2.5],[0, "subtract", 1.2],],title="Toy Calculator",description="Here's a sample toy calculator. Allows you to calculate things like $2+2=4$",
)demo.launch()
描述性内容
构造函数中有三个参数Interface来指定此内容的位置:
title:接受文本并可以将其显示在界面的最顶部,并且也成为页面标题。
description: 接受文本、Markdown 或 HTML 并将其放置在标题的正下方。
article:它也接受文本、Markdown 或 HTML 并将其放置在界面下方。
手风琴中的附加输入
import gradio as grdef generate_fake_image(prompt, seed, initial_image=None): #prompt(文本提示)、seed(随机种子)和 initial_image(初始图像)。return f"Used seed: {seed}", "https://dummyimage.com/300/09f.png"demo = gr.Interface(generate_fake_image,inputs=["textbox"],outputs=["textbox", "image"],additional_inputs=[gr.Slider(0, 1000),"image"]
)demo.launch()
The 4 Kinds of Gradio Interfaces
事实证明,该类gradio.Interface实际上可以处理 4 种不同类型的演示:
标准演示:具有单独的输入和输出(例如图像分类器或语音到文本模型)
仅输出演示:不接受任何输入但产生输出(例如无条件图像生成模型)
仅输入演示:不产生任何输出,但接受某种输入(例如,保存上传到持久外部数据库的图像的演示)
统一演示:同时具有输入和输出组件,但输入和输出组件是相同的。这意味着产生的输出会覆盖输入(例如文本自动完成模型)
标准演示
import numpy as np
import gradio as grdef sepia(input_img):sepia_filter = np.array([[0.393, 0.769, 0.189], [0.349, 0.686, 0.168], [0.272, 0.534, 0.131]])sepia_img = input_img.dot(sepia_filter.T)sepia_img /= sepia_img.max()return sepia_imgdemo = gr.Interface(sepia, gr.Image(), "image")
demo.launch()
仅输出演示
import timeimport gradio as grdef fake_gan():time.sleep(1)images = ["https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=387&q=80","https://images.unsplash.com/photo-1554151228-14d9def656e4?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=386&q=80","https://images.unsplash.com/photo-1542909168-82c3e7fdca5c?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxzZWFyY2h8MXx8aHVtYW4lMjBmYWNlfGVufDB8fDB8fA%3D%3D&w=1000&q=80",]return imagesdemo = gr.Interface(fn=fake_gan,inputs=None,outputs=gr.Gallery(label="Generated Images", columns=[2]), #gallery图库(中文);columns 参数用于设置每行显示的图像列数为 2。title="FD-GAN",description="This is a fake demo of a GAN. In reality, the images are randomly chosen from Unsplash.",
)demo.launch()
仅输入演示
import random
import string
import gradio as gr def save_image_random_name(image):random_string = ''.join(random.choices(string.ascii_letters, k=20)) + '.png' #首先使用 random.choices() 函数和 string.ascii_letters 来生成一个随机的由字母组成的字符串,长度为 20。然后,将生成的随机字符串与 '.png' 拼接,作为图像的文件名。image.save(random_string) #将上传的图像保存为随机命名的 PNG 文件print(f"Saved image to {random_string}!")demo = gr.Interface(fn=save_image_random_name, inputs=gr.Image(type="pil"), #指定了图像类型为 PIL(Python Imaging Library)格式outputs=None,
)
demo.launch()