【解决】如何在远程Jupyterlab环境中使用Gradio时自定义分享链接地址,通过本地浏览器访问结果的web页面

问题场景

在使用kaggle, colab, aistutio这些平台工具时,使用的都是远程的Jupyterlab环境。
当在这样的环境里使用Gradio模块时,默认会弹出一个localhost的端口,但这个localhost只是在服务器端的。此时,如果用户想去体验创建好的AI应用时(例如图片应用),添加图片时,应用默认会打开服务器端的文件浏览器去查找图片(如果远程环境支持的话,但通常基于安全性考虑都是是不支持的)。对于用户来说,更方便的做法是打开本地电脑上的图片来进行处理。因此,用户只能将本地图片传到服务器端再处理,这就造成了一定的麻烦。
一个通常的解决办法就是,在app.launch()里传入share=True参数,来获取一个public_url,通过访问这个公开的链接,就可以上传本地的照片啦。可是,这个public_url是Gradio官方做了代理转发产生的,在国内的用户经常会遇到网络连接不稳定,这个时候会没办法访问。因此,如果能自定义pubilc_url就可以很好的解决这个问题。

解决办法

通过设置app的root 和 share_url属性来自定义转发代理和public_url

代码示例

import gradio as gr
import os

def to_black(image):
    output = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    return output

app = gr.Interface(fn=to_black, inputs=gr.Image(shape=(200, 200)), outputs="image")

# 服务端口
port=5005

# 代理转发
app.root = "/" + os.environ.get("JUPYTER_BASE_URL")+"/http-proxy/"+ str(port) #因为是在Jupyterlab里运行,因此加上JUPYTER_BASE_URL
app.share_url ="https://xxx.com" + app.root + "/" #https://xxx.com 是Jupyterlab环境所在的域名

gr.close_all() #关闭所有正在运行的端口
app.launch(share=True,server_port=port)

运行结果

Running on local URL:  http://127.0.0.1:5005
Running on public URL: https://xxx.com/ai-lab-v1-21i485e61b/http-proxy/5005/

This share link expires in 72 hours. For free permanent hosting and GPU upgrades (NEW!), check out Spaces: https://huggingface.co/spaces

在这里插入图片描述

说明

可以看出,分享后的public URL 是一个自定义的链接,而不是Gradio官方的那个域名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值