首页 > 其他分享 >Gradio:快速构建你的webApp

Gradio:快速构建你的webApp

时间:2024-01-11 21:32:16浏览次数:58  
标签:gr python outputs Gradio 构建 import webApp image

1. 什么是Gradio

如果你了解web开发,一定会知道开发一款webApp需要涉及很多技术栈:

  • 前端:HTML + CSS + JS (可能会涉及不同的CSS框架和JS框架如jquery VUE react等)
  • 后端语言:如python/java
  • web容器:如flask/tomcat

如果你只会python,又不想重头学习上述技术,你要怎么办?

据我所知,有两种解决方案:

streamlit之前我有介绍过,今天要分享的是Gradio, 提供的功能和streamlit类似,你只要会python就可以快速构建一个webApp。

Gradio:快速构建你的webApp_AI

从上图可知,Gradio定位是快速构建一个针对人工智能的python的webApp库,在Hugging Face等提供各种模型推理展示的平台广告使用,阿里的魔塔展示也是基于此。

大家思考下,Gradio作为一款python库,底层逻辑是什么?

  • 结果:Gradio展示的还是web元素
  • 过程:所以Gradio是即懂python又懂web开发(css/js/html)的开发者,通过python对这些web技术做了封装
  • pipline:python语言--> css/js/html

