找回密码
 会员注册
查看: 41|回复: 0

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

[复制链接]

3

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2024-9-3 09:14:56 | 显示全部楼层 |阅读模式
使用gradio,只需在原有的代码中增加几行,快速部署机器学习模型,就能自动化生成交互式web页面,并支持多种输入输出格式,比如图像分类中的图>>标签,超分辨率中的图>>图等。同时还支持生成能外部网络访问的链接,能够迅速让你的朋友,同事体验你的算法。参考https://gradio.app/demos/https://www.machinelearningnuggets.com/gradio-tutorial/https://gradio.app/quickstart/文章目录参考安装一、简单的欢迎界面分析——(输入文字UI+函数处理+输出文字)UI操作效果分析使用控件函数设置控件的参数多UI控件输入、输出二、简单界面控件组合2.1多个tags界面,(不同输入输出功能)多tags代码2.2进度条显示函数处理时间(process)2.2进度条代码三、`图像`相关操作、`模型部署`3.1对上传图片,直接处理3.2分类模型UI部署(需要安装pytorch环境)下载模型界面(可手动)代码附录端口被占用[Errno10048]errorwhileattemptingtobindonaddress解决方法1(指定打开的端口)解决方法2找到占用端口+杀死安装注意,不要把python文件与pipinstallgradio12一、简单的欢迎界面分析——(输入文字UI+函数处理+输出文字)逻辑:输入UI中的参数,提交后自动传入绑定的函数,其中“text”表示输入输出UI控件是文本框。importgradioasgrdefgreet(name):return"Hello"+name+"!"demo=gr.Interface(fn=greet,inputs="text",outputs="text")demo.launch()'''如果需要在服务器部署后,局域网访问,修改为:'''#demo.queue().launch(server_name="0.0.0.0")1234567891011UI操作效果默认启动,如果7860已经占用,自动变为7861,如果端口无法启动。。端口被占用时,可指定端口demo.launch(server_port=30001)http://127.0.0.1:7860/1动效分析在上面的例子中,我们看到一个简单的基于文本的函数gr.InterfaceInterface核心类使用三个必需参数进行初始化:Interfacefn:将UI包裹起来的函数,该函数可以是任何功能,从音乐生成器到税收计算器,再到预训练机器学习模型的预测函数inputs:用于输入的组件(例如,或"text",“image”,“audio”)outputs:用于输出的组件(例如,或"text",“image”,“label”)使用控件函数设置控件的参数设置2行文本宽度,文本框的内的提示词importgradioasgrdefgreet(name):return"Hello"+name+"!"demo=gr.Interface(fn=greet,inputs=gr.Textbox(lines=2,placeholder="这里是提示文本框输入的内容..."),outputs="text",)demo.launch()1234567891011UI界面多UI控件输入、输出3个UI控件作为输入,2个输出,输入名字,是否是早晨,今天的温度,自动输入问候以及华氏温度与摄氏温度的转换importgradioasgrdefgreet(name,is_morning,temperature):#salutation表示致意、问候salutation="Goodmorning"ifis_morningelse"Goodevening"greeting=f"{salutation}{name}.Itis{temperature}degreestoday"#摄氏温度=(华氏温度–32)÷1.8celsius=(temperature-32)*5/9returngreeting,round(celsius,2)demo=gr.Interface(fn=greet,inputs=["text","checkbox",gr.Slider(0,100,label="华氏温度")],outputs=["text","number"],)demo.launch(server_port=30001)12345678910111213141516二、简单界面控件组合2.1多个tags界面,(不同输入输出功能)每个tags的功能、输入输出控件科技不同、且独立多tags代码importgradioasgr#app1defuser_greeting(name):return"Hi!"+name+"Welcome!!😎"#app2defuser_help(value):returnf"youpick{value}"deftags3(img):returnimg#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()123456789101112131415161718192021222324252627282930312.2进度条显示函数处理时间(process)进度条可以反映某些变量的值2.2进度条代码importgradioasgrimporttime#fromhttps://gradio.app/docs/#progressdefmy_function(x=10,progress_demo=gr.Progress()):x=int(x)progress_demo(0,desc="Starting...")time.sleep(1)foriinprogress_demo.tqdm(range(x)):time.sleep(0.1)res=f'run{x}steps'returnresgr.Interface(my_function,gr.Number(),gr.Textbox()).queue().launch()123456789101112131415三、图像相关操作、模型部署3.1对上传图片,直接处理上传一张图片,输入为灰度图像,其中处理函数可以修改为自己的。###完整代码importnumpyasnpimportgradioasgrfromPILimportImagedefgray(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图像对象returngraydemo=gr.Interface(gray,gr.inputs.Image(),outputs="image")demo.launch(server_port=7862)'''如果需要在服务器部署后,局域网访问,添加服务名server_name修改为:'''#demo.queue().launch(server_name="0.0.0.0")12345678910111213141516171819203.2分类模型UI部署(需要安装pytorch环境)下载模型界面(可手动)Downloading:“https://github.com/pytorch/vision/zipball/v0.6.0”toC:\Users\admin/.cache\torch\hub\v0.6.0.zipDownloading:“https://download.pytorch.org/models/resnet18-f37072fd.pth”toC:\Users\admin/.cache\torch\hub\checkpoints\resnet18-f37072fd.pth代码importgradioasgrimporttorchimportrequestsfromtorchvisionimporttransformsmodel=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)defpredict(inp):inp=transforms.ToTensor()(inp).unsqueeze(0)withtorch.no_grad():prediction=torch.nn.functional.softmax(model(inp)[0],dim=0)confidences={labels[i]:float(prediction[i])foriinrange(1000)}returnconfidencesdemo=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)123456789101112131415161718192021222324附录端口被占用[Errno10048]errorwhileattemptingtobindonaddressERROR:[Errno10048]errorwhileattemptingtobindonaddress(‘127.0.0.1’,7860):通常每个套接字地址(协议/网络地址/端口)只允许使用一次。解决方法1(指定打开的端口)server_port=xxx...........demo.launch(server_port=30001)12解决方法2打开命令端找到占用端口+杀死netstat-ano|findstr"7860"taskkill-F-PIDyour_id12
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-13 17:44 , Processed in 0.902799 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表