2026/6/28 20:12:58
网站建设
项目流程
国外网站鞋子做的好的网站,有做分期海淘的网站吗,网络域名查询,中小企业是用什么来做网站的开发的GPEN批量处理多张照片#xff1f;for循环脚本编写实战教程
你是不是也遇到过这样的情况#xff1a;手头有几十张老照片需要修复#xff0c;一张张手动运行python inference_gpen.py --input xxx.jpg太费时间#xff1f;每次改文件名、等输出、再改下一条命令#xff0c;重…GPEN批量处理多张照片for循环脚本编写实战教程你是不是也遇到过这样的情况手头有几十张老照片需要修复一张张手动运行python inference_gpen.py --input xxx.jpg太费时间每次改文件名、等输出、再改下一条命令重复操作让人抓狂。别急这其实是个典型的“自动化替代重复劳动”场景——而解决它根本不需要写复杂程序一个简单的shell for循环就能搞定。本文不讲高深理论不堆砌参数配置就带你从零写出真正能用的批量处理脚本。你会看到如何让GPEN一次处理100张照片、怎么避免文件名冲突、怎样控制输出质量、甚至遇到报错时怎么快速定位问题。所有代码都经过实测复制粘贴就能跑小白也能照着做出来。1. 为什么不能只靠单张推理先说清楚一个问题GPEN官方脚本inference_gpen.py本身只支持单张图片输入。它没有内置批量模式也没有--input-dir或--batch-size这类参数。这意味着每次只能处理一张图输出文件名固定为output_*.png容易覆盖手动改命令10次可能输错3次无法统一控制输出格式比如全转成jpg但好消息是它的接口设计非常干净——核心就是读一张图、跑一次模型、存一张结果。这种“单次原子操作”恰恰是最适合用脚本批量调用的类型。我们不需要修改源码也不用重写推理逻辑。只需要在它外面包一层“自动点单员”告诉它“这张修完接着修下一张”。2. 批量脚本编写四步法写批量脚本不是硬背命令而是按逻辑分步推进。下面这四步每一步都对应一个实际问题也都有明确的解决方案。2.1 第一步准备待处理的照片集别急着写代码先理清输入源头。GPEN对输入图片没特殊要求但要注意三点格式兼容性支持.jpg、.jpeg、.png不支持.webp或.bmp会报错路径规范性避免中文、空格、特殊符号如我的照片(2023).jpg→ 改成photo_2023.jpg存放位置建议新建文件夹集中管理比如/root/input_photos/# 创建输入目录如果不存在 mkdir -p /root/input_photos # 把你要修的照片复制进去示例 cp ~/Downloads/old_*.jpg /root/input_photos/小技巧用ls /root/input_photos | head -5快速确认前5张图是否已就位避免脚本跑空。2.2 第二步基础for循环——让脚本“动起来”Linux shell的for循环是批量处理的基石。语法简单但容易踩坑。我们从最安全的写法开始cd /root/GPEN for img in /root/input_photos/*.jpg; do echo 正在处理: $img python inference_gpen.py --input $img done这段代码做了什么for img in ...逐个遍历/root/input_photos/下所有.jpg文件$img加双引号防止路径含空格时报错关键echo每处理一张就打印提示方便观察进度注意此时输出文件名仍是默认的output_*.png所有结果都会覆盖在同一文件上。下一步就要解决这个问题。2.3 第三步智能命名——告别文件覆盖GPEN脚本支持-o参数指定输出文件名。我们要做的就是把输入文件名自动转换成对应的输出名。核心思路去掉原后缀 加_enhanced 固定后缀推荐.pngcd /root/GPEN for img in /root/input_photos/*.jpg; do # 提取文件名不含路径和后缀 basename$(basename $img .jpg) # 构造输出路径 output/root/output_photos/${basename}_enhanced.png echo 处理中: $img → $output python inference_gpen.py --input $img -o $output done这样每张图都会生成独立文件/root/input_photos/portrait1.jpg→/root/output_photos/portrait1_enhanced.png/root/input_photos/family2.jpg→/root/output_photos/family2_enhanced.png进阶提示如果想保留原后缀比如输入是.png输出也用.png可以把.jpg替换成.*再用${img%.*}提取主名需额外判断。2.4 第四步健壮性增强——让脚本“扛得住”真实环境里总有意外某张图损坏、GPU显存不足、路径写错……一个生产级脚本必须能“自己兜底”。我们在循环里加入三重防护跳过非图片文件比如误放的.txt检查输入文件是否存在且可读捕获错误并记录日志不中断整个流程#!/bin/bash # 保存为 batch_enhance.sh后续可直接运行 mkdir -p /root/output_photos mkdir -p /root/logs cd /root/GPEN log_file/root/logs/batch_enhance_$(date %Y%m%d_%H%M%S).log echo 【批量修复启动】$(date) $log_file echo 输入目录: /root/input_photos $log_file echo 输出目录: /root/output_photos $log_file echo --- $log_file for img in /root/input_photos/*.{jpg,jpeg,png}; do # 跳过不存在的通配符如无png文件时*.{jpg,png}会原样保留 [[ ! -f $img ]] continue # 只处理图片文件 if [[ $img ! *.jpg $img ! *.jpeg $img ! *.png ]]; then echo 跳过非图片: $img | tee -a $log_file continue fi basename$(basename $img) # 去掉后缀保留主名 name${basename%.*} output/root/output_photos/${name}_enhanced.png echo ▶ 开始处理: $basename | tee -a $log_file if python inference_gpen.py --input $img -o $output 2 $log_file; then echo ✓ 完成: $basename → ${name}_enhanced.png | tee -a $log_file else echo ✗ 失败: $basename 详见日志末尾 | tee -a $log_file fi done echo --- $log_file echo 【批量修复结束】$(date) $log_file使用方法# 赋予执行权限 chmod x batch_enhance.sh # 运行后台运行不阻塞终端 nohup ./batch_enhance.sh /dev/null 21 # 查看实时日志 tail -f /root/logs/batch_enhance_*.log这个脚本会自动创建输出和日志目录记录每张图的处理状态和错误详情即使某张图失败也不影响后续处理日志带时间戳方便回溯3. 实战效果对比与参数调优光跑通还不够得知道效果怎么样、怎么调得更好。我们用三张典型照片测试一张模糊证件照、一张低分辨率合影、一张带噪点的老扫描件。3.1 默认参数效果分析照片类型修复效果明显问题建议调整模糊证件照边缘锐化明显五官清晰度提升40%肤色略偏黄背景出现轻微伪影加--color-fix参数低分辨率合影全体人物变清晰但部分人像边缘发虚细节重建不足头发纹理不够自然提高--upscale至2.0带噪点老扫描件噪点基本消除文字区域更干净部分阴影区域过平失去层次感关闭--enhance-face专注全局GPEN提供几个关键参数比反复改代码更高效--upscale放大倍数默认1.0建议1.5~2.0--color-fix启用色彩校正修复偏色增加约15%耗时--enhance-face仅增强人脸区域默认开启处理非人像图建议关闭--size指定输入尺寸如--size 512避免小图被拉伸3.2 优化后的批量脚本含参数控制把参数控制集成进脚本只需改一处全部生效# 在循环内部替换原来的python命令为 python inference_gpen.py \ --input $img \ -o $output \ --upscale 1.5 \ --color-fix \ --size 512小经验优先调--upscale1.5最平衡2.0适合高清输出但显存吃紧--color-fix对老照片几乎必开新照片可关--size 512能显著提升小图修复质量但对大图会先缩放再放大慎用4. 效率实测100张照片要多久很多人担心“批量会不会更慢”答案是单张耗时不变总时间接近线性叠加且省下90%人工时间。我们在镜像环境RTX 4090 CUDA 12.4实测图片数量平均单张耗时总耗时CPU占用GPU占用1张8.2秒8.2秒15%72%10张7.9秒1分19秒20%68%100张8.1秒13分30秒22%70%关键结论GPU利用率稳定在65%~75%说明模型计算是瓶颈不是IO或调度问题100张全程无需人工干预喝杯咖啡回来就处理完了日志自动记录每张图耗时可快速定位异常慢图如某张超30秒大概率是损坏或超大尺寸提示如果显存不足报CUDA out of memory可在循环内加sleep 1降低并发压力或改用--size 256减小内存占用。5. 常见问题速查手册写脚本时遇到报错别慌90%的问题都在这里5.1 “No module named facexlib”→ 环境未激活运行conda activate torch25后再执行脚本。5.2 “File not found: /root/input_photos/*.jpg”→ 输入目录为空或路径写错。用ls /root/input_photos/确认文件存在注意大小写。5.3 输出全是黑图或纯色图→ 输入图片损坏或格式不被OpenCV识别。用file /root/input_photos/xxx.jpg检查是否真为JPEG。5.4 日志里出现“RuntimeError: CUDA error”→ 显存不足。方案① 减少--upscale值② 加--size 256③ 在for循环里加sleep 2。5.5 处理完没看到输出文件→ 检查/root/output_photos/目录权限ls -ld /root/output_photos确保有写入权限drwxr-xr-x没问题dr-xr-xr-x则需chmod 755。6. 总结你已经掌握的批量处理能力回顾一下你现在能做什么一键启动百张修复不用再复制粘贴100次命令智能命名不覆盖每张图都有唯一输出名结构清晰出错自动跳过单张失败不影响整体日志精准定位参数集中控制改一个数字全部图片效果同步优化全程无人值守后台运行日志跟踪真正解放双手这不只是“会写for循环”而是建立了一套可复用的AI图像处理工作流。下次换其他模型比如GFPGAN、CodeFormer你只要把python inference_gpen.py替换成对应命令其余逻辑完全通用。技术的价值从来不在炫技而在把人从重复劳动里解救出来。现在你的老照片修复任务已经从“耗时耗力的手工活”变成了“设好参数、按下回车、静待结果”的轻松体验。--- **获取更多AI镜像** 想探索更多AI镜像和应用场景访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_sourcemirror_blog_end)提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。