streamlit应该也是如此,之前介绍过的pyecharts也是如此(封装的是百度的可视化框架echarts。

开源牛人开发,方便你我,点赞!

2. 简单使用

我们来感受下Gradio的便捷之处。

安装

  • 要求python>=3.7
pip install -U pip -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install gradio  -i https://pypi.tuna.tsinghua.edu.cn/simple
# app.py
import gradio as gr

def greet(name):
    return "Hello " + name + "!"

demo = gr.Interface(fn=greet, inputs="text", outputs="text")

demo.launch(server_name="0.0.0.0")

# 启动
# python -u app.py
# Running on local URL:  http://0.0.0.0:7860
# To create a public link, set `share=True` in `launch()`

上面的代码就是简单一个webApp,功能是输入一个文本,输出一个文本。代码中关键点:

  • 导入包 import gradio as gr
  • gr.Interface 构建一个app, 确定输入inputs和输出outputs的类型,已经处理输入inputs的函数(这个函数返回一个outputs的类型)
  • 提供一个app的功能模块函数
  • launch 启动一个web容器,对外提供服务

梳理下web渲染流程

  • 根据输入输出类型(如text)封装html组件(with css样式,布局等)
  • 点击submit:通过js获取输入的值传递(ajax)给后台处理函数(greet),通过js回调函数接收函数的返回值,然后通过js赋值给html元素

Gradio:快速构建你的webApp_gradio_02

3. 组件介绍

上面只是介绍了Gradio的简单的使用,Gradio提供了丰富的html组件,如文本框,图像,视频,下拉框,单选框,复选框等等。

我们再来看一个在机器视觉推理比较常见的展示:输入一个图片,输出一个图片,并提供下载。

import gradio as gr
from transformers import DPTFeatureExtractor, DPTForDepthEstimation
import torch
import numpy as np
from PIL import Image
import open3d as o3d
from pathlib import Path
import os

feature_extractor = DPTFeatureExtractor.from_pretrained("Intel/dpt-large")
model = DPTForDepthEstimation.from_pretrained("Intel/dpt-large")

def process_image(image_path):
    image_path = Path(image_path)
    image_raw = Image.open(image_path)
    image = image_raw.resize(
        (800, int(800 * image_raw.size[1] / image_raw.size[0])),
        Image.Resampling.LANCZOS)

    # prepare image for the model
    encoding = feature_extractor(image, return_tensors="pt")

    # forward pass
    with torch.no_grad():
        outputs = model(**encoding)
        predicted_depth = outputs.predicted_depth

    ## ... 省略
    return [img, gltf_path, gltf_path]

title = "Demo: zero-shot depth estimation with DPT + 3D Point Cloud"
description = "This demo is a variation from the original DPT Demo. It uses the DPT model to predict the depth of an image and then uses 3D Point Cloud to create a 3D object."
examples = [["examples/1-jonathan-borba-CgWTqYxHEkg-unsplash.jpg"]]

iface = gr.Interface(fn=process_image,
                     inputs=[gr.Image(
                         type="filepath", label="Input Image")],
                     outputs=[gr.Image(label="predicted depth", type="pil"),
                              gr.Model3D(label="3d mesh reconstruction", clear_color=[
                                                 1.0, 1.0, 1.0, 1.0]),
                              gr.File(label="3d gLTF")],
                     title=title,
                     description=description,
                     examples=examples,
                     allow_flagging="never",
                     cache_examples=False)

iface.launch(debug=True, enable_queue=False)

上面的代码忽略了一些模型推理的细节,主要关注渲染对应的结果就是inputs和outputs。可知,

  • inputs和outputs都是可以多个,Gradio根据类型展示相应的组件
  • 其中:inputs是gr.Image图像,对应的处理函数的参数为文件路径type="filepath"
  • 其中:outputs有三个输出(分布是图片,一个3d图片,一个是文件),这里的三个输出要对应处理函数的三个放回。三个输出会对应三个展示渲染,两个图片和一个文件下载
  • 另外一个从展示结果看,最下面的位置有一个内部案例的列表 通过examples=examples参数,进行展示渲染,这是非常有用的,用来展示模型的最佳效果图。

Gradio:快速构建你的webApp_AI_03

更多的组件使用详见API

另外,可以通过.launch(share=True)来分享功能,这个功能可以生成一个域名,可以在外部直接访问。

4. 总结

本文简单分享了通过python库Gradio快速构建webApp的过程,总结如下:

  • Gradio的本质是封装html+css+js等组件的python库
  • Gradio最佳场景为:展示机器学习的推理效果(可交互)
  • gr.Interface来渲染效果,注意inputs和outputs就是待渲染的内容
  • 记住详细组件API:https://gradio.app/docs/

标签:gr,python,outputs,Gradio,构建,import,webApp,image
From: https://blog.51cto.com/u_16513038/9203860

相关文章

  • 从0开始使用vue-cli构建Vue3项目
    一、环境检查1、环境是否正常#查询Node版本node-v#查询vue版本npminfovue#查询vue-cli版本vue-V2、如果没有安装vue-cli,可以执行下方命令安装vue-cli最新版本npminstall-g@vue/cli如果是旧版本,可以执行下方命令卸载旧版本,然后再安装新版本的脚手架npmuninstallv......
  • 构建之法阅读笔记4
    继续阅读《构建之法》,我越来越发现自己真的这么幸运,在上学的途中就可以得到这么一本优秀的书本,并且我们的老师特以这本书作为教材让我不仅可以在自己的感想之外得到更多的见解,而且在这期间可以接触到这么一种比较小型的实践,例如我们的软件团队、我们的博客实践记录着我们的足迹,假......
  • Vite构建基本配置
    通过vite.config.js暴露出defineConfig函数实现构造,vite会读取defineConfig返回的配置对象,配置对象需要自行编写defineConfig该函数是vite工具助手函数,用来读取构建配置,其返回一个配置参数对象通过查看源码得知,vite配置有以下可选非必要内容,常用了内容一般从root到build//读......
  • ShowMeBug X AfterShip | 构建高效招聘体系,助推企业人才战略发展
    ShowMeBug与AfterShip成功完成签约,借助ShowMeBug在技术招聘上的赋能,强化企业技术招聘的出题、笔试、面试等各个环节,高质量打造技术驱动的招聘团队,完善适配企业发展的技术人才体系。AfterShip通过使用ShowMeBug丰富的岗位题库来进行技术人才测评,其中最核心的实战工程题型还能......
  • gradio代码案例+效果图片
    直接上代码:importgradioasgrimportnumpyasnpimporttorchfromPILimportImagefromram.modelsimportram_plusfromramimportinference_ramasinferencefromramimportget_transformimporttime#加载模型m_start=time.time()device=torch.device......
  • 如何构建一个 NodeJS 影院微服务并使用 Docker 部署
    如何构建一个NodeJS影院微服务并使用Docker部署前言如何构建一个NodeJS影院微服务并使用Docker部署。在这个系列中,将构建一个NodeJS微服务,并使用DockerSwarm集群进行部署。以下是将要使用的工具:NodeJS版本7.2.0MongoDB3.4.1DockerforMac1.12.6在尝试......
  • 如何构建适合自己的交易系统
    交易者若想在股票投资中长期稳定地获胜,必须成功地解决两大难题:①如何在高度随机的价格波动中寻找到非随机性的部分。②如何有效地控制自身的心理弱点,使之不致影响自己的理性决策。想要做到这两点,你需要建立一套稳定的交易体系来让交易有章法可依,一个优秀的交易系统可以帮助交易者......
  • 构建数字化美食未来:深入了解连锁餐饮系统的技术实现
    在当今数字化时代,连锁餐饮系统的设计与开发已成为餐饮业成功经营的重要一环。本文将深入研究连锁餐饮系统的技术实现,结合代码演示,为技术开发者和餐饮业者提供深刻的理解。1.技术选型与系统架构在开始设计开发前,首先要考虑选择合适的技术栈和系统架构。以下是一个简单的系统架构示......
  • nuxt构建失败:if (codePoint 》= 0x3_00 && codePoint (= 0x3_6F) { SyntaxError: In
     错误消息指的是在Node.js中使用了数字分隔符,12.8.1之前的Node版本不支持这种做法。0x3_00此处使用数字分隔符_。如果没有它,符号看起来就像0x300。有关支持此功能的Node.js版本的列表,请参阅https://node.green/#ES2021-features--numeric-separators。需要将node:10-alpin......
  • 使用CLIP和LLM构建多模态RAG系统
    使用CLIP和LLM构建多模态RAG系统在本文中我们将探讨使用开源大型语言多模态模型(LargeLanguageMulti-Modal)构建检索增强生成(RAG)系统。本文的重点是在不依赖LangChain或LLlamaindex的情况下实现这一目标,这样可以避免更多的框架依赖。什么是RAG在人工智能领域,检索增......