文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【AI模型部署】基于gradio和python的网页交互界面(web-ui)——简易使用方法

2023-08-31 22:16

关注

在这里插入图片描述
使用gradio,只需在原有的代码中增加几行,快速部署机器学习模型,就能自动化生成交互式web页面,并支持多种输入输出格式,比如图像分类中的图>>标签,超分辨率中的图>>图等。
同时还支持生成能外部网络访问的链接,能够迅速让你的朋友,同事体验你的算法。

  1. https://gradio.app/demos/
  2. https://www.machinelearningnuggets.com/gradio-tutorial/
  3. https://gradio.app/quickstart/

文章目录

注意,不要把python文件与

pip install gradio

逻辑:输入UI中的参数,提交后自动传入绑定的函数,
其中 “text” 表示输入输出UI控件是文本框。

import gradio as grdef greet(name):    return "Hello " + name + "!"demo = gr.Interface(fn=greet,inputs="text", outputs="text")demo.launch()

UI操作效果

默认启动 ,如果7860已经占用,自动变为7861,如果端口无法启动 。。 端口被占用时,可指定端口
demo.launch(server_port=30001)

http://127.0.0.1:7860/

动效
在这里插入图片描述

分析

在上面的例子中,我们看到一个简单的基于文本的函数
gr.InterfaceInterface 核心类使用三个必需参数进行初始化:Interface
fn:将 UI 包裹起来的函数,该函数可以是任何功能,从音乐生成器到税收计算器,再到预训练机器学习模型的预测函数
inputs:用于输入的组件(例如,或"text",“image”,“audio”)
outputs:用于输出的组件(例如,或"text",“image”,“label”)

使用控件函数设置控件的参数

设置2行文本宽度,文本框的内的提示词

import gradio as grdef greet(name):    return "Hello " + name + "!"demo = gr.Interface(    fn=greet,    inputs=gr.Textbox(lines=2, placeholder="这里是提示文本框输入的内容..."),    outputs="text",)demo.launch()

UI界面
在这里插入图片描述

多UI控件输入、输出

3个UI控件作为输入,2个输出,
输入名字,是否是早晨,今天的温度,
自动输入问候以及华氏温度与摄氏温度的转换
在这里插入图片描述

import gradio as grdef greet(name, is_morning, temperature):    # salutation表示致意、问候    salutation = "Good morning" if is_morning else "Good evening"    greeting = f"{salutation} {name}. It is {temperature} degrees today"    # 摄氏温度 = (华氏温度 – 32) ÷ 1.8    celsius = (temperature - 32) * 5 / 9    return greeting, round(celsius, 2)demo = gr.Interface(    fn=greet,    inputs=["text", "checkbox", gr.Slider(0, 100,label="华氏温度")],    outputs=["text", "number"],)demo.launch(server_port=30001)

在这里插入图片描述

2.1 多个tags界面,(不同输入输出功能)

每个tags的功能、输入输出控件科技不同、且独立
在这里插入图片描述

多tags代码

import gradio as gr#app 1def user_greeting(name):    return "Hi! " + name + " Welcome !!😎"#app 2def user_help(value):    return f"you pick {value} "def tags3(img):    return img# tags1的输入、输出,以及对应处理函数app1 =  gr.Interface(fn = user_greeting, inputs="text", outputs="text")# tags1的输入、输出,以及对应处理函数app2 =  gr.Interface(fn = user_help, inputs="slider", outputs="text")# tags1的输入、输出,以及对应处理函数app3 =  gr.Interface(fn = tags3, inputs="image", outputs="image")demo = gr.TabbedInterface(                          [app1, app2,app3],                          tab_names=["第一个界面", "第二个界面","tags3_图像"],                          title="多选项卡demo"                          )demo.launch()

2.2 进度条显示函数处理时间(process)

进度条可以反映某些变量的值
在这里插入图片描述

2.2 进度条代码

import gradio as grimport time# from https://gradio.app/docs/#progressdef my_function(x=10, progress_demo=gr.Progress()):    x=int(x)    progress_demo(0, desc="Starting...")    time.sleep(1)    for i in progress_demo.tqdm(range(x)):        time.sleep(0.1)    res=f'run {x} steps'    return resgr.Interface(my_function,             gr.Number(),             gr.Textbox()).queue().launch()

3.1 对上传图片,直接处理

上传一张图片,输入为灰度图像,其中处理函数可以修改为自己的。
在这里插入图片描述### 完整代码

import numpy as npimport gradio as grfrom PIL import Imagedef gray(input_img):    # 灰度值 = 0.2989 * R + 0.5870 * G + 0.1140 * B    # image[..., :3]表示提取图像的前三个通道(即R、G、B通道)    # 省略号可以在索引中表示对应维度的完整范围。    gray = np.dot(input_img[..., :3], [0.2989, 0.5870, 0.1140])    gray = gray.astype(np.uint8)  # 将灰度图像转换为无符号整型 ,如果不加一般会报错    # pil_image = Image.fromarray(gray)  # 将灰度图像数组转换为PIL图像对象    return graydemo = gr.Interface(gray, gr.inputs.Image(), outputs="image")demo.launch(server_port=7862)

3.2 分类模型UI部署 (需要安装pytorch环境)

在这里插入图片描述

下载模型界面(可手动)

Downloading: “https://github.com/pytorch/vision/zipball/v0.6.0” to C:\Users\admin/.cache\torch\hub\v0.6.0.zip
Downloading: “https://download.pytorch.org/models/resnet18-f37072fd.pth” to C:\Users\admin/.cache\torch\hub\checkpoints\resnet18-f37072fd.pth

代码

import gradio as grimport torchimport requestsfrom torchvision import transformsmodel = torch.hub.load('pytorch/vision:v0.6.0', 'resnet18', pretrained=True).eval()response = requests.get("https://git.io/JJkYN")labels = response.text.split("\n")print('labels',labels)def predict(inp):  inp = transforms.ToTensor()(inp).unsqueeze(0)  with torch.no_grad():    prediction = torch.nn.functional.softmax(model(inp)[0], dim=0)    confidences = {labels[i]: float(prediction[i]) for i in range(1000)}  return confidencesdemo = gr.Interface(fn=predict,             inputs=gr.inputs.Image(type="pil"),             outputs=gr.outputs.Label(num_top_classes=3),             # examples=[["cheetah.jpg"]],             )demo.launch(server_port=7865)

端口被占用 [Errno 10048] error while attempting to bind on address

ERROR: [Errno 10048] error while attempting to bind on address (‘127.0.0.1’, 7860): 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。

解决方法1 (指定打开的端口)

server_port=xxx

...........demo.launch(server_port=30001)

解决方法2

打开命令端
在这里插入图片描述

找到占用端口+杀死

netstat -ano|findstr "7860"taskkill  -F -PID your_id

来源地址:https://blog.csdn.net/imwaters/article/details/131400571

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