fft npainting lama API文档生成:Swagger集成实战

fft npainting lama API文档生成:Swagger集成实战

1. 背景与目标

你可能已经用过fft npainting lama这个图像修复工具——它能轻松实现图片重绘、物品移除、水印清除等操作,界面友好,效果惊艳。但如果你正在做二次开发,比如想把它集成到自己的系统中,或者提供给团队调用,光靠WebUI点击可不够。

我们需要的是API

更进一步,我们还需要一份清晰、可交互的API文档,让前端、测试甚至客户都能快速理解怎么调用接口。这时候,Swagger 就派上用场了。

本文将带你从零开始,在fft npainting lama的基础上,集成 Swagger 自动生成 API 文档,完成一次实用的工程化升级。整个过程不依赖复杂框架改造,适合已有 WebUI 项目的快速接入。


2. 系统架构与技术选型

2.1 原有系统分析

fft npainting lama的 WebUI 是基于 Gradio 构建的,核心启动文件是app.py,其本质是一个 Python 函数封装 + Gradio 接口暴露的模式。

关键点:

  • 图像上传 → 画笔标注(mask)→ 模型推理 → 返回修复图
  • 所有逻辑集中在predict或类似函数中
  • 当前只支持 UI 交互,无标准 HTTP 接口

我们要做的,是在不影响原有功能的前提下,新增一个 FastAPI 服务层,把核心修复能力包装成 RESTful 接口,并通过 Swagger 展示。

2.2 技术组合:FastAPI + Swagger

