Gradio 月活跃用户突破 100 万!
阅读更多Gradio 月活跃用户突破 100 万!
阅读更多到目前为止,我们一直假设为了构建 Gradio 演示,您需要同时具备输入和输出。但这并非总是机器学习演示的情况:例如,无条件图像生成模型不需要任何输入,但会生成图像作为输出。
事实证明,gradio.Interface
类实际上可以处理 4 种不同类型的演示
根据演示的类型,用户界面 (UI) 看起来略有不同
让我们看看如何使用 Interface
类构建每种类型的演示,以及示例
要创建同时具有输入和输出组件的演示,您只需在 Interface()
中设置 inputs
和 outputs
参数的值。这是一个简单的图像过滤器示例演示
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()
一个演示,其中单个组件既作为输入又作为输出。只需将 inputs
和 outputs
参数的值设置为相同的组件即可创建它。这是一个文本生成模型的示例演示
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()
可能这 4 种情况都不能完全满足您的需求。在这种情况下,您需要使用 gr.Blocks()
方法!