File size: 2,352 Bytes
2ecc7ab |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
import argparse
import os
import sys
import shutil
import subprocess
def run_inference(input_path, output_path):
# 1. 获取绝对路径
cwd = os.path.dirname(os.path.abspath(__file__)) # 当前脚本所在目录
python_exe = sys.executable # 当前环境的 python
inference_script = os.path.join(cwd, "inference_codeformer.py")
print(f"🚀 [CodeFormer] 启动中...")
# 2. 准备临时输入目录 (CodeFormer 喜欢读文件夹)
# 它的逻辑是:输入文件夹 -> 结果文件夹
temp_in = os.path.join(cwd, "temp_worker_input")
if os.path.exists(temp_in): shutil.rmtree(temp_in)
os.makedirs(temp_in, exist_ok=True)
# 复制图片进去
img_name = os.path.basename(input_path)
shutil.copy(input_path, os.path.join(temp_in, img_name))
# 3. 构造命令
# -w 0.5: 平衡画质和保真度
# --face_upsample: 这一步会把人脸贴回原图,这是我们需要的
cmd = [
python_exe,
inference_script,
"-w", "0.5",
"--input_path", temp_in,
"--face_upsample"
]
# 4. 执行命令
try:
# cwd=cwd 保证它能找到 weights 文件夹
subprocess.run(cmd, cwd=cwd, check=True)
# 5. 提取结果
# 默认结果路径: results/temp_worker_input_0.5/final_results/图片名.png
res_dir = os.path.join(cwd, "results", "temp_worker_input_0.5", "final_results")
res_file = os.path.join(res_dir, img_name)
if os.path.exists(res_file):
os.makedirs(os.path.dirname(output_path), exist_ok=True)
shutil.copy(res_file, output_path)
print(f"✅ CodeFormer 处理完成: {output_path}")
else:
print(f"❌ 未找到结果文件: {res_file}")
print(" (可能是因为图片里没有人脸,或者模型下载失败)")
except Exception as e:
print(f"❌ 执行出错: {e}")
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('-i', '--input', required=True)
parser.add_argument('-o', '--output', required=True)
parser.add_argument('-m', '--model', help="Ignored")
args = parser.parse_args()
run_inference(args.input, args.output) |