29.4K star! 仅需几行代码快速构建机器学习 Web 应用项目,无需前端技能!

4k,star,web · 浏览次数 : 12

小编点评

**Gradio 库简介** Gradio 是一个开源 Python 库,用于创建交互式机器学习和数据科学应用和演示。它提供了一个简化的 API,允许用户通过构建用户界面来展示模型,而无需编写复杂的代码。 **主要功能:** * 展示和测试机器学习模型 * 生成外网地址 * 快速部署模型 * 交互式调试模型 **安装和使用:** 1. 使用 `pip` 安装:`pip install gradio` 2. 示例代码: ```python from gradio import gr # 创建一个 Interface 对象 demo = gr.Interface( fn=greet, inputs=["text", "slider"], outputs=["text"], ) # 启动 Demo demo.launch() ``` 3. 启动应用程序:`uvicorn run:app` **示例:** 1. **牛刀小试**示例展示了如何创建一个简单的模型界面。 2. **生成外网地址**示例展示了如何获取外网 IP 地址。 3. **和 FastAPI 框架集成**示例展示了如何将 Gradio 与 FastAPI 框架集成。 **结论:** Gradio 是一个非常有价值的库,可以帮助开发者快速创建交互式机器学习应用。其简单易用且功能丰富,是机器学习开发的理想选择。

正文

大家好,我是狂师!

今天给大家推荐一款开源的Python库:Gradio!

Gradio是一个开源的Python库,用于创建机器学习和数据科学的交互式应用和演示。

项目地址:

https://github.com/gradio-app/gradio

1、项目介绍

Gradio旨在简化展示和测试机器学习模型的过程,它允许用户通过构建漂亮的界面来展示其模型,而无需编写复杂的前端代码。通过Gradio,可以快速地为模型创建Web界面,并支持多种类型的输入和输出,如文本、图像和音频。这个库非常适合于快速迭代开发和用户反馈获取,以及在教学和展示中与观众互动。

通过提供简单的API,Gradio可以在几行代码中将任何Python函数转换为一个Web应用程序,无需前端开发经验。

2、工具用途

Gradio的主要用途包括:

  • 展示和测试机器学习模型:通过创建具有输入字段(如文本输入或图像上传)和输出字段(如模型预测结果)的界面,用户可以直接与模型进行交互,从而测试和验证模型的性能。
  • 演示机器学习模型:Gradio可以帮助开发者向客户、合作者和学生展示机器学习模型的功能和应用场景。通过创建简单漂亮的用户界面,可以更好地展示模型的预测效果和可视化结果。
  • 快速部署模型:通过自动共享链接,Gradio可以快速部署机器学习模型,并使其在互联网上可用。这使得开发者可以轻松地与团队成员、合作伙伴或用户共享模型,并收集他们对模型性能的反馈。
  • 交互式调试模型:在开发过程中,Gradio提供了内置的操作和解释工具,允许开发者交互式地调试机器学习模型。

3、安装、使用

可以使用pip进行安装,安装之前要确保python版本大于 3.8。

pip install gradio

示例1: 牛刀小试

import gradio as gr

def greet(name, intensity):
    return "Hello " * intensity + name + "!"

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

demo.launch()

运行之后,在浏览器打开http://localhost:7860/即可访问web程序

示例2:生成外网地址

import gradio as gr

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

demo = gr.Interface(fn=greet, inputs="textbox", outputs="textbox")
    
demo.launch(share=True)  # Share your demo with just 1 extra parameter 🚀

运行时候,就会自动生成一个URL链接,类似https://a23dsf231adb.gradio.live,可以将这个链接发给别人进行访问使用。当然你也可以选择将应用部署到云服务器。

示例3: 和FastAPI框架集成

from fastapi import FastAPI
import gradio as gr

CUSTOM_PATH = "/gradio"

app = FastAPI()


@app.get("/")
def read_main():
    return {"message": "This is your main app"}


io = gr.Interface(lambda x: "Hello, " + x + "!", "textbox", "textbox")
app = gr.mount_gradio_app(app, io, path=CUSTOM_PATH)


# Run this from the terminal as you would normally start a FastAPI app: `uvicorn run:app`
# and navigate to http://localhost:8000/gradio in your browser.

示例4: 一个更为完整的示例

import os
from authlib.integrations.starlette_client import OAuth, OAuthError
from fastapi import FastAPI, Depends, Request
from starlette.config import Config
from starlette.responses import RedirectResponse
from starlette.middleware.sessions import SessionMiddleware
import uvicorn
import gradio as gr

app = FastAPI()

# Replace these with your own OAuth settings
GOOGLE_CLIENT_ID = "..."
GOOGLE_CLIENT_SECRET = "..."
SECRET_KEY = "..."

config_data = {'GOOGLE_CLIENT_ID': GOOGLE_CLIENT_ID, 'GOOGLE_CLIENT_SECRET': GOOGLE_CLIENT_SECRET}
starlette_config = Config(environ=config_data)
oauth = OAuth(starlette_config)
oauth.register(
    name='google',
    server_metadata_url='https://accounts.google.com/.well-known/openid-configuration',
    client_kwargs={'scope': 'openid email profile'},
)

SECRET_KEY = os.environ.get('SECRET_KEY') or "a_very_secret_key"
app.add_middleware(SessionMiddleware, secret_key=SECRET_KEY)

# Dependency to get the current user
def get_user(request: Request):
    user = request.session.get('user')
    if user:
        return user['name']
    return None

