API 服务调用:Replicate / Fal.ai / Sieve 三平台实测对比
为什么需要 API
本地跑 CodeFormer 适合个人使用或批量处理,但如果要:
- 做一个在线人脸修复网站
- 在移动 App 里集成修复功能
- 给 SaaS 产品加人脸修复能力
- 让非技术用户也能用上 CodeFormer
就需要把模型部署成网络 API——调用方发图片过来,API 返回修复后的图片 URL。
三平台对比
| 平台 | 是否官方 | 参数完整度 | 价格 | 速度 | 输入支持 |
|---|---|---|---|---|---|
| Replicate | ✅ 官方 | 完整(w、对齐、背景、上采样) | ~$0.003/张 | 中(共享 GPU) | 图片 + 视频 |
| Fal.ai | ❌ 非官方 | 中等 | ~$0.002/张 | 快(专用 GPU) | 图片 |
| Sieve | ❌ 非官方 | 完整 | ~$0.004/张 | 中 | 图片 + 视频 |
官方推荐 Replicate(作者维护)。
Replicate 完整调用示例
Python
import replicate
import requests
client = replicate.Client(api_token="r8_xxx") # 在 replicate.com/account 创建
# 运行(CodeFormer 官方端点)
result = client.run(
"sczhou/codeformer",
input={
"image": open("photo.jpg", "rb"),
"w": 0.7,
"upscale": 2,
"has_aligned": False,
"bg_upsampler": "realesrgan", # 字符串类型
"face_upsample": True,
}
)
# result 是输出图的 URL
print(result) # 例如 "<URL>
# 下载
resp = requests.get(result)
open("restored.png", "wb").write(resp.content)
Node.js
import Replicate from "replicate";
const replicate = new Replicate({ auth: process.env.REPLICATE_API_TOKEN });
const output = await replicate.run(
"sczhou/codeformer",
{
input: {
image: fs.createReadStream("photo.jpg"),
w: 0.7,
upscale: 2,
has_aligned: false,
bg_upsampler: "realesrgan",
face_upsample: true,
}
}
);
cURL
curl -s -X POST "<API_URL>" \
-H "Authorization: Token r8_xxx" \
-H "Content-Type: application/json" \
-d '{
"version": "sczhou/codeformer",
"input": {
"image": "data:image/jpeg;base64,...",
"w": 0.7,
"upscale": 2
}
}'
API 参数对照
| CLI 参数 | Replicate 参数 | 类型 | 说明 |
|---|---|---|---|
| -w / --fidelity_weight | w | float, 0-1 | w 权重 |
| -s / --upscale | upscale | int, 2/4 | 上倍倍率 |
| --has_aligned | has_aligned | boolean | 是否跳过检测对齐 |
| --bg_upsampler realesrgan | bg_upsampler | string | "realesrgan" 或 "none" |
| --face_upsample | face_upsample | boolean | 是否再上采样人脸 |
| --input_path | image | file | 输入图片/视频 |
自建 API 服务(高级)
如果调用量很大、想完全掌控数据隐私,可以自己搭 API:
方案一:Replicate 自建端点
Replicate 支持把你的模型打包成专用端点(Dedicated Endpoint),按小时计费 GPU(T4 ~ $0.6/小时)。适合日均调用 > 10000 次。
方案二:自建 FastAPI + Docker
# api.py —— 简化示例
from fastapi import FastAPI, UploadFile, File
import torch
from basicsr.utils import img2tensor, tensor2img
import cv2
import numpy as np
app = FastAPI()
# 启动时加载模型(只加载一次)
from basicsr.archs.codeformer_arch import CodeFormer
model = CodeFormer(...)
model.load_state_dict(torch.load("weights/CodeFormer/codeformer.pth"))
model.cuda().eval()
@app.post("/restore")
async def restore_face(file: UploadFile = File(...), w: float = 0.5):
# 1. 接收图片
contents = await file.read()
arr = np.frombuffer(contents, dtype=np.uint8)
img = cv2.imdecode(arr, cv2.IMREAD_COLOR)
# 2. 预处理(检测人脸 + 对齐到 512×512)
# ...(省略)
# 3. 推理
with torch.no_grad():
input_tensor = img2tensor(cropped_face, bgr2rgb=True, float32=True) / 255.0
output = model(input_tensor.unsqueeze(0), w=w)
# 4. 后处理 + 返回
result_img = tensor2img(output)
_, buffer = cv2.imencode(".png", result_img)
return StreamingResponse(BytesIO(buffer), media_type="image/png")
Dockerfile + 部署到云 GPU(AutoDL / Lambda Labs / 阿里云 ECS)。
隐私和数据安全
- Replicate:图片上传到 Replicate 服务器,处理完后保留一段时间(隐私政策里有说明)
- 自建:图片不出你的服务器,完全可控。适合处理敏感照片(证件照、隐私照)
费用估算
假设 10000 张图片/月:
| 方案 | 月成本 |
|---|---|
| Replicate 按量 | ~$30 |
| Replicate 专用端点(T4) | ~$430(0.6 × 24 × 30) |
| 自建 AutoDL(RTX 3090) | ~¥800(2 元/小时 × 400 小时) |
| 自建(有自己的 GPU) | 电费 |
小量用 Replicate 按量划算,大量自建更便宜。