如何分享GPEN处理结果?批量导出与水印添加教程
你刚用GPEN把一张模糊的老照片修复得神采奕奕,心里美滋滋——可下一秒就卡住了:怎么把结果发给朋友?怎么一次性处理几十张照片?怎么加上“私有作品”水印防止被乱用?别急,这篇教程就是为你写的。不讲原理、不堆参数,只说你能立刻上手的实操方法。从单张导出到批量处理,从加文字水印到图片角标,全部配好可复制的命令和代码,打开终端就能跑。
1. GPEN输出文件在哪?先搞清基础路径
很多人第一次运行完python inference_gpen.py,满屏日志刷过去,却找不到生成的图在哪。其实GPEN默认把结果直接扔在项目根目录下,名字还带前缀output_,非常直白。但如果你要批量处理或加水印,光靠默认行为远远不够——得先理清三个关键位置:
1.1 默认输出路径与命名逻辑
进入GPEN代码目录后,所有推理结果都默认保存在/root/GPEN/下,文件名由输入决定:
- 不指定输入时(
python inference_gpen.py)→ 输出output_Solvay_conference_1927.png - 指定输入为
./my_photo.jpg→ 输出output_my_photo.jpg - 指定
-o custom_name.png→ 输出custom_name.png
注意:它不会自动创建output/子文件夹,所有图都平铺在/root/GPEN/里。几十张图混在一起,找起来费劲,分享时也容易漏传。
1.2 推荐做法:统一重定向到专用输出目录
与其等它随便扔,不如我们主动指定一个干净的出口。只需加一个--output_dir参数(GPEN原生支持),就能把所有结果归拢到一处:
# 创建专用输出文件夹 mkdir -p /root/GPEN/output_batch # 批量处理当前目录下所有jpg/png,并存入output_batch python inference_gpen.py --input ./input_photos/ --output_dir ./output_batch/这样一来,所有修复图都规整地躺在/root/GPEN/output_batch/里,命名还保持原样(如my_photo.jpg→output_batch/my_photo.jpg),后续打包、加水印、上传都省心。
1.3 验证输出是否成功的小技巧
别光信日志说“Done”。执行完命令后,快速检查两件事:
- 进入输出目录:
ls -l ./output_batch/,看文件数量是否匹配输入数量; - 抽查一张图是否真能打开:
display ./output_batch/my_photo.jpg(需安装ImageMagick)或直接用eog(Eye of GNOME)图形查看器。
如果看到清晰人脸、无黑边、无报错提示,说明路径和格式都没问题——可以放心往下走批量和水印环节了。
2. 一次处理多张照片:真正的批量导出方案
单张修复是练手,批量处理才是工作流。GPEN本身支持文件夹输入,但默认不递归子目录、不自动跳过非图文件、也不告诉你哪张失败了。我们来补上这些“缺失的拼图”,打造一个稳、快、可追溯的批量导出流程。
2.1 基础批量:用通配符+循环搞定日常需求
最轻量的方法,适合几十张以内、格式统一(全为.jpg或.png)的场景。不用改代码,纯Shell命令搞定:
# 进入GPEN目录 cd /root/GPEN # 创建输出文件夹 mkdir -p output_bulk # 对当前目录下所有jpg文件批量修复,保留原名 for img in *.jpg; do [[ -f "$img" ]] || continue python inference_gpen.py --input "$img" --output_dir ./output_bulk/ done # 同样处理png(可选) for img in *.png; do [[ -f "$img" ]] || continue python inference_gpen.py --input "$img" --output_dir ./output_bulk/ done小贴士:[[ -f "$img" ]] || continue这行是安全阀,避免通配符没匹配到文件时误触发命令。
2.2 进阶批量:带错误记录与进度反馈的Python脚本
当照片超过百张,或来源杂(含bmp、webp)、质量参差时,Shell循环容易“静默失败”。我们写个简短Python脚本,自动过滤无效文件、记录失败项、显示进度条:
# 保存为 batch_export.py,放在 /root/GPEN/ 目录下 import os import glob import subprocess from pathlib import Path from tqdm import tqdm # 已预装,无需额外安装 INPUT_DIR = "./input_photos" OUTPUT_DIR = "./output_batch" LOG_FILE = "batch_log.txt" # 确保输出目录存在 Path(OUTPUT_DIR).mkdir(exist_ok=True) # 支持的图片扩展名 SUPPORTED_EXTS = {'.jpg', '.jpeg', '.png', '.bmp', '.webp'} # 收集所有有效图片路径 all_images = [] for ext in SUPPORTED_EXTS: all_images.extend(glob.glob(f"{INPUT_DIR}/**/*{ext}", recursive=True)) all_images = [p for p in all_images if os.path.isfile(p)] print(f"共找到 {len(all_images)} 张待处理图片") failed_list = [] # 逐张处理,带进度条 for img_path in tqdm(all_images, desc="正在修复"): try: # 构造输出路径:保持相对结构,避免重名 rel_path = os.path.relpath(img_path, INPUT_DIR) out_name = os.path.splitext(rel_path)[0] + "_enhanced" + os.path.splitext(rel_path)[1] out_path = os.path.join(OUTPUT_DIR, out_name) os.makedirs(os.path.dirname(out_path), exist_ok=True) # 调用GPEN cmd = ["python", "inference_gpen.py", "--input", img_path, "--output_dir", OUTPUT_DIR] result = subprocess.run(cmd, capture_output=True, text=True, timeout=300) if result.returncode != 0: raise RuntimeError(f"GPEN执行失败: {result.stderr[:200]}") except Exception as e: failed_list.append(f"{img_path} -> {str(e)}") # 写入日志 with open(LOG_FILE, "w") as f: f.write("=== 批量处理日志 ===\n") f.write(f"总数量: {len(all_images)}\n") f.write(f"失败数量: {len(failed_list)}\n\n") if failed_list: f.write("失败详情:\n") for item in failed_list: f.write(item + "\n") print(f"\n 处理完成!成功结果见 {OUTPUT_DIR}/") if failed_list: print(f" 共 {len(failed_list)} 张失败,详情见 {LOG_FILE}")运行方式:
cd /root/GPEN python batch_export.py效果:自动遍历input_photos下所有子文件夹,修复后按原路径结构存入output_batch,失败项单独记入batch_log.txt,再也不怕“修着修着就断了”。
3. 给修复图加水印:文字+图片双模式实战
修复好的图很珍贵,发朋友圈、交客户、传网盘前,加个水印既是版权声明,也是专业体现。GPEN本身不带水印功能,但我们用系统级工具快速补上——两种方式,任你选:
3.1 文字水印:简洁有力,一行命令搞定
用convert(ImageMagick核心命令)给所有图加半透明文字水印,位置、大小、颜色全可控:
# 进入输出目录 cd /root/GPEN/output_batch # 给所有jpg/png加右下角文字水印 for img in *.jpg *.png; do [[ -f "$img" ]] || continue convert "$img" \ -gravity southeast \ -pointsize 24 \ -fill 'rgba(255,255,255,0.3)' \ -annotate +30+30 'AI修复@2024' \ "watermarked_$img" done参数说明:
-gravity southeast:锚点设为右下角-pointsize 24:字体大小(根据图尺寸调整,大图可用32)-fill 'rgba(255,255,255,0.3)':白色+30%透明度,不遮挡主体-annotate +30+30:距右下角X偏移30px、Y偏移30px
效果:每张图右下角浮现淡白色“AI修复@2024”,低调不抢戏,但清晰可辨。
3.2 图片水印:用Logo角标提升专业感
文字水印适合快速标注,但若你有品牌Logo、工作室标识,图片水印更显质感。准备一张PNG格式的透明Logo(推荐尺寸200×200px以内),然后:
# 假设logo.png放在 /root/GPEN/ 目录下 cd /root/GPEN/output_batch for img in *.jpg *.png; do [[ -f "$img" ]] || continue convert "$img" \ \( /root/GPEN/logo.png -resize 15% \) \ -gravity southeast -geometry +20+20 -composite \ "logoed_$img" done关键点:
-resize 15%:按原图宽度15%缩放Logo,自适应不同尺寸照片-geometry +20+20:距右下角20px留白,避免贴边-composite:合成模式,自动处理PNG透明通道
效果:右下角嵌入你的专属Logo,大小适中、边缘自然,客户一眼认出是你做的。
4. 一键打包分享:压缩+命名+生成说明文档
修复+加水印后,最后一步是“交付”。别再手动选一堆图、右键压缩、另存为……我们用脚本全自动完成:
4.1 三步打包脚本:压缩包+说明页+版本标记
创建make_share_package.py:
# 保存为 /root/GPEN/make_share_package.py import os import zipfile import datetime from pathlib import Path OUTPUT_DIR = "./output_batch" WATERMARKED_DIR = "./output_watermarked" SHARE_DIR = "./share_package" # 确保水印目录存在(假设已运行3.1或3.2) if not os.path.exists(WATERMARKED_DIR): print("请先运行水印脚本,确保 watermarked_*.jpg/png 存在于 output_batch 目录") exit(1) # 创建分享包目录 Path(SHARE_DIR).mkdir(exist_ok=True) # 生成说明文档 README.md today = datetime.datetime.now().strftime("%Y-%m-%d %H:%M") with open(f"{SHARE_DIR}/README.md", "w") as f: f.write(f"# GPEN人像修复成果包\n\n") f.write(f"- 处理日期:{today}\n") f.write(f"- 使用模型:GPEN Portrait Enhancement (v1.0)\n") f.write(f"- 处理数量:{len([x for x in os.listdir(WATERMARKED_DIR) if x.startswith('watermarked_') or x.startswith('logoed_')])} 张\n") f.write(f"- 水印类型:文字水印(AI修复@2024)\n\n") f.write("> 提示:所有图片均已添加不可去除水印,仅限授权使用。\n") # 打包所有水印图 zip_path = f"{SHARE_DIR}/GPEN_修复成果_{today.replace(' ', '_').replace(':', '-')}.zip" with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zf: for file in os.listdir(WATERMARKED_DIR): if file.startswith(('watermarked_', 'logoed_')): zf.write(f"{WATERMARKED_DIR}/{file}", file) print(f" 分享包已生成:{zip_path}") print(f" 包含:{len([x for x in os.listdir(WATERMARKED_DIR) if x.startswith(('watermarked_', 'logoed_'))])} 张水印图 + README.md")运行:
cd /root/GPEN python make_share_package.py📦 输出:一个带时间戳的ZIP包,内含所有水印图+自动生成的README.md,双击解压即用,专业感拉满。
5. 实用技巧锦囊:让分享更高效、更安全
最后送上几个老手私藏的“小动作”,不写代码,但极大提升日常效率:
5.1 快速预览修复效果:免开GUI,终端直出缩略图
在终端里看图太慢?用ls+identify快速验货:
# 查看所有修复图的尺寸与格式(确认是否高清) identify output_batch/*.jpg | head -10 # 生成100px宽缩略图,存入thumb/目录,方便快速浏览 mkdir -p thumb mogrify -path thumb -thumbnail 100x output_batch/*.jpg5.2 防误删保护:给输出目录加只读属性
怕手滑rm -rf误删成果?临时加个保护锁:
# 设置output_batch为只读(仅当前用户) chmod -R u-w output_batch/ # 解除保护(需要时) chmod -R u+w output_batch/5.3 分享前自查清单(30秒搞定)
每次发图前,花30秒扫一遍,零失误:
- [ ] 文件名是否去除了
output_前缀?(避免暴露技术路径) - [ ] 水印位置是否避开人脸关键区域?(右下角比左上角更安全)
- [ ] ZIP包内是否有
README.md?(客户第一眼看到的就是它) - [ ] 抽查1张图:双击能否正常打开?放大看细节是否锐利?
总结
现在你手里握着一套完整的GPEN成果交付流水线:
定位清楚——知道图在哪、怎么改输出路径;
批量无忧——Shell循环应付日常,Python脚本扛住百张压力;
水印随心——一行命令加文字,三行代码嵌Logo;
交付专业——自动打包、带时间戳、附说明文档;
细节到位——缩略图预览、防误删、自查清单全齐备。
这不再是“跑通模型”的技术验证,而是真正能融入你工作流的生产力工具。下次朋友甩来一张模糊合影,你不再需要解释“这个模型很厉害”,而是直接发过去一个带Logo、有日期、打开即惊艳的ZIP包——这就是技术落地最踏实的样子。
--- > **获取更多AI镜像** > > 想探索更多AI镜像和应用场景?访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_source=mirror_blog_end),提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。