【在FastAPI应用中嵌入Gradio界面的实现方法】如何在有一个Fastapi应用的基础上,新加一个gradio程序

官网教程:https://www.gradio.app/guides/sharing-your-app#mounting-within-another-fast-api-app

实践:

import gradio as gr
from fastapi import FastAPI
from starlette.middleware.cors import CORSMiddleware

CUSTOM_PATH = "/gradio"

app = FastAPI()
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)


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


# 定义当按钮被点击时执行的函数
def greet(text):
    return f"Hello, {text}!"


def create_gradio():
    # 使用 Blocks API 创建界面
    with gr.Blocks() as demo:
        gr.Markdown("### Enter your name to be greeted")
        # 创建一个文本输入框
        name_input = gr.Textbox(label="Your name")
        # 创建一个按钮
        greet_button = gr.Button("Greet")
        # 创建一个输出区域
        output = gr.Textbox(label="Greeting")

        # 当按钮被点击时,调用greet函数,并将结果显示在output中
        greet_button.click(fn=greet, inputs=name_input, outputs=output)

    return demo


if __name__ == '__main__':
    import uvicorn

    app = gr.mount_gradio_app(app, create_gradio(), path=CUSTOM_PATH)
    uvicorn.run(app)

在这里插入图片描述

介绍:
在Web应用开发中,将不同的工具和库结合起来实现更丰富的功能是一种常见的需求。本文将介绍如何在基于FastAPI框架构建的Web应用中嵌入Gradio界面,以实现用户友好的交互体验。

Gradio是一个强大的Python库,可用于快速构建机器学习模型的交互式界面。FastAPI则是一个快速(高性能)的web框架,用于构建API。将它们结合起来,可以实现更复杂和功能强大的Web应用程序。

步骤:

  1. 导入所需的库:
    在代码中首先导入所需的库,包括Gradio、FastAPI以及相关的中间件。

  2. 设置FastAPI应用:
    创建FastAPI应用实例,并配置跨域资源共享(CORS)中间件,以允许不同源之间的通信。

  3. 定义主页路由:
    创建一个简单的路由处理函数,用于主页请求的处理,并返回一个简单的消息,表示主页已成功加载。

  4. 定义Gradio界面:
    创建一个函数,用于定义Gradio界面。在这个函数中,使用Gradio的Blocks API创建界面元素,如文本框、按钮等,并定义按钮点击事件的处理函数。

  5. 将Gradio界面挂载到FastAPI应用中:
    使用Gradio提供的mount_gradio_app函数,将Gradio界面挂载到FastAPI应用中,并指定挂载路径。

  6. 启动应用:
    使用uvicorn或其他HTTP服务器启动FastAPI应用,以便用户可以访问并与Gradio界面交互。

代码优化:
在代码中已经实现了功能,但可以对其进行一些优化,以提高可读性和可维护性。例如,可以将路由处理函数和Gradio界面定义函数分离出来,使代码结构更清晰;可以添加注释来解释每个函数的作用和参数;可以使用更具描述性的变量名。

结论:
通过将Gradio界面嵌入到FastAPI应用中,我们可以轻松地实现一个交互式的Web应用程序,为用户提供友好的界面来与机器学习模型进行交互。这种组合使用不同库和工具的方法,可以为开发者提供更多的灵活性和创造性,以满足不同场景下的需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/489643.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java八股文(SpringCloud)

Java八股文のSpringCloud SpringCloud SpringCloud 什么是Spring Cloud? Spring Cloud是一个用于构建分布式系统的开发工具箱,它基于Spring Boot框架,提供了一系列的组件和工具,用于帮助开发者快速搭建和管理分布式系统中的各种常…

javaSwing愤怒的小鸟游戏

一、简介 游戏名称是“愤怒的小鸟”,英文称为“AngryBird”。 “愤怒的小鸟”是著名游戏公司Rovio偶然间开发出来的益智游戏,从2009年12月上市到iOS。,讲述了鸟类和猪因为猪偷鸟蛋反生的一系列故事。游戏的类型版本是横向版本的水平视角&…

Warning logs 2024-03-23

给旧的笔记本安装ubuntu系统,并实现ssh远程连接 1、下载ubuntu系统 ubuntu下载链接 选择带桌面版本 2、准备U盘 3、使用UltraISO制作启动盘 使用UltraISO,打开刚才下载的ubuntu**.iso文件 4、进入BIOS,选择U盘启动 5、Warning 1 invali…

实时数仓项目《二》-利用chatgpt prompt完成基础维表的创建

系列文章: 实时数仓项目《一》-实时数仓架构-CSDN博客 目录 5. ods->dwd:维表关联方案及维表加工、导入hbase 5.1 维表关联方案 5.2 退维后结果去向 5.3 创建维表:基础业务库表数据同步到hbase 5.3.1 cdc 读取mysql数据,生成临时映射…

C/C++笔记-make编译时需要注意的问题(编译可执行程序时链接的so出现未定义的引用)

