news 2026/4/17 12:14:27

fft npainting lama批量处理方案:自动化脚本集成实战案例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
fft npainting lama批量处理方案:自动化脚本集成实战案例

fft npainting lama批量处理方案:自动化脚本集成实战案例

1. 引言:从手动修复到批量自动化

你是不是也遇到过这样的情况?手头有一堆图片需要去水印、删文字、移除路人,一张张打开WebUI上传、画笔标注、点击修复……重复操作几十遍,不仅耗时还容易出错。我之前就是这样,直到把fft npainting lama 图像修复系统和自动化脚本结合起来,效率直接起飞。

本文要讲的,不是怎么用这个WebUI界面——那已经有详细手册了。我要带你做的是:在原有系统基础上,开发一套批量处理流程,实现“丢进去一堆图,自动修完再吐出来”的全自动化方案

这套方案基于科哥开发的cv_fft_inpainting_lama项目(GitHub常见开源版本),我们不做模型训练,只做工程落地优化。目标很明确:

  • 保留原WebUI的手动交互能力(方便调试)
  • 新增后台批量处理模块
  • 支持文件夹输入/输出,自动调用修复引擎
  • 可扩展为定时任务或API服务

适合人群:会一点Python、想提升AI图像处理效率的开发者或技术爱好者。


2. 系统架构与二次开发思路

2.1 原有系统结构分析

先来看一眼原始项目的目录结构:

/root/cv_fft_inpainting_lama/ ├── app.py # Gradio WebUI主程序 ├── start_app.sh # 启动脚本 ├── models/ # 模型权重 ├── inputs/ # 输入图像(可选) ├── outputs/ # 输出图像 └── lama_inpaint.py # 核心修复逻辑封装

关键点在于lama_inpaint.py这个文件,它封装了图像加载、mask生成、模型推理和保存结果的完整流程。而app.py是基于Gradio做的可视化包装。

我们的策略是:不动WebUI,只提取核心修复功能,封装成可调用模块

2.2 批量处理设计目标

功能是否支持
单张图像修复(手动)✅ 原生支持
多图批量修复(自动)✅ 本次新增
自定义mask标注方式✅ 支持矩形/全图/外部mask
输出路径自定义✅ 支持
错误跳过与日志记录✅ 支持
并行处理加速❌ 本期简化版

我们先做串行稳定版,后续可升级多进程。


3. 核心脚本开发:批量修复模块实现

3.1 创建批量处理脚本

新建文件batch_inpaint.py,放在项目根目录下:

# batch_inpaint.py import os import cv2 import numpy as np from datetime import datetime from lama_inpaint import inpaint_image # 直接复用原修复函数 def create_mask_from_bbox(image_shape, bbox): """ 根据边界框生成mask bbox: (x, y, w, h) """ mask = np.zeros(image_shape[:2], dtype=np.uint8) x, y, w, h = bbox cv2.rectangle(mask, (x, y), (x+w, y+h), 255, -1) return mask def process_single_image(img_path, output_dir, method='auto_rect'): """ 处理单张图像 method: auto_rect(自动识别人脸区域), full(整图修复), 或传入具体bbox """ try: # 读取图像 image = cv2.imread(img_path) if image is None: print(f"[错误] 无法读取图像: {img_path}") return False # 生成mask if method == 'full': mask = np.ones(image.shape[:2], dtype=np.uint8) * 255 elif isinstance(method, tuple) and len(method) == 4: mask = create_mask_from_bbox(image.shape, method) else: # 默认:自动识别并去除人脸外的物体(示例逻辑) # 实际中可用YOLO等检测模型定位目标 mask = np.ones(image.shape[:2], dtype=np.uint8) * 255 # 这里可以接入目标检测模型,动态生成mask # 调用原修复函数 result = inpaint_image(image, mask) # 生成输出路径 filename = os.path.basename(img_path) name, ext = os.path.splitext(filename) timestamp = datetime.now().strftime("%Y%m%d%H%M%S") output_path = os.path.join(output_dir, f"output_{name}_{timestamp}.png") # 保存结果 cv2.imwrite(output_path, result) print(f"[成功] 已保存: {output_path}") return True except Exception as e: print(f"[失败] 处理 {img_path} 时出错: {str(e)}") return False def batch_process(input_folder, output_folder, method='auto_rect'): """ 批量处理入口 """ if not os.path.exists(output_folder): os.makedirs(output_folder) supported_exts = ('.png', '.jpg', '.jpeg', '.webp') image_files = [f for f in os.listdir(input_folder) if f.lower().endswith(supported_exts)] if not image_files: print(f"警告:{input_folder} 中没有找到支持的图像文件") return print(f"开始批量处理 {len(image_files)} 张图像...") success_count = 0 for img_file in image_files: img_path = os.path.join(input_folder, img_file) if process_single_image(img_path, output_folder, method): success_count += 1 print(f"批量处理完成!成功: {success_count}/{len(image_files)}") if __name__ == "__main__": import argparse parser = argparse.ArgumentParser(description="FFT LaMa 批量图像修复工具") parser.add_argument("--input", type=str, required=True, help="输入图像文件夹路径") parser.add_argument("--output", type=str, default="./batch_outputs", help="输出文件夹路径") parser.add_argument("--method", type=str, default="full", choices=['full', 'auto_rect'], help="修复方法") args = parser.parse_args() batch_process(args.input, args.output, args.method)

