介绍

微软的 Bringing-Old-Photos-Back-to-Life 是一个开源的项目,它可以实现旧照片修复清晰和去除照片上的划痕。

下载组件

下载PyTorch

https://github.com/vacancy/Synchronized-BatchNorm-PyTorch

将这个项目的代码下载下来,解压缩,将 sync_batchnorm目录 拷贝到: D:\Bringing-Old-Photos-Back-to-Life\Global\detection_models 和 D:\Bringing-Old-Photos-Back-to-Life\Face_Enhancement\models\networks 两个目录下。

下载地标检测预训练模型

http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2 将下载的压缩包解压缩,拷贝到:D:\Bringing-Old-Photos-Back-to-Life\Face_Detection 目录下。

下载预先训练好的模型,把文件face _ Enhancement/check points . zip 下面的/Face _ enhance,并把文件Global/checkpoints.zip下面的。

下载face_checkpoints.zip

https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life/releases/download/v1.0/face_checkpoints.zip

解压到D:\Bringing-Old-Photos-Back-to-Life\Face_Enhancement目录下

下载global_checkpoints.zip

(https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life/releases/download/v1.0/global_checkpoints.zip),展开到D:\Bringing-Old-Photos-Back-to-Life\Global目录下。

下载预先训练好的模型,把文件face _ Enhancement/check points . zip

下面的/Face _ enhance,并把文件Global/checkpoints.zip下面的。

安装依赖项

在资源管理器中,打开D:\Bringing-Old-Photos-Back-to-Life目录,在地址栏中输入cmd并回车,直接进入命令符窗口,并转入到D:\Bringing-Old-Photos-Back-to-Life目录。然后输入以下命令,并回车运行:

1
pip install -r requirements.txt

部署过程中的问题

python版本的问题

我先前用的python版本是3.11,多次尝试未成功后,我依次降低python的版本,直到python3.7.9,才终于安装成功,先前安装不成功的错误提示一直是 ERROR: CMake must be installed,即提示我cmake没有安装,而实际上我反复安装了若干次cmake。

dlib的问题

安装依赖项时,前面一切下载都正常,当Building wheels for collected packages: dlib 时,提示Building wheel for dlib (pyproject.toml) … error,然后安装进程中止。 在网上查看了很多文章,最后按照文章《Py之dlib:Python库之dlib库的简介、安装、使用方法详细攻略》( 作者 一个处女座的程序猿)中的建议,直接在dlib压缩包集合:Index of /files中下载了dblib,并安装(安装命令为:pip install dlib-19.17.99-cp37-cp37m-win_amd64.whl),然后重新运行 pip install -r requirements.txt,重新开始安装。

‘–use-pep517’ 选项的问题

安装后最后,会出现一个黄色的提示信息: DEPRECATION: easydict is being installed using the legacy ‘setup.py install’ method, because it does not have a ‘pyproject.toml’ and the ‘wheel’ package is not installed. pip 23.1 will enforce this behaviour change. A possible replacement is to enable the ‘–use-pep517’ option. Discussion can be found at https://github.com/pypa/pip/issues/8559 尝试在安装命令后面加上 –use-pep51 参数(即命令行为:pip install -r requirements.txt –use-pep51 ),终于成功完成了安装。

源码中的问题

终于安装上了,自然是要测试一下,于是,将需要处理的照片放到 D:\目录中,然后运行了命令(),然而最后的成果照片似乎并没改善,看了下命令行窗口,发现有提示:

1
2
3
4
5
6
7
Running Stage 4: Blending
Traceback (most recent call last):
File “align_warp_back_multiple_dlib.py”, line 428, in
blended = blur_blending_cv2(warped_back, blended, backward_mask)
File “align_warp_back_multiple_dlib.py”, line 219, in blur_blending_cv2
mask *= 255.0
numpy.core._exceptions.UFuncTypeError: Cannot cast ufunc ‘multiply’ output from dtype(‘float64’) to dtype(‘uint8’) with casting rule ‘same_kind’

找到文件align_warp_back_multiple_dlib.py的428行,将代码 mask *= 255.0 改为:mask = mask * 255.0,清空output,再次运行,这一次output中的成果照片终于有了明显的改善。

另外可能的问题

我由于在先就看了 《让老照片重现光彩:Bringing Old Photos Back to Life(实战)》(作者 hs6605015 )一文,并按照其中所说,修改了源码,所以,如果没有修改而跑起来又出现了问题,可以参考一下此文。

修改几个文件

run.py,加入一行代码:

1
	os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"

.\global\detection_models\networks.py 修改第七、八行的

1
2
	from detection_models.sync_batchnorm import DataParallelWithCallback
	from detection_models.antialiasing import Downsample

为:

1
2
	from .sync_batchnorm.replicate import DataParallelWithCallback
	from .antialiasing import Downsample

.\Face_Enhancement\models\networks\normalization.py 修改第八行的

1
	from models.networks.sync_batchnorm import SynchronizedBatchNorm2d

为:

1
	from .sync_batchnorm import SynchronizedBatchNorm2d