@app.get('/')
def public(user: dict = Depends(get_user)):
    if user:
        return RedirectResponse(url='/gradio')
    else:
        return RedirectResponse(url='/login-demo')

@app.route('/logout')
async def logout(request: Request):
    request.session.pop('user', None)
    return RedirectResponse(url='/')

@app.route('/login')
async def login(request: Request):
    redirect_uri = request.url_for('auth')
    # If your app is running on https, you should ensure that the
    # `redirect_uri` is https, e.g. uncomment the following lines:
    # 
    # from urllib.parse import urlparse, urlunparse
    # redirect_uri = urlunparse(urlparse(str(redirect_uri))._replace(scheme='https'))
    return await oauth.google.authorize_redirect(request, redirect_uri)

@app.route('/auth')
async def auth(request: Request):
    try:
        access_token = await oauth.google.authorize_access_token(request)
    except OAuthError:
        return RedirectResponse(url='/')
    request.session['user'] = dict(access_token)["userinfo"]
    return RedirectResponse(url='/')

with gr.Blocks() as login_demo:
    gr.Button("Login", link="/login")

app = gr.mount_gradio_app(app, login_demo, path="/login-demo")

def greet(request: gr.Request):
    return f"Welcome to Gradio, {request.username}"

with gr.Blocks() as main_demo:
    m = gr.Markdown("Welcome to Gradio!")
    gr.Button("Logout", link="/logout")
    main_demo.load(greet, None, m)

app = gr.mount_gradio_app(app, main_demo, path="/gradio", auth_dependency=get_user)

if __name__ == '__main__':
    uvicorn.run(app)

4、小结

Gradio通过提供一个简洁的API和直观的界面,降低了创建交互式机器学习应用的技术门槛,特别适合入门级开发者和初学者使用。它的设计理念在于让开发者能够专注于模型的功能和性能,而不是耗费大量时间在界面设计和代码复杂化上。因此,无论是教学、研究还是商业演示,Gradio都是一个非常有价值的工具。

总的来说,你可以不用,但是你不能不知道,脑海里多一个方案,在解题时就能多一种选择。

与29.4K star! 仅需几行代码快速构建机器学习 Web 应用项目,无需前端技能!相似的内容:

29.4K star! 仅需几行代码快速构建机器学习 Web 应用项目,无需前端技能!

大家好,我是狂师! 今天给大家推荐一款开源的Python库:Gradio! Gradio是一个开源的Python库,用于创建机器学习和数据科学的交互式应用和演示。 项目地址: https://github.com/gradio-app/gradio 1、项目介绍 Gradio旨在简化展示和测试机器学

基于Material Design风格开源、易用、强大的WPF UI控件库

前言 今天大姚给大家分享一款基于Material Design风格开源、免费(MIT License)、易于使用、强大的WPF UI控件库:MaterialDesignInXamlToolkit。 项目介绍 MaterialDesignInXamlToolkit 是一个开源、易于使用、强大的 WPF

【Android 逆向】【攻防世界】easy-apk

apk 安装到手机,随便输入点内容,提示错误 2. apk 拖入到jadx中看看 public class MainActivity extends AppCompatActivity { /* JADX INFO: Access modifiers changed from: protected

【Android 逆向】【攻防世界】黑客精神

1. apk 安装到手机,提示输入注册码 2. jadx打开apk MainActivity.java @Override // android.app.Activity public void onCreate(Bundle savedInstanceState) { String str2; s

使用unity构建射击小游戏

博客地址:https://www.cnblogs.com/zylyehuo/ 成果图 参考例程 www.manning.com/hocking 问题汇总 1、renderer.material 方法过时 换成使用 this.GetComponent() 参考网址: https://blog.csdn

IDEA的Ctrl+Enter补全代码失效

## 前景提示 * IDEA有个ctrl+enter可以补全代码的功能,但是,今天突然失效了,原来是这个问题. ## 修改配置 * 进入setting修改 ![](https://img2023.cnblogs.com/blog/994129/202307/994129-20230721164840

聊聊Spring IOC容器的注入方式

为什么要说这个? 对于Spring体系而言,我个人认为最重要的就是IOC容器,其次才是AOP、Context等模块;因为这些模块功能是或搭建或集成在IOC容器这个基础设施之上的。 直接基于Spring框架体系做开发时,可以通过常用的JavaConfig或XML方式将对象的生命周期及装配由容器原生的接

第137篇:重学ES6模块化

好家伙, 我原本以为学完模块化之后,就能非常顺利的完成我的项目分包, 然而并没有,这是非常重要的知识,而我没有学好 所以我决定重学一遍 本篇为《阮一峰 ECMAScript 6 (ES6) 标准入门教程 第三版》第23章"Module的语法"学习笔记 1.概述 历史上,JavaScript 一直没有

NodeJS 实战系列:模块设计与文件分类

我们从一个最简单的需求开始,来探索我们应该从哪些方面思考模块设计,以及如何将不同的文件分类。之所以说“思考”,是因为我在这篇文章里更多的是提供一类解决问题的范式,而非统一的标准答案,能够为你提供一丁点的启发就好

模板特化的多维度挖掘

假如我有一个需求,就是如果传入的参数是int类型,我就输出int类型,否则就输出T。很显然,根据模板的基础知识,我们可以这么写 template void f(T) { std::cout << "T\n"; } template <> void f(int) { std::co