3.2 关键代码说明

  • inpaint_image函数是从lama_inpaint.py导出的核心接口,负责调用LaMa模型进行修复。
  • create_mask_from_bbox用于根据坐标生成矩形mask,适用于已知位置的目标移除。
  • process_single_image封装了完整的单图处理流程:读图 → 生成mask → 修复 → 保存。
  • 支持命令行参数传入,便于集成到其他系统。

4. 集成与使用:让自动化跑起来

4.1 添加启动脚本

创建start_batch.sh脚本:

#!/bin/bash # start_batch.sh INPUT_DIR="/root/cv_fft_inpainting_lama/batch_inputs" OUTPUT_DIR="/root/cv_fft_inpainting_lama/batch_outputs" echo "=====================================" echo "🚀 开始批量图像修复任务" echo "输入目录: $INPUT_DIR" echo "输出目录: $OUTPUT_DIR" echo "=====================================" python batch_inpaint.py --input "$INPUT_DIR" --output "$OUTPUT_DIR" --method full echo "✅ 批量处理已完成"

记得给执行权限:

chmod +x start_batch.sh

4.2 使用流程演示

  1. 准备待处理图片,放入batch_inputs/文件夹
  2. 执行批量脚本:
bash start_batch.sh
  1. 查看输出:
[成功] 已保存: /root/cv_fft_inpainting_lama/batch_outputs/output_photo_1_20260105142030.png [成功] 已保存: /root/cv_fft_inpainting_lama/batch_outputs/output_screenshot_20260105142045.png ... 批量处理完成!成功: 5/5
  1. 结果自动保存在batch_outputs/目录,命名带时间戳,避免冲突。

5. 实战案例:电商商品图批量去水印

5.1 场景描述

某电商平台每天收到大量供应商发来的商品图,都带有明显水印。人工一张张处理太慢,我们用这套系统实现全自动去水印。

5.2 解决方案设计

假设水印统一在右下角(300x100像素区域),我们可以固定mask位置:

# 修改调用方式 bbox = (image.shape[1]-320, image.shape[0]-120, 300, 100) # 右下角区域 process_single_image(img_path, output_dir, method=bbox)

这样就不需要AI识别水印位置,直接按坐标切除。

5.3 效果对比

方式处理100张图耗时是否需人工干预准确率
手动WebUI操作~3小时
本方案自动化~12分钟>95%(固定位置)

注:若水印位置不固定,可结合OpenCV模板匹配或轻量级YOLO检测模型提升泛化能力。


6. 进阶优化建议

6.1 加入日志系统

替换print语句,使用logging模块记录详细信息:

import logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('batch_inpaint.log'), logging.StreamHandler() ] )

6.2 支持配置文件

