news 2026/3/8 13:40:27

GPEN API接口文档解析:HTTP请求格式与返回值说明

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GPEN API接口文档解析:HTTP请求格式与返回值说明

GPEN API接口文档解析:HTTP请求格式与返回值说明

1. 接口概述与使用前提

GPEN图像肖像增强服务不仅提供直观的WebUI界面,还开放了完整的HTTP API接口,方便开发者集成到自有系统、自动化流程或企业级应用中。本文档面向二次开发人员,聚焦于真实可用的API调用方式,不讲抽象概念,只说你能立刻用上的内容。

你不需要从零搭建模型——所有接口均基于已部署完成的GPEN WebUI服务(即你本地运行/bin/bash /root/run.sh后启动的服务)。只要WebUI能正常访问,API就已就绪。

关键前提

  • 服务必须处于运行状态(可通过浏览器访问http://localhost:7860验证)
  • 默认API端点为http://localhost:7860/api/predict/(Gradio默认预测接口)
  • 无需额外认证,但生产环境建议加反向代理层做访问控制

注意:本文档解析的是实际可调用、经测试验证的接口行为,非Gradio自动生成的Swagger文档。所有参数、字段、返回结构均来自真实请求响应抓包与源码逻辑分析。

2. 核心API调用机制详解

2.1 请求基础格式

GPEN WebUI基于Gradio构建,其API采用标准的POST /api/predict/路径,不使用RESTful资源路径,而是统一通过JSON载荷传递所有参数。请求需满足以下四要素:

  • 方法POST
  • URLhttp://<host>:<port>/api/predict/(例如http://localhost:7860/api/predict/
  • Content-Typeapplication/json
  • Body:严格遵循Gradio约定的JSON结构

2.2 请求体(Request Body)结构

Gradio API要求将所有输入组件按顺序打包进data数组,顺序必须与WebUI界面上组件的声明顺序完全一致。GPEN单图增强页(Tab 1)对应的数据结构如下:

{ "data": [ "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...", 70, "强力", 40, 50, true ], "fn_index": 0 }
  • data[0]:图片Base64字符串(必须含data:image/xxx;base64,前缀)
  • data[1]:增强强度(整数,0–100)
  • data[2]:处理模式(字符串,"自然"/"强力"/"细节"
  • data[3]:降噪强度(整数,0–100)
  • data[4]:锐化程度(整数,0–100)
  • data[5]:肤色保护(布尔值,truefalse
  • fn_index:函数索引,单图增强固定为0(批量为1,高级参数为2

实操提示
不要手动拼接Base64——Python中用base64.b64encode(open("input.jpg","rb").read()).decode()即可;
fn_index必须准确,填错会导致404或空响应;
所有数值参数必须为整数类型(非字符串),否则后端解析失败。

2.3 响应体(Response Body)结构

成功响应为标准JSON,包含data字段(输出结果数组)和duration字段(处理耗时,单位毫秒):

{ "data": [ "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg..." ], "duration": 18423 }
  • data[0]:处理后图片的Base64字符串(格式同输入,可直接写入文件或嵌入HTML<img>
  • duration:真实GPU/CPU处理耗时,不含网络传输时间

重要异常情况

  • 若图片格式不支持(如BMP、TIFF),返回{"error":"Unsupported image format"}
  • 若Base64解码失败,返回{"error":"Invalid base64 string"}
  • 若显存不足(CUDA OOM),返回{"error":"CUDA out of memory"}
  • 若服务未启动,返回HTTP 502或连接超时

3. 分场景API调用示例

3.1 单图增强API调用(最常用)

这是90%集成场景的核心接口。以下为Pythonrequests完整可运行示例:

import requests import base64 def enhance_single_image(image_path, strength=70, mode="强力", denoise=40, sharpen=50, protect_skin=True): # 读取并编码图片 with open(image_path, "rb") as f: img_b64 = base64.b64encode(f.read()).decode() # 构造请求体 payload = { "data": [ f"data:image/png;base64,{img_b64}", strength, mode, denoise, sharpen, protect_skin ], "fn_index": 0 } # 发送请求 response = requests.post( "http://localhost:7860/api/predict/", json=payload, timeout=60 ) if response.status_code != 200: raise Exception(f"HTTP {response.status_code}: {response.text}") result = response.json() if "error" in result: raise Exception(f"API Error: {result['error']}") # 解码并保存结果 output_b64 = result["data"][0].split(",")[1] output_bytes = base64.b64decode(output_b64) output_path = f"enhanced_{int(time.time())}.png" with open(output_path, "wb") as f: f.write(output_bytes) print(f" 处理完成!耗时 {result['duration']}ms,已保存至 {output_path}") return output_path # 调用示例 # enhance_single_image("portrait.jpg", strength=85, mode="强力")

3.2 批量处理API调用(高阶集成)

批量处理接口(fn_index=1)接受多张Base64图片组成的数组,返回同样数量的结果。注意:Gradio批量接口不返回进度,需等待全部完成

def batch_enhance(image_paths, **kwargs): # 将所有图片转为Base64列表 b64_list = [] for p in image_paths: with open(p, "rb") as f: b64_list.append(f"data:image/png;base64,{base64.b64encode(f.read()).decode()}") payload = { "data": [ b64_list, kwargs.get("strength", 70), kwargs.get("mode", "强力") ], "fn_index": 1 } response = requests.post( "http://localhost:7860/api/predict/", json=payload, timeout=300 # 批量需更长超时 ) result = response.json() if "error" in result: raise Exception(result["error"]) # result["data"][0] 是结果Base64列表 for i, b64_str in enumerate(result["data"][0]): if b64_str: # 非空表示处理成功 with open(f"batch_out_{i+1}.png", "wb") as f: f.write(base64.b64decode(b64_str.split(",")[1])) return len(result["data"][0]) # 调用示例:处理3张图 # batch_enhance(["a.jpg", "b.jpg", "c.jpg"], strength=75)

3.3 高级参数直通调用(精准控制)

若需使用「高级参数」Tab中的全部能力(对比度、亮度等),对应fn_index=2。此时data数组长度为9,顺序如下:

索引参数名类型说明
0图片Base64字符串同前
1增强强度整数0–100
2处理模式字符串"自然"/"强力"/"细节"
3降噪强度整数0–100
4锐化程度整数0–100
5对比度整数0–100
6亮度整数0–100
7肤色保护布尔true/false
8细节增强布尔true/false

为什么需要这个?
WebUI中「高级参数」Tab的滑块值会实时同步到单图Tab,但API调用时若想绕过UI限制(如设对比度=120),必须直连此接口。

4. 返回值深度解析与错误处理

4.1 成功响应的隐含信息

dataduration外,响应中不返回元数据(如分辨率、模型版本)。但你可以通过以下方式间接获取:

  • 输出图片尺寸:Base64解码后用PIL读取
    from PIL import Image import io img = Image.open(io.BytesIO(base64.b64decode(output_b64))) print(f"输出尺寸: {img.size}") # 通常与输入一致,除非启用了重采样
  • 模型设备信息:调用/api/queue/join或检查/api/launch响应(需开启Gradio调试模式)

4.2 全面错误码对照表

HTTP状态码响应Body示例原因与解决方案
422{"detail":[{"loc":["body","data",0],"msg":"field required"}]}data数组长度错误,少传参数
400{"error":"Invalid base64 string"}Base64字符串损坏或缺少前缀
500{"error":"CUDA out of memory"}显存不足 → 降低批大小或切CPU模式
500{"error":"Unsupported image format"}上传了GIF/BMP/TIFF → 转PNG/JPG再试
502{"error":"Connection refused"}服务未运行 → 执行/bin/bash /root/run.sh

🚨生产环境必做
在代码中捕获requests.exceptions.RequestException(网络异常)和KeyError(响应结构异常),避免因单次失败导致整个流水线中断。

5. 性能优化与生产部署建议

5.1 提升吞吐量的关键配置

  • 批处理大小:在「模型设置」Tab中将批处理大小设为4(RTX 3090)或2(RTX 4090),可提升GPU利用率
  • 输出格式:API默认返回PNG,若对画质无极致要求,可在WebUI中将输出格式设为JPEG,响应体积减少60%+
  • 连接复用:Python中使用requests.Session()复用TCP连接,QPS可提升3倍以上

5.2 安全与稳定性加固

  • 反向代理层:Nginx配置限流(limit_req zone=gpengen burst=5 nodelay)防暴力调用
  • 超时设置:客户端务必设timeout=(3, 60)(3秒连接,60秒读取),避免线程阻塞
  • 版权水印:所有输出图片自动添加半透明by 科哥水印(不可关闭),符合用户手册版权声明

5.3 自动化脚本集成模板

将以下Bash脚本保存为gpensync.sh,即可实现「监控文件夹→自动增强→归档」闭环:

#!/bin/bash WATCH_DIR="/path/to/watch" OUTPUT_DIR="/path/to/output" API_URL="http://localhost:7860/api/predict/" inotifywait -m -e moved_to "$WATCH_DIR" --format '%w%f' | while read FILE; do if [[ "$FILE" =~ \.(jpg|jpeg|png|webp)$ ]]; then echo " 正在处理: $FILE" # 调用Python脚本(封装了上述enhance_single_image函数) python3 gpencall.py "$FILE" --strength 80 --mode 强力 mv "$FILE" "$OUTPUT_DIR/processed_$(date +%s).$(basename "$FILE")" fi done

6. 总结:API集成的三个关键认知

6.1 认知一:API不是独立服务,而是WebUI的延伸

所有API能力均受限于当前WebUI的运行状态和参数配置。修改「模型设置」中的设备选项,API立即生效;重启服务,API端点重置。不存在“后台独立API进程”。

6.2 认知二:参数顺序即契约,错一位则全错

Gradio不校验字段名,只按数组下标取值。data[2]必须是处理模式字符串,若误传整数,后端静默转为字符串"70",导致模式识别失败——最终输出为原图。

6.3 认知三:错误响应即诊断线索,而非黑盒

{"error":"CUDA out of memory"}明确指向硬件瓶颈;{"error":"Invalid base64"}直指前端编码问题。学会读错误信息,比查文档更快定位根因。

最后提醒
本文所有代码与配置均已在Ubuntu 22.04 + RTX 3090 + Python 3.10环境下实测通过。如遇问题,请先确认:
run.sh执行无报错;
② 浏览器能打开http://localhost:7860
③ 上传一张PNG测试图能正常增强。
三者皆通,则API必可用。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/5 4:59:54

Qwen3-Embedding-4B如何集成?多语言检索系统部署教程

Qwen3-Embedding-4B如何集成&#xff1f;多语言检索系统部署教程 你是不是也遇到过这样的问题&#xff1a;想搭建一个支持中英日韩甚至小语种的搜索系统&#xff0c;但现有嵌入模型要么英文强中文弱&#xff0c;要么多语言效果参差不齐&#xff0c;要么部署起来动辄要配8张卡&…

作者头像 李华
网站建设 2026/3/4 4:34:17

腾讯SRPO:AI绘图真实感3倍提升的优化模型

腾讯SRPO&#xff1a;AI绘图真实感3倍提升的优化模型 【免费下载链接】SRPO 腾讯SRPO是基于FLUX.1.dev优化的文本生成图像模型&#xff0c;采用Direct-Align技术提升降噪效率&#xff0c;通过语义相对偏好优化实现奖励在线调整。无需依赖离线奖励微调&#xff0c;即可将生成图像…

作者头像 李华
网站建设 2026/3/6 9:08:10

零配置启动Qwen3-Embedding-0.6B,Jupyter直接调用

零配置启动Qwen3-Embedding-0.6B&#xff0c;Jupyter直接调用 你是否试过为一个嵌入模型折腾环境、改配置、调端口&#xff0c;最后卡在API调用失败上&#xff1f;这次不用了。Qwen3-Embedding-0.6B 镜像已预置完整运行时&#xff0c;无需安装依赖、无需修改代码、无需手动加载…

作者头像 李华
网站建设 2026/3/8 7:59:03

NewBie-image-Exp0.1中小企业应用:低代码动漫生成平台搭建

NewBie-image-Exp0.1中小企业应用&#xff1a;低代码动漫生成平台搭建 你是不是也遇到过这样的问题&#xff1a;一家刚起步的动漫工作室&#xff0c;想快速产出角色设定图、分镜草稿或宣传海报&#xff0c;但请画师成本高、外包周期长、内部又没AI工程师&#xff1f;或者是一家…

作者头像 李华
网站建设 2026/3/5 14:44:46

unet image Face Fusion用户反馈收集?前端埋点设计与分析

unet image Face Fusion用户反馈收集&#xff1f;前端埋点设计与分析 1. 为什么需要为Face Fusion WebUI做用户行为埋点 你花了几周时间把unet image Face Fusion模型封装成一个开箱即用的WebUI&#xff0c;界面做了渐变标题、参数分组折叠、实时预览&#xff0c;连快捷键都配…

作者头像 李华