CodeFormer 图像修复工具

基于 ONNX Runtime 和 OpenCvSharp 的人脸图像修复 WinForms 应用程序,将 C++ 实现移植到 C# .NET Framework 平台。

效果展示

在这里插入图片描述

📖 算法原理

CodeFormer 模型

CodeFormer 是一种强大的人脸修复算法,基于 Transformer 架构,能够:

  • 人脸修复:恢复模糊、低质量的人脸图像
  • 细节增强:重建丢失的面部细节和纹理
  • 降噪处理:去除图像中的噪声和压缩伪影

处理流程

输入图像 → 预处理 → ONNX推理 → 后处理 → 输出结果

💻 环境要求

开发环境

  • IDE:Visual Studio 2019 或更高版本
  • .NET Framework:4.7.2
  • C# 语言版本:6.0
  • 平台目标:x64

运行时依赖

  • OpenCvSharp:4.13.0
    • OpenCvSharp.dll
    • OpenCvSharp.Extensions.dll
  • ONNX Runtime:1.20.1
    • Microsoft.ML.OnnxRuntime.dll
    • CUDA 相关 DLL(如果使用 GPU 加速)

GPU 加速(可选)

如果使用 CUDA 加速,需要安装:

  • NVIDIA CUDA Toolkit:12.x
  • cuDNN:9.x
  • 支持的 GPU:支持 CUDA 的 NVIDIA 显卡

系统要求

  • 操作系统:Windows 10/11 (64位)
  • 内存:至少 4GB RAM
  • 磁盘空间:至少 2GB(包含模型文件)

📦 安装步骤

1. 克隆或下载项目

# 如果从 Git 仓库获取
git clone <repository-url>
cd FIRC

2. 准备模型文件

确保模型文件已放置在正确位置:

FIRC/bin/x64/Release/weights/codeformer.onnx

模型文件大小约为 360MB。如果缺失,需要从官方渠道下载。

3. 检查依赖 DLL

确保以下 DLL 文件存在于 bin/x64/Release/ 目录:

OpenCvSharp 相关:

  • OpenCvSharp.dll
  • OpenCvSharp.Extensions.dll
  • dll/x64/OpenCvSharpExtern.dll
  • dll/x64/opencv_videoio_ffmpeg4130_64.dll

ONNX Runtime 相关:

  • Microsoft.ML.OnnxRuntime.dll
  • onnxruntime.dll
  • onnxruntime_providers_cuda.dll(CUDA 支持)
  • onnxruntime_providers_shared.dll
  • onnxruntime_providers_tensorrt.dll

CUDA 相关(如果使用 GPU):

  • cublas64_12.dll
  • cublasLt64_12.dll
  • cudart64_12.dll
  • cudnn64_9.dll
  • 以及其他 cudnn_*.dll 文件

4. 打开项目

在 Visual Studio 2019 中打开解决方案文件:

FIRC.sln

🚀 运行步骤

方式一:Visual Studio 运行

  1. 在 Visual Studio 中打开项目
  2. 选择配置:Release | x64
  3. F5 或点击"启动"按钮运行

方式二:直接运行可执行文件

  1. 导航到输出目录:
    cd bin/x64/Release
    
  2. 双击运行:
    FIRC.exe
    

使用流程

  1. 上传图片

    • 点击"上传图片"按钮
    • 选择要修复的图像文件(支持 BMP、JPG、JPEG、TIFF、PNG)
  2. 加载模型

    • 选择是否启用"CUDA 加速"(需要 GPU 环境)
    • 点击"加载模型"按钮
    • 等待模型加载完成(状态栏显示"模型已加载 [CPU/CUDA]")
  3. 开始推理

    • 点击"开始推理"按钮
    • 等待处理完成
    • 查看结果和耗时统计
  4. 查看结果

    • 左侧显示原始图像
    • 右侧显示修复后的结果
    • 底部显示推理耗时(毫秒)

⚠️ 注意事项

CUDA GPU 加速

  1. 首次使用 CUDA

    • 确保已安装 CUDA Toolkit 12.x 和 cuDNN 9.x
    • 将 CUDA bin 目录添加到系统 PATH 环境变量
    • 如果 CUDA 初始化失败,程序会自动回退到 CPU 模式
  2. 性能对比

    • CPU 模式:推理时间约 5-15 秒(取决于 CPU 性能)
    • CUDA 模式:推理时间约 0.5-2 秒(取决于 GPU 性能)

