python系列&deep_study系列:Gradio中文教程(六)The 4 Kinds of Gradio Interfaces




Gradio中文教程(六)The 4 Kinds of Gradio Interfaces

四种Gradio接口

到目前为止,我们一直假设为了构建一个Gradio演示,您需要同时有输入和输出。但对于机器学习演示来说,情况并非总是如此:例如,无条件图像生成模型不接受任何输入,但会产生一个图像作为输出。

事实证明,gradio.Interface类实际上可以处理四种不同类型的演示:

  1. 标准演示:既有单独的输入也有输出(例如图像分类器或语音转文本模型)

  2. 仅输出演示:不接受任何输入,但产生一个输出(例如无条件图像生成模型)

  3. 仅输入演示:不产生任何输出,但确实接受某种输入(例如一个演示,它将您上传的图像保存到一个持久的外部数据库)

  4. 统一演示:既有输入组件也有输出组件,但输入和输出组件是相同的。这意味着产生的输出覆盖了输入(例如文本自动完成模型)

根据演示的类型,用户界面(UI)看起来略有不同:

让我们看看如何使用Interface类构建每种类型的演示,并附带示例:

标准演示

要创建一个既有输入组件又有输出组件的演示,您只需在Interface()中设置inputsoutputs参数的值。这里是一个简单的图像过滤器的示例演示:

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()

仅输出演示

对于只包含输出的演示呢?为了构建这样的演示,您只需将Interface()inputs参数的值设置为None。这里是一个模拟图像生成模型的示例演示:

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]),
    title="FD-GAN",
    description="This is a fake demo of a GAN. In reality, the images are randomly chosen from Unsplash.",
)

demo.launch()

仅输入演示

类似地,要创建一个只包含输入的演示,将Interface()outputs参数的值设置为None。这里是一个将任何上传的图像保存到磁盘的示例演示:

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'
    image.save(random_string)
    print(f"Saved image to {random_string}!")

demo = gr.Interface(
    fn=save_image_random_name, 
    inputs=gr.Image(type="pil"), 
    outputs=None,
)
demo.launch()

统一演示

一个演示,其单个组件既是输入也是输出。只需将inputsoutputs参数的值设置为相同的组件即可创建这样的演示。这里是一个文本生成模型的示例演示:

import gradio as gr
from transformers import pipeline

generator = pipeline('text-generation', model = 'gpt2')

def generate_text(text_prompt):
  response = generator(text_prompt, max_length = 30, num_return_sequences=5)
  return response[0]['generated_text']

textbox = gr.Textbox()

demo = gr.Interface(generate_text, textbox, textbox)

demo.launch()







老刘

Gradio中文教程(六)The 4 Kinds of Gradio Interfaces

posted @ 2024-10-08 12:37  坦笑&&life  阅读(9)  评论(0编辑  收藏  举报  来源