2026/4/6 0:28:58
网站建设
项目流程
网站建设方案的重要性,网站建设板块免费下载,怎么做网站建设作业,崇明建设镇乡镇府网站GPEN API接口文档解析#xff1a;HTTP请求格式与返回值说明
1. 接口概述与使用前提
GPEN图像肖像增强服务不仅提供直观的WebUI界面#xff0c;还开放了完整的HTTP API接口#xff0c;方便开发者集成到自有系统、自动化流程或企业级应用中。本文档面向二次开发人员#xf…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载荷传递所有参数。请求需满足以下四要素方法POSTURLhttp://host:port/api/predict/例如http://localhost:7860/api/predict/Content-Typeapplication/jsonBody严格遵循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–100data[2]处理模式字符串自然/强力/细节data[3]降噪强度整数0–100data[4]锐化程度整数0–100data[5]肤色保护布尔值true或falsefn_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字符串格式同输入可直接写入文件或嵌入HTMLimgduration真实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, strength70, mode强力, denoise40, sharpen50, protect_skinTrue): # 读取并编码图片 with open(image_path, rb) as f: img_b64 base64.b64encode(f.read()).decode() # 构造请求体 payload { data: [ fdata:image/png;base64,{img_b64}, strength, mode, denoise, sharpen, protect_skin ], fn_index: 0 } # 发送请求 response requests.post( http://localhost:7860/api/predict/, jsonpayload, timeout60 ) if response.status_code ! 200: raise Exception(fHTTP {response.status_code}: {response.text}) result response.json() if error in result: raise Exception(fAPI Error: {result[error]}) # 解码并保存结果 output_b64 result[data][0].split(,)[1] output_bytes base64.b64decode(output_b64) output_path fenhanced_{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, strength85, mode强力)3.2 批量处理API调用高阶集成批量处理接口fn_index1接受多张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(fdata: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/, jsonpayload, timeout300 # 批量需更长超时 ) 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(fbatch_out_{i1}.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], strength75)3.3 高级参数直通调用精准控制若需使用「高级参数」Tab中的全部能力对比度、亮度等对应fn_index2。此时data数组长度为9顺序如下索引参数名类型说明0图片Base64字符串同前1增强强度整数0–1002处理模式字符串自然/强力/细节3降噪强度整数0–1004锐化程度整数0–1005对比度整数0–1006亮度整数0–1007肤色保护布尔true/false8细节增强布尔true/false为什么需要这个WebUI中「高级参数」Tab的滑块值会实时同步到单图Tab但API调用时若想绕过UI限制如设对比度120必须直连此接口。4. 返回值深度解析与错误处理4.1 成功响应的隐含信息除data和duration外响应中不返回元数据如分辨率、模型版本。但你可以通过以下方式间接获取输出图片尺寸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中将批处理大小设为4RTX 3090或2RTX 4090可提升GPU利用率输出格式API默认返回PNG若对画质无极致要求可在WebUI中将输出格式设为JPEG响应体积减少60%连接复用Python中使用requests.Session()复用TCP连接QPS可提升3倍以上5.2 安全与稳定性加固反向代理层Nginx配置限流limit_req zonegpengen burst5 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_URLhttp://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 done6. 总结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星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。