news 2026/5/6 8:05:56

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/30 5:13:42

Alist桌面管理器终极使用指南:5分钟快速掌握核心功能

Alist桌面管理器终极使用指南:5分钟快速掌握核心功能 【免费下载链接】alisthelper Alist Helper is an application developed using Flutter, designed to simplify the use of the desktop version of alist. It can manage alist, allowing you to easily start…

作者头像 李华
网站建设 2026/5/1 9:51:35

帧级别识别太慢?Emotion2Vec+ Large推理效率优化实战教程

帧级别识别太慢?Emotion2Vec Large推理效率优化实战教程 你是不是也遇到过这种情况:用 Emotion2Vec Large 做语音情感分析时,选择“帧级别”识别,结果等了十几秒都出不来?而“整句级别”却只要不到1秒。明明功能更细&…

作者头像 李华
网站建设 2026/5/1 19:17:17

TurboDiffusion城市规划案例:建筑漫游动画快速生成教程

TurboDiffusion城市规划案例:建筑漫游动画快速生成教程 1. 引言:让城市设计“动”起来 你有没有想过,只需一段文字描述或一张静态效果图,就能自动生成一段流畅的建筑漫游视频?这不再是科幻电影里的场景。借助 TurboD…

作者头像 李华
网站建设 2026/4/28 14:06:26

手把手教你部署Open-AutoGLM,轻松打造会干活的AI助理

手把手教你部署Open-AutoGLM,轻松打造会干活的AI助理 你有没有想过,有一天只要说一句“帮我点个外卖”,手机就能自动打开App、选餐厅、下单支付,全程不需要你动手?这听起来像科幻片的场景,现在通过 Open-A…

作者头像 李华
网站建设 2026/5/1 18:36:37

YOLOv9视频文件处理:MP4/AVI格式推理部署案例

YOLOv9视频文件处理:MP4/AVI格式推理部署案例 你是不是也遇到过这样的问题:训练好的YOLOv9模型,想用在真实场景的视频监控、行车记录或者产品演示上,结果发现不会处理MP4或AVI这类常见视频格式?网上教程要么只讲图片检…

作者头像 李华