原文地址:https://itxiaozhang.com/iopaint-fixed-mask-batch-inpainting-cpu/
如果您需要远程电脑维修或者编程开发,请加我微信咨询。

一、需求分析

在批量处理图片的实际工作中,常会遇到统一位置的水印(如顶部编号、底部标识等)。手动擦除效率低,借助 AI 图像修复工具如 IOPaint(原 Lama Cleaner)可实现自动化处理。然而其默认使用 Web 界面,不能直接批处理,因此本文目标是:

  • 批量处理整目录图片
  • 使用一个固定掩膜去除相同水印位置
  • 全自动运行,无需交互操作
  • 使用 CPU,兼容所有普通电脑
  • 输出保持原分辨率与文件名
  • 生成完整处理日志

二、解决思路

1. 工具选择

使用开源图像修复工具 IOPaint,支持命令行调用与 AI 修复模型(默认 lama),适合图像 inpainting 任务,兼容 CPU 和 GPU。

2. 执行流程

  • 安装 Python 与 IOPaint CLI
  • 使用 Lama Cleaner 在线版手动生成统一的掩膜图
  • 用 Python 脚本批量执行 CLI 命令
  • 支持多进程并发,加速 CPU 处理

三、掩膜文件准备与优化

1. 掩膜制作

打开 Lama Cleaner Hugging Face 页面,加载任意一张图,进行掩膜绘制:

  • 勾选「Download Mask」
  • 勾选「Manual Inpainting Mode」
  • 用画笔框选需要去除的水印区域
  • 点击「Download Mask」按钮下载掩膜图

掩膜图与原图尺寸一致,白色区域为需修复部分。

2. 掩膜要求

  • 保存为 fixed_mask.jpg,与原图尺寸相同(如 960x8049)
  • 白色区域表示需要修复,黑色保留不变
  • 掩膜应统一应用于所有图像

四、脚本开发与并行优化(仅使用 CPU)

为提升批量处理效率,我们开发了一个支持多进程并发的 Python 脚本。虽然运行在 CPU 上,但并行仍能显著提速。

📁 文件结构

1
2
3
4
5
6

项目目录/
├─ input/              # 原始图片目录
├─ output/             # 输出目录(自动创建)
├─ fixed\_mask.jpg      # 掩膜图
├─ parallel\_iopaint.py # 主执行脚本

📜 脚本核心内容(简要)

  • 遍历 input/ 目录中的图片
  • 为每张图调用 IOPaint CLI 命令行工具
  • 使用 multiprocessing.Pool 并发处理多个任务
  • 日志记录每张图是否成功及处理耗时

🔧 主要命令调用

1
2
3
4
5
6
7
8
subprocess.run([
    "iopaint", "run",
    "--model", "lama",
    "--device", "cpu",           # 明确使用 CPU,兼容性好
    "--image", input_path,
    "--mask", mask_path,
    "--output", output_dir
])

五、使用说明

1. 环境安装(无 Anaconda,纯 pip)

确保已安装 Python 3.9/3.10,并添加到 PATH:

1
2
pip install torch torchvision
pip install iopaint

无需 GPU、CUDA,直接使用 CPU 即可。

2. 执行脚本

将图片放入 input/,掩膜命名为 fixed_mask.jpg,运行命令:

1
python parallel_iopaint.py

所有图片将自动处理,输出保存在 output/,日志记录写入 process.log

视频版本