图像要求

  • 输入尺寸:任意尺寸(程序会自动缩放到 512×512)
  • 输出尺寸:与输入尺寸相同
  • 推荐格式:PNG(无损)或高质量 JPEG
  • 最大分辨率:建议不超过 4000×4000 像素

内存使用

  • 模型加载约占用 400-500MB 内存
  • 推理过程临时内存约 200-300MB
  • 处理大图像时可能需要更多内存

常见问题

Q: 提示"模型文件不存在"
A: 检查 bin/x64/Release/weights/codeformer.onnx 是否存在

Q: CUDA 加速不生效
A:

  • 确认 GPU 支持 CUDA
  • 检查 CUDA 和 cuDNN 版本是否匹配
  • 查看 CUDA DLL 是否完整

Q: 推理速度慢
A:

  • 启用 CUDA 加速
  • 降低输入图像分辨率
  • 关闭其他占用资源的程序

📁 项目结构

FIRC/
├── FIRC.sln                      # Visual Studio 解决方案文件
├── FIRC.csproj                   # 项目配置文件
├── App.config                    # 应用程序配置文件
├── Program.cs                    # 程序入口点
│
├── CodeFormer.cs                 # CodeFormer 模型推理类(核心)
├── Form1.cs                      # 主窗体业务逻辑
├── Form1.Designer.cs             # 主窗体 UI 设计
├── Form1.resx                    # 窗体资源文件
│
├── Properties/                   # 项目属性
│   ├── AssemblyInfo.cs           # 程序集信息
│   ├── Resources.resx            # 资源文件
│   ├── Resources.Designer.cs     # 资源设计器
│   ├── Settings.settings         # 设置文件
│   └── Settings.Designer.cs      # 设置设计器
│
├── images/                       # 测试图像目录
│   ├── 41.png
│   ├── naruto.jpg
│   └── ...(其他测试图像)
│
├── bin/x64/Release/              # 编译输出目录
│   ├── FIRC.exe                  # 可执行文件
│   ├── FIRC.pdb                  # 调试符号
│   │
│   ├── weights/                  # 模型文件目录
│   │   └── codeformer.onnx       # CodeFormer ONNX 模型 (360MB)
│   │
│   ├── dll/x64/                  # OpenCvSharp 原生 DLL
│   │   ├── OpenCvSharpExtern.dll
│   │   └── opencv_videoio_ffmpeg4130_64.dll
│   │
│   ├── OpenCvSharp.dll           # OpenCvSharp 托管库
│   ├── OpenCvSharp.Extensions.dll
│   ├── Microsoft.ML.OnnxRuntime.dll
│   ├── onnxruntime.dll           # ONNX Runtime 核心
│   │
│   ├── CUDA 相关 DLL/            # GPU 加速支持
│   │   ├── cublas64_12.dll
│   │   ├── cudart64_12.dll
│   │   ├── cudnn64_9.dll
│   │   └── ...(其他 CUDA/cuDNN DLL)
│   │
│   └── 其他依赖 DLL/
│       ├── System.Buffers.dll
│       ├── System.Memory.dll
│       └── ...(.NET 运行时库)
│
├── main.cpp                      # 原始 C++ 实现参考代码
├── README.md                     # 项目说明文档(本文件)
└── 使用说明.txt                  # 简单使用说明

特别注意

codeformer人脸修复正确步骤是:第一步检测人脸然后裁剪出人脸进行修复,而不是对着整个图像进行人脸修复,此外不能对涂抹损坏区域进行修复,因为这个模型只是面向人脸修复,模糊变清晰,实际上codeformer提供还有face inpainting模型和图像人脸上色模型。比如你直接用下面图像修复是错误做法
失败修复示例1:不能修复涂抹区域因为模型没有使用inpainting模型
在这里插入图片描述
失败修复示例2:不能对整个图像直接修复,要先检测出人脸才行
在这里插入图片描述

📝 版本信息

  • 当前版本:1.0.0
  • 框架版本:.NET Framework 4.7.2
  • C# 语法版本:6.0

📄 许可证

本项目仅供学习和研究使用。CodeFormer 模型遵循其原始许可证。

🙏 致谢

  • CodeFormer 原作者:提供强大的图像修复模型
  • OpenCvSharp 团队:优秀的 OpenCV .NET 封装
  • ONNX Runtime 团队:高效的跨平台推理引擎
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