文章目录
- 构建您的第一个demo
 - 分享您的demo
 - 进度条
 - 受密码保护的应用程序
 - The Interface class(接口类)
 - Components Attributes(组件属性)
 - 多个输入和输出组件
 - 图像示例
 - 嵌套列表
 - 描述性内容
 - 手风琴中的附加输入
 - The 4 Kinds of Gradio Interfaces
 - 标准演示
 - 仅输出演示
 - 仅输入演示
 - 统一演示
 
构建您的第一个demo
import gradio as gr
def 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 time
def slowly_reverse(word, progress=gr.Progress()):
    progress(0, desc="Starting")	#进度条初始化为 0,状态描述为 "Starting";desc描述(description中文)
    time.sleep(1)	#让程序休眠 1 秒,模拟处理过程中的延迟。
    progress(0.05)	#将进度设置为 0.05
    new_string = ""	#创建一个空字符串,用于存储逆转后的字符串
    for letter in progress.tqdm(word, desc="Reversing"):
        time.sleep(0.25)
        new_string = letter + new_string
    return new_string
demo = gr.Interface(slowly_reverse, gr.Text(), gr.Text())	#创建一个 Gradio 接口对象 demo
demo.launch()
 
import time这是导入的模块还是库?
import time是导入了 Python 标准库中的time模块,而不是导入了一个库。在 Python 中,库(library)通常是一个包含一组相关功能的集合,而模块(module)则是一个包含变量、函数和类的单个 Python 文件。因此,time是一个模块,它提供了与时间相关的函数和类,例如sleep()用于让程序暂停执行一段时间。
受密码保护的应用程序
import gradio as gr
def update_message(request: gr.Request):	#它接受一个参数 request,类型为 gr.Request
    return 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 gr
def greet(name, intensity):
    return "Hello, " + name + "!" * intensity
demo = 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 gr
def 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 / 9
    return 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 gr
def 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_img
demo = gr.Interface(sepia, gr.Image(), "image")
demo.launch()
 
嵌套列表
import gradio as gr
def calculator(num1, operation, num2):
    if operation == "add":
        return num1 + num2
    elif operation == "subtract":
        return num1 - num2
    elif operation == "multiply":
        return num1 * num2
    elif operation == "divide":
        if num2 == 0:
            raise gr.Error("Cannot divide by zero!")	#raise 是 Python 中的一个关键字,用于手动触发异常。
        return num1 / num2
demo = 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 gr
def 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 gr
def 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_img
demo = gr.Interface(sepia, gr.Image(), "image")
demo.launch()
 
仅输出演示
import time
import gradio as gr
def 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 images
demo = 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()
 
统一演示









![[BT]BUUCTF刷题第2天(3.20)](https://img-blog.csdnimg.cn/direct/2aa33d13ca064706876bcb2a62ed542e.png)










