python小知识-Gradio:快速构建你的webApp

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

Gradio:快速构建你的webApp

1. 什么是Gradio

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

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

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

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

streamlit之前我有介绍过,今天要分享的是Gradio, 提供的功能和streamlit类似,你只要会python就可以快速构建一个webApp。
md-2022-12-29-17-41-32.png

从上图可知,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()`

md-2022-12-29-17-59-06.png

上面的代码就是简单一个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元素

3. 组件介绍

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

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

md-2022-12-29-18-29-52.png


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参数,进行展示渲染,这是非常有用的,用来展示模型的最佳效果图。

更多的组件使用详见API

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

4. 总结

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

  • Gradio的本质是封装html+css+js等组件的python库
  • Gradio最佳场景为:展示机器学习的推理效果(可交互)
  • gr.Interface来渲染效果,注意inputs和outputs就是待渲染的内容
  • 记住详细组件API:https://gradio.app/docs/
目录
相关文章
|
24天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
Python 数据分析:从零开始构建你的数据科学项目
【10月更文挑战第9天】Python 数据分析:从零开始构建你的数据科学项目
59 2
|
6天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
26 3
|
1月前
|
弹性计算 数据管理 数据库
从零开始构建员工管理系统:Python与SQLite3的完美结合
本文介绍如何使用Python和Tkinter构建一个图形界面的员工管理系统(EMS)。系统包括数据库设计、核心功能实现和图形用户界面创建。主要功能有查询、添加、删除员工信息及统计员工数量。通过本文,你将学会如何结合SQLite数据库进行数据管理,并使用Tkinter创建友好的用户界面。
51 2
从零开始构建员工管理系统:Python与SQLite3的完美结合
|
18天前
|
存储 API 数据库
使用Python和Flask构建简单的RESTful API
使用Python和Flask构建简单的RESTful API
|
2月前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
28天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
利用Python和TensorFlow构建简单神经网络进行图像分类
利用Python和TensorFlow构建简单神经网络进行图像分类
53 3
|
28天前
|
开发框架 前端开发 JavaScript
利用Python和Flask构建轻量级Web应用的实战指南
利用Python和Flask构建轻量级Web应用的实战指南
69 2
|
28天前
|
机器学习/深度学习 JSON API
Python编程实战:构建一个简单的天气预报应用
Python编程实战:构建一个简单的天气预报应用
42 1
|
28天前
|
机器学习/深度学习 数据采集 搜索推荐
利用Python和机器学习构建电影推荐系统
利用Python和机器学习构建电影推荐系统
52 1