Gradio的web界面演示与交互机器学习模型,安装和使用《1》https://blog.csdn.net/weixin_41896770/article/details/130540360
Gradio的web界面演示与交互机器学习模型,主要特征《2》https://blog.csdn.net/weixin_41896770/article/details/130556692
前面2篇文章将Gradio的基本操作讲解完,里面有提到demo.launch(share=True)指定参数share=True就可以生成公共链接进行分享,如果没有参数就是本地链接,想要分享出去,就需要端口转发之类的操作,这里的公共链接有效时间只有72小时,那有没有一种长期的永久有效的链接呢?这节讲解在分享你的应用过程中遇到的一些相关知识。
1、Hugging Face托管
Hugging Face是全球各大AI企业训练ML模型的分享平台,我们进入站点 https://huggingface.co/ 可以先体验也可以先注册。
登录之后我们点击头像,下拉列表中点击“+ New Space”将来到创建新的空间页面,步骤跟github很类似,熟悉github的直接上手使用。Hugging Face中的一个聊天功能很不错,推荐使用,对于不想找梯子访问ChatGPT4的朋友来说,这个是免费的不需要翻墙的替代性产品:https://huggingface.co/chat/
当然这里如果是2vCPU,16G大小的是免费的,其余的CPU以及所有的GPU,都需要按小时付费!
创建好了空间,就会有提示方法,我们这里创建一个文件app.py,用前面章节的一个简单例子来测试下:
import gradio as gr
def greet(name):
return "你好," + name + "!"
demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch()
测试如图:
这样所有人都可以进行永久性的访问了,而不需要像前面介绍的那种有72小时的限制,且需要自己的服务一直运行才行。
2、嵌入到网页
除了上面的链接分享之外,还可以在WEB页面进行嵌入
两种方法,一种是js调用;另一种是iframe框架嵌入
我们点击最右边的三个竖点,弹出列表中,点击“Embed this Space”
js方法:
<script
type="module"
src="https://gradio.s3-us-west-2.amazonaws.com/3.28.3/gradio.js"
></script>
<gradio-app src="https://chyichin-aitest.hf.space"></gradio-app>
iframe方法:
<iframe
src="https://chyichin-aitest.hf.space"
frameborder="0"
width="850"
height="450"
></iframe>
还可以指定空间来嵌入:
<script
type="module"
src="https://gradio.s3-us-west-2.amazonaws.com/3.28.3/gradio.js"
></script>
<gradio-app space="chyichin/aitest" eager="true" initial_height="0px"></gradio-app>
这种方法还能够方便的让用户访问到你的Hugging Face空间(底部有链接指向你的空间)
3、验证身份
如果只想让限定身份的人来测试的话,可以使用验证身份的操作,很简单,就是在launch函数里面加个参数auth=("用户名","密码")
demo.launch(auth=("admin", "pass1234"))
除了这种简单指定用户名和密码之外,还可以写个函数来判定验证的身份,比如:
def same_auth(username, password):
return username == password
demo.launch(auth=same_auth)
用户名和密码一样就可以登录,当然这只是个范例,这个可以自己去定义,另外需要注意的是,这个需要在打开Cookies的环境才可以,比如是无痕模式的访问就没有用了。
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,request.client.host,request.headers
io = gr.Interface(echo, "textbox", ["textbox","textbox","textbox"]).launch()
测试如图: