graido学习记录
- 创业
- 2025-09-15 06:21:01

为了将来部署!学tmd!
首先简单的打个招呼
import gradio as gr def greet(name): return "Hello " + name + "!" demo = gr.Interface(fn=greet, inputs="text", outputs="text") demo.launch()表示输入输出都是文本“text”。
Interface 类可以用用户接口包装任意的Python函数。在上面的示例中,我们使用了一个基于文本的简单函数,但这个函数可以是任何东西。
Interface 类核心需要三个参数初始化:
fn : 被UI包装的函数inputs : 作为输入的组件 (例如: "text", "image" or "audio")outputs : 作为输出的组件 (例如: "text", "image" or "label")如果希望它更大并有一个文本占位符。如果我们使用 Textbox 的实际类,而不是使用字符串快捷方式,就可以通过组件属性实现个性化。
import gradio as gr def greet(name): return "Hello " + name + "!" demo = gr.Interface( fn=greet, inputs=gr.Textbox(lines=2, placeholder="Name Here..."), outputs="text", ) demo.launch()一个更复杂的函数,有多个输入和输出。比如下面例子,三个输入,两个输出,
输入:第一个为名字(text),第二个是选择项is_morning(checkbox),第三个是滑动条,范围0-100(slider)
输出:第一个为打招呼方式(text),第二个为数字,保留两位小数。
import gradio as gr def greet(name, is_morning, temperature): salutation = "Good morning" if is_morning else "Good evening" greeting = f"{salutation} {name}. It is {temperature} degrees today" celsius = (temperature - 32) * 5 / 9 return greeting, round(celsius, 2) demo = gr.Interface( fn=greet, inputs=["text", "checkbox", gr.Slider(0, 100)], outputs=["text", "number"], ) demo.launch()输入列表inputs中的每个组件依次对应函数的一个参数。输出列表outputs中的每个组件都对应于函数的一个返回值,两者均按顺序对应。
如何处理图像?
简单的处理~sepia
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(), gr.Image()) demo.launch()当使用Image组件作为输入时,您的函数将接收一个形状为 (height, width, 3) 的NumPy数组,其中最后一个维度表示RGB值。我们还将以NumPy数组的形式返回一张图像。你也可用 type= 关键字参数设置组件使用的数据类型。例如,如果你想让你的函数获取一个图像的文件路径,而不是一个NumPy数组时,输入 Image 组件可以写成:
gr.Image(type="filepath", shape=...) import numpy as np import gradio as gr from PIL import Image def sepia(input_img): input_img = Image.open(input_img) input_img = np.array(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(type="filepath",sources="upload"), gr.Image()) demo.launch()需要有些修改,传的是图片地址,需要转成np.array()
Blocks: 更加灵活且可控Gradio 提供了两个类来构建应用程序
1. Interface,一个高级抽象。
2. Blocks,一个用于设计具有更灵活布局和数据流的web应用程序的初级API。block可以做许多事,比如特征化多个数据流和演示,控制组件在页面上出现的位置,处理复杂的数据流(例如,输出可以作为其他函数的输入),以及根据用户交互更新组件的属性/可见性,且仍然在Python中。
import gradio as gr def greet(name): return "Hello " + name + "!" with gr.Blocks() as demo: name = gr.Textbox(label="Name") output = gr.Textbox(label="Output Box") greet_btn = gr.Button("Greet") greet_btn.click(fn=greet, inputs=name, outputs=output) demo.launch()不用像interface一样一次性就所有输入都输入,可以有中间状态,可读性和灵活性增加。
blocks可以有更多的可能性
import numpy as np import gradio as gr def flip_text(x): return x[::-1] def flip_image(x): return np.fliplr(x) with gr.Blocks() as demo: gr.Markdown("Flip text or image files using this demo.") with gr.Tabs(): with gr.TabItem("Flip Text"): text_input = gr.Textbox() text_output = gr.Textbox() text_button = gr.Button("Flip") with gr.TabItem("Flip Image"): with gr.Row(): image_input = gr.Image() image_output = gr.Image() image_button = gr.Button("Flip") text_button.click(flip_text, inputs=text_input, outputs=text_output) image_button.click(flip_image, inputs=image_input, outputs=image_output) demo.launch()作用就是对输入的字符串反转,对输入的图像翻转,也就是镜像。
你可以通过设置的参数来控制单次处理的请求数queue()
demo = gr.Interface(...).queue(default_concurrency_limit=5) demo.launch() with gr.Blocks().queue(default_concurrency_limit=5) as demo: pass demo.launch() 流式输出如若希望传输一系列输出,而不是一次显示单个输出。例如,您可能有一个图像生成模型,并且想要显示在每个步骤生成的图像,直至最终图像。或者您可能有一个聊天机器人,它一次流式传输一个令牌的响应,而不是一次返回所有令牌。
在这种情况下,您可以向 Gradio 提供一个生成器函数,而不是常规函数。在 Python 中创建生成器非常简单:return函数应该是yield一个一系列值,而不是单个值。通常,yield语句放在某种循环中。下面是一个简单地计数到给定数字的生成器示例
def my_generator(x): for i in range(x): yield i直接看例子,伪diffusion()
import gradio as gr import numpy as np import time def fake_diffusion(steps): rng = np.random.default_rng() for i in range(steps): time.sleep(1) image = rng.random(size=(600, 600, 3)) yield image image = np.ones(shape=(600, 600, 3), dtype=np.uint8) image[:] = [255, 0, 255] yield image with gr.Blocks() as demo: input = gr.Slider(1, 10,3,step=1) ouput = gr.Image() diffusion_btn = gr.Button("fake_diffusion") diffusion_btn.click(fake_diffusion, inputs=input, outputs=ouput) demo.launch()伪扩散模型,希望模拟扩散模型的一个过程,输入扩散有多少步, 输出图像
输入图像随机,使用rng = np.random.default_rng()
image = rng.random(size = (600, 600, 3)) 生成随机图像。
graido学习记录由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“graido学习记录”
 
               
               
               
              ![练习16Web[极客大挑战2019]LoveSQL](/0pic/pp_44.jpg) 
               
               
               
               
   
   
   
   
   
   
   
   
   
   
   
   
   
  