Gradio机器学习模型快速部署工具应用分享
作者:Livingbody 发布时间:2023-06-30 01:33:33
1.嵌入 IFrame
(/assets/img/anchor.svg)]()](https://gradio.app/sharing-your-app/#embedding-with-iframes)
要改为嵌入 IFrame(例如,如果您无法将 javascript 添加到您的网站),请添加此元素:
<iframe src="https://$your_space_host.hf.space"></iframe>
同样,您可以找到src=
空间嵌入 URL 的属性,您可以在“嵌入此空间”按钮中找到它。
您还需要height
手动添加一个固定的以及其他常规的 iframe 属性。例如:
<iframe src="https://abidlabs-pytorch-image-classifier.hf.space" frameBorder="0" height="900"></iframe>
2.API页面
渐变/你好世界 使用 Gradio构建。 托管在 空间
如果您单击并打开上面的空间,您将在应用程序的页脚中看到一个“通过 API 使用”链接。
这是记录用户可用于查询函数的 REST API 的页面Interface
。Blocks
应用程序也可以生成一个 API 页面,尽管 API 必须为每个事件 * 显式命名,例如
btn.click(add, [num1, num2], output, api_name="addition")
这会将端点记录/api/addition/
到自动生成的 API 页面。
注意:对于启用队列的Gradio 应用程序,如果用户向您的 API 端点发出 POST 请求,则可以绕过队列。要禁用此行为,请api_open=False
在queue()
方法中设置。
3.验证
您可能希望在您的应用程序前面放置一个身份验证页面,以限制谁可以打开您的应用程序。通过方法auth=
中的关键字参数launch()
,您可以提供一个包含用户名和密码的元组,或者一个可接受的用户名/密码元组列表;下面是一个为名为“admin”的单个用户提供基于密码的身份验证的示例:
demo.launch(auth=("admin", "pass1234"))
对于更复杂的身份验证处理,您甚至可以传递一个函数,该函数将用户名和密码作为参数,并返回 True 以允许身份验证,否则返回 False。这可用于向 3rd 方身份验证服务发出请求等。
下面是一个函数示例,它接受用户名和密码相同的任何登录:
def same_auth(username, password):
return username == password
demo.launch(auth=same_auth)
为使身份验证正常工作,必须在您的浏览器中启用第三方 cookie。默认情况下,Safari、Chrome 隐身模式不是这种情况。
4.直接访问网络请求
当用户对您的应用做出预测时,您可能需要底层网络请求,以便获取请求标头(例如用于高级身份验证)、记录客户端的 IP 地址或其他原因。Gradio 以类似于 FastAPI 的方式支持这一点:只需添加一个类型提示为的函数参数gr.Request
,Gradio 就会将网络请求作为该参数传入。这是一个例子:
import gradio as gr
def echo(name, request: gr.Request):
if request:
print("Request headers dictionary:", request.headers)
print("IP address:", request.client.host)
return name
io = gr.Interface(echo, "textbox", "textbox").launch()
注意:如果您的函数是直接调用而不是通过 UI 调用(例如,当示例被缓存时会发生这种情况),那么request
将是None
. 您应该明确处理这种情况,以确保您的应用不会抛出任何错误。这就是为什么我们有明确的检查if request
。
5.在另一个 FastAPI 应用程序中安装[![图片转存失败,建议将图片保存下来直接上传
(/assets/img/anchor.svg)]()](https://gradio.app/sharing-your-app/#mounting-within-another-fastapi-app)
在某些情况下,您可能有一个现有的 FastAPI 应用程序,并且您想要为 Gradio 演示添加一个路径。您可以使用 轻松地做到这一点gradio.mount_gradio_app()
。
这是一个完整的例子:
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.
请注意,此方法还允许您在自定义路径上运行 Gradio 应用程序(http://localhost:8000/gradio
在上面的示例中)。
6.安全和文件访问
与他人共享您的 Gradio 应用程序(通过将其托管在 Spaces、您自己的服务器上或通过临时共享链接)会将主机上的某些文件**公开给您的 Gradio 应用程序的用户。**这样做是为了让 Gradio 应用程序能够显示由 Gradio 创建或由您的预测功能创建的输出文件。
特别是,Gradio 应用程序授予用户访问三种文件的权限:
Gradio 脚本启动所在的同一文件夹(或子目录)中的文件。例如,如果您的 gradio 脚本的路径是
/home/usr/scripts/project/app.py
并且您从 启动它/home/usr/scripts/project/
,那么您共享的 Gradio 应用程序的用户将能够访问其中的任何文件/home/usr/scripts/project/
。这是必需的,以便您可以轻松地在 Gradio 应用程序中引用这些文件。Gradio 创建的临时文件。这些文件是由 Gradio 创建的,作为运行预测功能的一部分。例如,如果你的预测函数返回一个视频文件,那么 Gradio 会将该视频保存到一个临时文件中,然后将临时文件的路径发送到前端。
file_directories
您通过中的参数明确允许的文件launch()
。在某些情况下,您可能希望引用文件系统中的其他文件。该file_directories
参数允许您传入您希望提供访问权限的其他目录列表。(默认情况下,没有其他文件目录)。
用户不应该能够访问主机上的其他任意路径。
来源:https://juejin.cn/post/7217135786202267708


猜你喜欢
- 实际需求中,需要对某张表某字段里面的内容进行批量替换,普通的思考流程如下:SELECT出来str_replace替换UPDATE写入实际这样
- 前言MySQL提供了众多功能强大、方便易用的函数。使用这些函数可以极大地提高用户对数据库的管理效率。MySQL中的函数包括数学函数、字符串函
- 以下内容给大家c#连接数据库的方法的相关介绍,本文非常具有参考借鉴价值,具体详情如下所示。ASP.NET连接数据库的技术叫ADO.NET,它
- selenium操作chrome浏览器需要有ChromeDriver驱动来协助。webdriver中关浏览器关闭有两个方法,一个叫quit,
- 看过 Vue 源码的同学可以知道,<keep-alive>、<transition>、<transition-
- 前言本文的内容是总结一些MySQL的常见使用技巧,以供没有DBA的团队参考。如无特殊说明,存储引擎以InnoDB为准。MySQL的特点了解M
- 你知道(X)HTML中最多余的标签中是什么吗?在我看来就是这个<a>标签,不错,就是每个网站使用最多的超级链接标签<a&g
- Jquery中的一些东西学习一下子,补充完善一下,毕竟有些时候没有使用到这个方式很有用,在使用bootstrap table的时候,选择当前
- LRULRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访
- MySQL如何查看元数据锁阻塞在哪里操作步骤:1、session 1 执行: start transaction;  
- 介绍此教程为我的数篇文章中的一个重点。主题是魔术方法。 什么是魔术方法?他们是面向对象的Python的一切。他们是可以给你的类增加"
- 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。列表的数据项可以是不同的类型,可以是字符串,可以是数字类型,甚至
- 本文为大家分享了mysql 8.0.16 压缩包安装配置方法,供大家参考,具体内容如下运行环境:Windows 10 x641、下载zip安
- 问题描述:我有一个这样的数据集叫test_result_test.txt,大概几百上千行,两行数据之间隔一个空行。N:505904X:0.9
- 蜗牛很慢。蜗牛快递会怎样?答案是:当然也会很慢。但是蜗牛尽了他的全力,为了它的兔子朋友,以生命在奔跑。每天都是24个小时,快的只是速度,却不
- 刚开始涉及到图像处理的时候,在opencv等库中总会看到mask这么一个参数,非常的不理解,在查询一系列资料之后,写下它们,以供翻阅。什么是
- 难道真的要我破解一个么?算了,正好试试我的Python水平。 python版 #coding: gbk import httplib, ur
- 本文实例讲述了Python实现的序列化和反序列化二叉树算法。分享给大家供大家参考,具体如下:题目描述请实现两个函数,分别用来序列化和反序列化
- 一、功能目标用户输入一个类似 1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568
- 关于《回访确认》这件事情,在我blog和5Gme的回复里普遍出现这么几个疑问:1、下了订单却放弃支付的心理因素是什么?2、回访电话可以促进订