为什么选 FastAPI?

  • 自带 Swagger UI(默认路径/docs
  • 类型提示友好,自动校验参数
  • 性能高,适合图像处理类服务
  • 与 Python 生态无缝集成

最终架构如下:

[客户端] ↓ (HTTP POST /api/inpaint) [FastAPI Server] → 调用 [lama 修复核心函数] ↓ 返回 base64 或 图片 URL

Swagger 自动生成文档,开发者打开/docs即可测试。


3. 核心改造步骤

3.1 提取图像修复核心函数

首先,我们要把app.py中的图像修复逻辑独立出来,变成一个可复用的函数。

假设原始代码中有类似这样的函数:

def process_image(image, mask): # image: numpy array, HWC, BGR # mask: 2D binary array # 返回修复后的图像(numpy array) ... return result_image

我们将这个函数保存为inpaint_core.py

# inpaint_core.py import cv2 import numpy as np def load_model(): # 模型加载逻辑(只加载一次) pass def process_image(image_bgr: np.ndarray, mask: np.ndarray) -> np.ndarray: """ 图像修复主函数 :param image_bgr: 输入图像 (H, W, 3), BGR格式 :param mask: 修复区域掩码 (H, W), 0表示保留,255表示修复 :return: 修复后图像 (H, W, 3), BGR格式 """ # 这里调用 lama 的实际推理逻辑 # 示例伪代码: # pred_img = model.infer(image_bgr, mask) pred_img = image_bgr.copy() # 替换为真实逻辑 return pred_img

注意:确保模型只加载一次,避免每次调用都初始化。


3.2 创建 FastAPI 服务入口

新建api_server.py,引入 FastAPI 并注册路由:

# api_server.py from fastapi import FastAPI, UploadFile, File from fastapi.responses import JSONResponse import uvicorn import numpy as np import cv2 import base64 from io import BytesIO from PIL import Image from inpaint_core import process_image app = FastAPI( title="FFT Lama 图像修复 API", description="基于 fft npainting lama 的图像修复接口,支持物品移除、水印清除等", version="1.0.0" ) @app.post("/api/inpaint", tags=["图像修复"]) async def inpaint_image( image: UploadFile = File(..., description="原始图像"), mask: UploadFile = File(..., description="修复区域掩码(白色为修复区)") ): """ 执行图像修复 - **image**: 原始图像(PNG/JPG) - **mask**: 标注掩码图(单通道或三通道,白色区域将被修复) - 返回修复后的图像 base64 编码 """ # 读取图像 img_data = await image.read() mask_data = await mask.read() img = cv2.imdecode(np.frombuffer(img_data, np.uint8), cv2.IMREAD_COLOR) mask_img = cv2.imdecode(np.frombuffer(mask_data, np.uint8), cv2.IMREAD_GRAYSCALE) if img is None or mask_img is None: return JSONResponse({"error": "图像解码失败"}, status_code=400) # 调整mask大小以匹配图像 mask_img = cv2.resize(mask_img, (img.shape[1], img.shape[0])) _, mask_binary = cv2.threshold(mask_img, 127, 255, cv2.THRESH_BINARY) # 执行修复 result = process_image(img, mask_binary) # 编码为 base64 返回 _, buffer = cv2.imencode(".png", result) img_base64 = base64.b64encode(buffer).decode('utf-8') return JSONResponse({ "success": True, "result": f"data:image/png;base64,{img_base64}" }) if __name__ == "__main__": uvicorn.run("api_server:app", host="0.0.0.0", port=8000, reload=False)

3.3 集成 Swagger 文档

上面的 FastAPI 代码已经自带 Swagger!

启动服务后,访问:

http://你的服务器IP:8000/docs

你会看到自动生成的交互式文档页面,包含:

  • 接口路径/api/inpaint
  • 参数说明(image、mask 文件上传)
  • 测试按钮(可直接上传图片试用)
  • 返回示例结构
  • 支持 cURL 命令导出

Swagger 界面长这样(文字描述):

  • 左侧是接口列表,点击展开
  • 中间是请求参数表单,支持文件上传
  • 底部是“Try it out”按钮,点击后发送请求
  • 实时显示响应结果,包括 base64 图像预览

这就是我们想要的效果:无需写文档,代码即文档


4. 与原有 WebUI 共存方案

你可能担心:加了 FastAPI,会不会影响原来的 Gradio WebUI?

不会。我们可以这样做:

4.1 双服务并行启动

修改start_app.sh,同时启动两个服务:

#!/bin/bash # 启动 FastAPI(后台) nohup python api_server.py > fastapi.log 2>&1 & # 启动 Gradio WebUI cd /root/cv_fft_inpainting_lama python app.py --server_port 7860 --share False

这样:

  • WebUI 继续运行在:7860
  • API 服务运行在:8000
  • 互不干扰

4.2 统一入口建议(可选)

如果希望统一端口,可以用 Nginx 反向代理:

location / { proxy_pass http://127.0.0.1:7860; } location /api/ { proxy_pass http://127.0.0.1:8000/; } location /docs { proxy_pass http://127.0.0.1:8000/docs; }

这样所有流量走 80 端口,外部更整洁。


5. 接口使用示例

5.1 使用 curl 调用

curl -X POST "http://your-server:8000/api/inpaint" \ -F "image=@input.jpg" \ -F "mask=@mask.png" \ | jq -r '.result' | sed 's/^data:image\/png;base64,//' | base64 -d > output.png

5.2 使用 Python requests

import requests files = { 'image': open('input.jpg', 'rb'), 'mask': open('mask.png', 'rb') } response = requests.post('http://your-server:8000/api/inpaint', files=files) data = response.json() # 提取 base64 并保存 import re match = re.match(r"data:image\/png;base64,(.*)", data['result']) if match: with open("output.png", "wb") as f: f.write(base64.b64decode(match.group(1)))

前端也可以直接用<input type="file">+ fetch 调用。


6. 安全性与生产建议

虽然 Swagger 方便调试,但在生产环境要注意:

6.1 关闭调试接口(可选)

FastAPI 默认开启/docs/redoc,如需关闭:

app = FastAPI(docs_url=None, redoc_url=None) # 完全关闭 # 或 app = FastAPI(docs_url="/apidocs" if DEBUG else None) # 仅开发环境开放

6.2 添加身份验证(推荐)

简单 token 验证:

from fastapi import Depends, HTTPException, Header def verify_token(x_token: str = Header(...)): if x_token != "your-secret-token": raise HTTPException(status_code=401, detail="Unauthorized") @app.post("/api/inpaint", dependencies=[Depends(verify_token)]) async def inpaint_image(...): ...

调用时需加头:

curl -H "x-token: your-secret-token" -F "image=..." http://.../api/inpaint

6.3 限制文件大小

防止大文件拖垮服务:

MAX_FILE_SIZE = 10 * 1024 * 1024 # 10MB async def read_upload_file(file: UploadFile): content = await file.read() if len(content) > MAX_FILE_SIZE: raise HTTPException(status_code=413, detail="文件过大") return content

7. 效果验证与截图说明

虽然本文重点是 API 集成,但我们仍可通过 Swagger 界面直观验证效果。

访问http://your-server:8000/docs后:

  1. 点击/api/inpaint→ “Try it out”
  2. 上传一张原图和对应的 mask 图(白色标记要移除的物体)
  3. 点击 “Execute”
  4. 查看返回的 base64 图像是否正确

预期结果:

  • 返回 JSON 包含result字段
  • base64 解码后图像完整,修复区域自然融合
  • 无明显边缘痕迹或颜色偏差

这表明 API 已成功集成原有修复能力。


8. 总结

8.1 我们完成了什么

  • fft npainting lama中抽离核心修复逻辑
  • 使用 FastAPI 封装为标准 HTTP 接口
  • 自动生成 Swagger 交互式文档
  • 实现双服务共存,不影响原有 WebUI
  • 提供调用示例和生产优化建议

现在,无论是前端工程师、测试人员还是合作方,都可以通过http://your-server:8000/docs快速了解并调用图像修复能力,大大提升协作效率。


获取更多AI镜像

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1198977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

口碑好的2026年废气柱状活性炭直销厂家推荐

在工业废气处理领域,选择优质的废气柱状活性炭供应商至关重要。本文基于企业生产能力、产品性能稳定性、客户服务响应速度三大核心指标,结合实地调研与行业用户反馈,筛选出五家值得关注的废气柱状活性炭生产企业。其…

SAM3大模型镜像发布|支持英文提示词的万物分割Web交互

SAM3大模型镜像发布&#xff5c;支持英文提示词的万物分割Web交互 1. 引言&#xff1a;让图像分割变得更简单 你有没有想过&#xff0c;只需输入一个简单的词语&#xff0c;比如“狗”或者“红色汽车”&#xff0c;就能自动从一张复杂的图片中把对应物体完整地抠出来&#xf…

保姆级教程:ComfyUI中使用Cute_Animal_Qwen生成卡通动物

保姆级教程&#xff1a;ComfyUI中使用Cute_Animal_Qwen生成卡通动物 1. 这个镜像到底能帮你做什么 你有没有试过给孩子画一只会跳舞的熊猫&#xff1f;或者想为幼儿园活动设计一套萌系动物贴纸&#xff0c;却卡在“怎么让小兔子看起来既可爱又不幼稚”上&#xff1f;别折腾绘…

新手福音!Qwen3-Embedding-0.6B极简安装指南

新手福音&#xff01;Qwen3-Embedding-0.6B极简安装指南 你是不是也遇到过这样的问题&#xff1a;想用大模型做文本搜索、分类或者聚类&#xff0c;但不知道从哪下手&#xff1f;模型太大跑不动&#xff0c;环境配置复杂到崩溃&#xff1f;别急&#xff0c;今天这篇教程就是为…

Sambert-HiFiGAN模型结构解析:语音合成原理入门必看

Sambert-HiFiGAN模型结构解析&#xff1a;语音合成原理入门必看 1. 什么是Sambert-HiFiGAN&#xff1f;语音合成的“黄金组合” 你有没有想过&#xff0c;手机里的语音助手、有声书里的播音员、甚至短视频中的配音&#xff0c;是怎么把文字变成自然人声的&#xff1f;背后的核…

NotaGen音乐生成模型上线|科哥打造的LLM古典作曲工具

NotaGen音乐生成模型上线&#xff5c;科哥打造的LLM古典作曲工具 你是否曾幻想过&#xff0c;只需轻点几下鼠标&#xff0c;就能让AI为你创作一首巴赫风格的赋格曲&#xff1f;或者生成一段肖邦式的夜曲&#xff0c;在深夜里静静聆听&#xff1f;现在&#xff0c;这一切不再是…

FSMN-VAD功能测评:支持上传与实时录音双模式

FSMN-VAD功能测评&#xff1a;支持上传与实时录音双模式 语音处理系统中&#xff0c;一个常被忽视却至关重要的环节是语音端点检测&#xff08;Voice Activity Detection, VAD&#xff09;。它负责从连续的音频流中精准识别出“人在说话”的时间段&#xff0c;自动剔除静音或无…

开发者必备工具:BERT语义填空镜像免配置部署推荐

开发者必备工具&#xff1a;BERT语义填空镜像免配置部署推荐 1. BERT 智能语义填空服务 你有没有遇到过这样的场景&#xff1a;写文案时卡在一个词上&#xff0c;怎么都不够贴切&#xff1f;或者读一段文字发现缺了一个字&#xff0c;却怎么也猜不出原意&#xff1f;现在&…

YOLOv11与Detectron2对比:企业级部署成本实测分析

YOLOv11与Detectron2对比&#xff1a;企业级部署成本实测分析 近年来&#xff0c;目标检测技术在工业质检、智能安防、自动驾驶等领域广泛应用。企业在选择技术方案时&#xff0c;除了关注模型精度和推理速度外&#xff0c;部署成本、开发效率和维护难度也成为关键考量因素。Y…

IndexTTS-2工业级TTS部署教程:零样本文本转语音快速上手指南

IndexTTS-2工业级TTS部署教程&#xff1a;零样本文本转语音快速上手指南 Sambert 多情感中文语音合成——开箱即用版。本镜像基于阿里达摩院 Sambert-HiFiGAN 模型&#xff0c;已深度修复 ttsfrd 二进制依赖及 SciPy 接口兼容性问题。内置 Python 3.10 环境&#xff0c;支持知…

IQuest-Coder-V1与DeepSeek-Coder对比评测:竞技编程场景谁更优?

IQuest-Coder-V1与DeepSeek-Coder对比评测&#xff1a;竞技编程场景谁更优&#xff1f; 在当前AI辅助编程快速发展的背景下&#xff0c;越来越多的大模型开始聚焦于专业编码任务&#xff0c;尤其是对逻辑严密性、算法设计能力和代码生成准确率要求极高的竞技编程场景。IQuest-…

智能合同解析实战:用MinerU快速提取关键信息

智能合同解析实战&#xff1a;用MinerU快速提取关键信息 1. 场景痛点与解决方案引入 在企业日常运营中&#xff0c;合同审查是一项高频且耗时的任务。法务人员需要从数十页的PDF或扫描件中手动提取甲方、乙方、金额、付款周期、违约责任等关键条款&#xff0c;不仅效率低下&a…

5分钟部署Open-AutoGLM,手机AI助手一键上手

5分钟部署Open-AutoGLM&#xff0c;手机AI助手一键上手 你有没有想过&#xff0c;让AI帮你操作手机&#xff1f;不是简单的语音唤醒&#xff0c;而是真正“看懂”屏幕、理解界面、自动点击滑动&#xff0c;像真人一样完成复杂任务。比如你说一句&#xff1a;“打开小红书搜美食…

Qwen3-Embedding-4B批量处理:大规模数据嵌入实战

Qwen3-Embedding-4B批量处理&#xff1a;大规模数据嵌入实战 在自然语言处理任务中&#xff0c;文本嵌入&#xff08;Text Embedding&#xff09;是连接原始文本与下游应用的关键桥梁。无论是搜索引擎、推荐系统&#xff0c;还是语义去重、聚类分析&#xff0c;高质量的向量表…

高效语音分析方案|使用科哥二次开发的SenseVoice Small镜像

高效语音分析方案&#xff5c;使用科哥二次开发的SenseVoice Small镜像 在日常工作中&#xff0c;我们经常需要处理大量语音内容——无论是会议录音、客户访谈&#xff0c;还是客服对话。传统的做法是人工逐字听写&#xff0c;耗时又低效。有没有一种方式&#xff0c;能快速把…

语音增强技术落地|FRCRN-16k大模型镜像快速部署教程

语音增强技术落地&#xff5c;FRCRN-16k大模型镜像快速部署教程 你是否经常被录音中的背景噪音困扰&#xff1f;会议录音听不清、采访音频杂音多、远程沟通质量差——这些问题其实都可以通过AI语音增强技术解决。今天&#xff0c;我们就来手把手教你如何快速部署一个高效的单通…

5分钟部署bge-large-zh-v1.5,sglang镜像让中文语义匹配快速落地

5分钟部署bge-large-zh-v1.5&#xff0c;sglang镜像让中文语义匹配快速落地 1. 快速上手&#xff1a;为什么选择sglang部署bge-large-zh-v1.5&#xff1f; 你是不是也遇到过这样的问题&#xff1a;想用一个高质量的中文embedding模型做语义匹配、文本检索或者相似度计算&…

MinerU自动化流水线:CI/CD集成部署实操案例

MinerU自动化流水线&#xff1a;CI/CD集成部署实操案例 1. 引言&#xff1a;让PDF解析进入自动化时代 你有没有遇到过这样的场景&#xff1f;团队每天要处理上百份科研论文、技术报告或财务文档&#xff0c;这些PDF结构复杂&#xff0c;包含多栏排版、表格、公式和图表&#…

Qwen3-4B与ChatGLM4对比评测:逻辑推理与部署效率全解析

Qwen3-4B与ChatGLM4对比评测&#xff1a;逻辑推理与部署效率全解析 1. 背景与模型概览 大模型的发展已经从“参数竞赛”逐步转向“能力优化”和“落地实用”。在众多开源模型中&#xff0c;阿里云推出的 Qwen3-4B-Instruct-2507 和智谱AI的 ChatGLM4 是当前4B级别中备受关注的…

SGLang编译器有多强?DSL语言简化复杂逻辑编写

SGLang编译器有多强&#xff1f;DSL语言简化复杂逻辑编写 你有没有遇到过这样的问题&#xff1a;想让大模型做点复杂的事&#xff0c;比如多轮对话、调用API、生成结构化数据&#xff0c;结果写起代码来又绕又慢&#xff1f;更头疼的是&#xff0c;每次请求都要重新计算&#…