实现功能:
使用 HuggingFace 开源模型库中的 XLabs-AI/flux-RealismLora 模型,实现文本生成图片。
问题描述:
调用模型 XLabs-AI/flux-RealismLora API 接口时,设置了代理一直连接不上。
错误描述:
requests.exceptions.ConnectionError:
HTTPSConnectionPool(host='api-inference.huggingface.co', port=443):
Max retries exceeded with url: /models/XLabs-AI/flux-RealismLora (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x0000023E3B232E08>:
Failed to establish a new connection: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。'))
通过curl工具测试,发现代理是没有问题的,图片数据返回成功。
curl -X POST https://api-inference.huggingface.co/models/XLabs-AI/flux-RealismLora \
-d '{"inputs": "Astronaut riding a horse"}' \
-H "Authorization: Bearer your_hugging_face_token" \
-x "http://your_proxy_ip:your_proxy_port" \
--output "./flux/output/test.png"
就想是不是 python 工具库 requests 的问题,经过查看requests方法源码和网上搜查资料发现是代理设置的问题。
原来的proxies定义是:
proxies = {
"http": "http://your_proxy_ip:your_proxy_port", # 目标地址是 HTTP 协议的使用这个代理
}
解决方法:
proxies = {
"http": "http://your_proxy_ip:your_proxy_port", # 目标地址是 HTTP 协议的使用这个代理
"https": "http://your_proxy_ip:your_proxy_port" # 目标地址是 HTTPS 协议的使用这个代理
}
完整代码
import requests
import uuid
from datetime import datetime
# curl -X POST https://api-inference.huggingface.co/models/XLabs-AI/flux-RealismLora \
# -d '{"inputs": "Astronaut riding a horse"}' \
# -H "Authorization: Bearer your_hugging_face_token" \
# -x "http://192.168.8.1:3128"
# --output "./output/test.png"
# 通过curl是可以的,但是python不行,不知道为什么
# 是 proxies 的设置的问题,之前只配置了 "http": "http://your_proxy_ip:your_proxy_port" 只会将 http 的请求通过代理转发,而 https 的请求不会通过代理转发
API_URL = "https://api-inference.huggingface.co/models/XLabs-AI/flux-RealismLora"
headers = {"Authorization": "Bearer your_hugging_face_token"}
proxies = {
"http": "http://your_proxy_ip:your_proxy_port", # 目标地址是 HTTP 协议的使用这个代理
"https": "http://your_proxy_ip:your_proxy_port" # 目标地址是 HTTPS 协议的使用这个代理
}
def query(payload):
response = requests.post(API_URL, headers=headers, json=payload, proxies=proxies, verify=False)
return response.content
image_bytes = query({
"inputs": "a cute dog in the garden",
})
# You can access the image with PIL.Image for example
import io
from PIL import Image
image = Image.open(io.BytesIO(image_bytes))
# generate UUID filename
filename = datetime.now().strftime("%Y%m%d") + "_" + str(uuid.uuid4()) + ".png"
image.save("./flux/output/" + filename)
注意
your_hugging_face_token: 你的 Hugging Face token
your_proxy_ip: 你的代理IP
your_proxy_port: 你的代理端口号
依赖安装
基本环境:python3.7
pip install requests
标签:http,python,ip,port,flux,proxy,requests,HuggingFaceAPI,your
From: https://blog.csdn.net/qq_42425392/article/details/143861801