背景 环境是这样的,一个复杂的C项目,本来在A机器上能编译过去的,但放到B机器上编译可执行程序时链接的so出现未定义的引用。这就有点莫名奇妙了。 原因 我这边造成这个现象的原因有以下几点: ① 在makefile中所有的-I&#xff…

【LeetCode热题100】230. 二叉搜索树中第K小的元素(二叉树)

一.题目要求 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。 二.题目难度 中等 三.输入样例 示例 1: 输入:root [3,1,4,null,2], k 1…

newOJ 1099: 输油管道问题

目录 题目链接: 思路: 代码: 题目链接: P1099 - 输油管道问题 - New Online Judge (ecustacm.cn) 思路: 因为主输油管道是由东向西的, 而每口油井要有一条输油管道和主输油管道连接(或南或北…

[DDD] ValueObject的一种设计落地及应用

目录 前言一、ValueObject二、设计2.1 接口2.2 单一值ValueObject2.3 单一字符串ValueObject 三、实现3.1 示例3.1.1 PhoneNumber3.1.2 SocialCreditCode 四、使用4.1 异常处理4.2 Json 反/序列化4.2.1 请求体4.2.2 HTTP接口4.2.3 用例 4.3 JPA/MyBatis4.3.1 Converter或TypeHa…

Harmony(鸿蒙)Stage模型综述

设计思想 ​Stage模型的设计,是为了提供给开发者一个更好的开发方式,更好的适用于多设备、分布式场景。 ​Stage模型的设计思想如下图所示。 ​Stage模型的设计基于如下三个出发点: 应用进程的有序管理 随着设备的内存越来越大&#xff0…

SM4加密是什么?SM4算法在国密HTTPS协议中的作用

SM4加密算法是一种分组密码标准,由国家密码管理局于2012年3月21日发布,相关标准为“GM/T 0002-2012《SM4分组密码算法》,与国际上广泛使用的AES等算法类似,SM4同算法样用于保护数据的机密性,确保信息在传输过程中不被未…

罗德与施瓦茨 RS®FSV3000 信号与频谱分析仪

R&SFSV3000 信号与频谱分析仪 罗德与施瓦茨 R&SFSV3000 信号与频谱分析仪一键即可测量,可以通过基于事件的操作捕获信号,并使用 SCPI 记录器轻松编写脚本程序,从而快速设置复杂测量。分析仪还具有出色的测量速度,可实…

学习鸿蒙基础(8)

一、BuilderParam装饰器 当开发者创建了自定义组件,并想对该组件添加特定功能时,例如在自定义组件中添加一个点击跳转操作。若直接在组件内嵌入事件方法,将会导致所有引入该自定义组件的地方均增加了该功能。为解决此问题,ArkUI引…

关于「技术开发技能」课程

本课程分为三个部分,带您了解如何使用大模型平台、如何训练与部署大模型及生成式AI产品应用与开发,您将能了解各类服务的优势、功能、典型使用案例、技术概念和成本。 学习任选的两个课程模块,并通过测验者,将授予「技术开发技能…

【C++】哈希应用之布隆过滤器

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.布隆过滤器的提出…

vue基础——java程序员版(vue路由)

1、引入路由 在控制台执行vue ui,在插件市场里可以找到vue-router并导入。 ​ 一般情况下,vue会自动在main,js中引入vue-router,如下: import Vue from vue import App from ./App.vue import ./plugins/element.js import rou…

springboot整合aop实现自定义注解-方法运行异常重试demo

1.依赖引入 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>2.自定义注解 import java.lang.annotation.ElementType; import java.lang.annotation.Retentio…

简易电路设计,PW1605芯片实现24V/30V/48V限流过压保护功能

一般描述 PW1605 是一款电流限制开关&#xff0c;具有可编程输入过压保护和输出电压箝位功能。集成保护 N 沟道 FET 具有极低的 RDS&#xff08;ON&#xff09; 功能&#xff0c;PW1605有助于降低正常工作期间的功率损耗。可编程软启动时间控制启动期间输出电压的压摆率。独立的…

【LV15 day14 中断处理:按键驱动程序编写】

一、什么是中断 一种硬件上的通知机制&#xff0c;用来通知CPU发生了某种需要立即处理的事件 分为&#xff1a; 内部中断 CPU执行程序的过程中&#xff0c;发生的一些硬件出错、运算出错事件&#xff08;如分母为0、溢出等等&#xff09;&#xff0c;不可屏蔽外部中断 外设发…

一、SpringBoot3 介绍

本章概要 SpringBoot3 简介系统要求快速入门入门总结 1.1 SpringBoot3 简介 此处使用 SpringBoot 版本&#xff1a;3.0.5 https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html 无论使用XML、注解、Java配置类还是他们的混合用法&#xff0…

C语言学习--字符串和整型的转换

目录 整型→字符串 方法1&#xff1a;利用‘0’将单个数字转字符 方法2&#xff1a;利用sprintf函数 方法3&#xff1a;利用itoa函数 字符串→整型 方法1&#xff1a;利用-‘0’直接转换 方法2&#xff1a;利用atoi函数 整型→字符串 整形数据变成字符串&#xff0c;最…