创建config.yaml

input_folder: ./batch_inputs output_folder: ./batch_outputs repair_method: full log_level: INFO

让非技术人员也能轻松修改参数。

6.3 扩展为API服务

用Flask封装成HTTP接口:

from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/inpaint', methods=['POST']) def api_inpaint(): # 接收上传文件,调用batch_inpaint中的逻辑 pass

未来可对接企业内部系统,实现“上传即修复”。


7. 总结:构建属于你的AI流水线

通过这次二次开发,我们完成了三件事:

  1. 解耦了WebUI与核心功能:把图像修复能力从界面中剥离出来,变成可编程模块;
  2. 实现了批量自动化处理:只需放图进文件夹,脚本自动完成全部修复;
  3. 验证了实际业务价值:在电商去水印场景中,效率提升15倍以上。

这套方案的优势在于:

  • 不改动原项目结构,兼容性强
  • 易于维护和升级
  • 可快速适配新需求(换mask策略、加检测模型等)

下一步你可以尝试:

  • 接入目标检测模型自动识别要删除的物体
  • 增加图像预处理(缩放、裁剪)
  • 做成Docker镜像,一键部署

记住,AI工具的价值不在“能不能用”,而在“能不能规模化使用”。当你能把一个手动操作变成自动流水线,才是真正释放了它的潜力。


获取更多AI镜像

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

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

一键启动.sh脚本太香了!Qwen-Image-2512-ComfyUI上手实录

一键启动.sh脚本太香了!Qwen-Image-2512-ComfyUI上手实录 1. 部署极简,连“环境配置”都省了 如果你还在为部署AI模型头疼——装依赖、配环境、调路径、解决报错……那这次真的可以松一口气了。阿里开源的 Qwen-Image-2512-ComfyUI 镜像,把…

作者头像 李华
网站建设 2026/4/10 13:45:38

TV-Bro智能电视浏览器终极指南:5分钟快速上手遥控器操作

TV-Bro智能电视浏览器终极指南:5分钟快速上手遥控器操作 【免费下载链接】tv-bro Simple web browser for android optimized to use with TV remote 项目地址: https://gitcode.com/gh_mirrors/tv/tv-bro TV-Bro是一款专为智能电视设计的Android网络浏览器&…

作者头像 李华
网站建设 2026/4/13 16:07:26

Gopher360:重新定义客厅电脑操控体验的智能解决方案

Gopher360:重新定义客厅电脑操控体验的智能解决方案 【免费下载链接】Gopher360 Gopher360 is a free zero-config app that instantly turns your Xbox 360, Xbox One, or even DualShock controller into a mouse and keyboard. Just download, run, and relax. …

作者头像 李华
网站建设 2026/4/16 12:33:20

终极指南:5个免费AI技巧让Audacity音频处理效率翻倍!

终极指南:5个免费AI技巧让Audacity音频处理效率翻倍! 【免费下载链接】openvino-plugins-ai-audacity A set of AI-enabled effects, generators, and analyzers for Audacity. 项目地址: https://gitcode.com/gh_mirrors/op/openvino-plugins-ai-auda…

作者头像 李华
网站建设 2026/4/14 5:42:12

FSMN-VAD与WebRTC结合:浏览器端离线检测方案

FSMN-VAD与WebRTC结合:浏览器端离线检测方案 1. 为什么需要浏览器端离线VAD? 你有没有遇到过这样的问题:做语音识别前,得先把一段5分钟的录音手动剪掉开头30秒静音、中间7次停顿、结尾20秒空白?或者在做实时语音唤醒…

作者头像 李华
网站建设 2026/4/16 23:24:11

3步搞定验证码识别模型移动端部署:从8MB到2MB的极致优化

3步搞定验证码识别模型移动端部署:从8MB到2MB的极致优化 【免费下载链接】ddddocr 带带弟弟 通用验证码识别OCR pypi版 项目地址: https://gitcode.com/gh_mirrors/dd/ddddocr 你是否曾经在移动端集成验证码识别功能时,被模型体积大、加载慢的问题…

作者头像 李华