Amazing!黑白老照片上色,Python 两秒一张

简介: 各位读者们,大家好啊,上个月初写了一篇关于老照片修复的教程,有读者看完不过瘾,表示想让我再安排一篇黑白照片上色教程,于是就有了这篇文章的由来

DeOldify 介绍


开始之前先对这个项目做个简单介绍,DeOldify  是一个关于给黑白照片上色的项目,是基于深度学习技术开发的,源码在 Github 上已经开源,目前收获了 13.4 k Star;去年有一个 B 站 Up主 制作了一个有关修复 100 年前老北京的视频



微信图片_20220520103959.png

其中用到的上色就用到了DeOldify 框架,DeOldify 创建的目的是为了给黑白照片上色,但让人惊艳的是它除了能处理图片外,也可以处理视频;

微信图片_20220520104006.png


DeOldify 的核心网络框架是 GAN ,对比以前上色技术有以下几个特点:

  • 1,老照片中的伪影在上色过程中会被消除;
  • 2,老照片的人脸部位来说,处理后皮肤会变得更光滑;
  • 3,呈现更详细、真实的渲染效果;


简单介绍之后,下面开始正式介绍一下它的用法,本次的测试环境如下


  • OS: Windows 10;
  • Python : Python 3.7.6;
  • IDE : Pycharm;
  • pytorch : 1.7.0 ;
  • torchvision : ;


2,环境配置


2.1,项目克隆到本地

有两种方法,1, Git 命令

git@github.com:jantic/DeOldify.git


Download ZIP 选项将项目手动下载到到本地,Github 地址贴在下方

https://github.com/jantic/DeOldify

下载后


2.2,下载权重文件


DeOldify 是基于深度学习开发的,需要用到预训练权重,这里项目开发者已经把训练好的权重上传到网上,我们可以直接拿来使用,不需要我们再训练;

本项目中用到的权重文件比较多,一共三个:

  • 1,Artistic 权重,会使图片上色效果 更 大胆 一些;

下载地址

https://data.deepai.org/deoldify/ColorizeArtistic_gen.pth


  • 2,Stable 权重,相对于 Artistic  上色效果更保守一些;

下载地址

https://www.dropbox.com/s/usf7uifrctqw9rl/ColorizeStable_gen.pth


  • 3 ,Video 权重,此权重文件用来给视频上色;

下载地址

https://data.deepai.org/deoldify/ColorizeVideo_gen.pth


权重文件下载完毕后,在项目根目录下创建一个 models 文件夹,把下载好的三个权重文件放入models 文件夹内,项目根目录排列如下

微信图片_20220520103848.png


2.3,安装依赖项

在终端中输入如下命令,安装项目所需要的第三方扩展库;

pip install -r requirements.txt


第三方扩展库安装完毕之后,需要提醒一下,本项目是基于 Pytorch 进行开发的,在 requirements.txt 中作者并没有加入这 torch 依赖库,所以在启动项目之前请确保  torch 、torchvision 等库已经安装到你的运行环境中;

Tip : 如果后面你想用到 GPU 加速效果,CUDA 和 Cudnn 等 GPU 加速包也需要提前配好


3 启动项目


环境配置好之后,下面的步骤就比较简单了,在主项目下创建一个脚本作为程序运行入口


3.1,照片上色

给照片上色的话,在主脚本内填入下面代码块

from deoldify import device
from deoldify.device_id import DeviceId
#choices:  CPU, GPU0...GPU7
device.set(device=DeviceId.GPU0)
from deoldify.visualize import *
plt.style.use('dark_background')
torch.backends.cudnn.benchmark=True
import warnings
warnings.filterwarnings("ignore", category=UserWarning, message=".*?Your .*? set is empty.*?")
colorizer = get_image_colorizer(artistic=True)
render_factor=35
source_path = 'test_images/image.png'
result_path = None
colorizer.plot_transformed_image(path=source_path, render_factor=render_factor, compare=True)


代码中有几个参数简单介绍一下:

  • device 指定inference 时用到的 GPU 型号,根据自己情况从下面选项中选择一个即可
from enum import IntEnum
class DeviceId(IntEnum):
    GPU0 = 0,
    GPU1 = 1,
    GPU2 = 2,
    GPU3 = 3,
    GPU4 = 4,
    GPU5 = 5,
    GPU6 = 6,
    GPU7 = 7,
    CPU = 99


device.set(device=DeviceId.GPU0)
  • Artistic 为布尔值, True 表示启用 Artistic 模式 ( False 启用 Stable 模式);
colorizer = get_image_colorizer(artistic=True)


前面提到过 Artistic 与 Stable 是有区别的(因为用到的权重文件是不一样的), Artistic 上色效果会更加激进一些,例如给下面这张荷叶照片上色,不同模式下得到的图片是不一样的

微信图片_20220520103854.png


Artistic 模式

微信图片_20220520103859.png


Stable 模式

微信图片_20220520103903.png


  • render_factor 表示渲染因子,值越效果越好,但同时需要更大的显存;
  • source_path 表示输入图片路径;

上色后的图片会存放在根目录下的 result_images 文件夹中,从网上下载了几张黑白图片,用这个框架自己也测试了一下,看起来效果还不错~


图一

微信图片_20220520103907.png

图二

微信图片_20220520103911.png

图三

微信图片_20220520103914.png

3.2,视频上色


视频上色,需要用下面的代码块

from deoldify import device
from deoldify.device_id import DeviceId
#choices:  CPU, GPU0...GPU7
device.set(device=DeviceId.GPU0)
from deoldify.visualize import *
plt.style.use('dark_background')
import warnings
warnings.filterwarnings("ignore", category=UserWarning, message=".*?Your .*? set is empty.*?")
colorizer = get_video_colorizer()
#NOTE:  Max is 44 with 11GB video cards.  21 is a good default
render_factor=21
file_name_ext = file_name + '.mp4'
result_path = None
colorizer.colorize_from_file_name(file_name_ext, render_factor=render_factor)


4,项目源码获取


为了方便起见,我已经把配置好的项目文件打包成一个解压包,解压后只需安装项目中的所需依赖项即可,无需再配置权重文件;

pip install -r requirements.txt
相关实践学习
基于阿里云DeepGPU实例,用AI画唯美国风少女
本实验基于阿里云DeepGPU实例,使用aiacctorch加速stable-diffusion-webui,用AI画唯美国风少女,可提升性能至高至原性能的2.6倍。
相关文章
|
19天前
|
存储 Python
Python 一步一步教你用pyglet制作“彩色方块连连看”游戏
Python 一步一步教你用pyglet制作“彩色方块连连看”游戏
44 0
|
19天前
|
XML 算法 计算机视觉
使用OpenCV进行人脸检测和戴墨镜特效实战(附Python源码)
使用OpenCV进行人脸检测和戴墨镜特效实战(附Python源码)
158 1
|
19天前
|
编解码 Python
用 Python 绘制一朵花朵
用 Python 绘制一朵花朵
21 1
|
9月前
|
Python
Python3,区区5行代码,让黑白老照片变成华丽的彩色照,被吸粉了。
Python3,区区5行代码,让黑白老照片变成华丽的彩色照,被吸粉了。
59 0
|
存储 计算机视觉 Python
Python 使用PIL.Image制作一个运动小人的动态图
Python 使用PIL.Image制作一个运动小人的动态图
186 0
|
测试技术 Python
软件测试|Python神器pillow,从此拍照不再需要滤镜
软件测试|Python神器pillow,从此拍照不再需要滤镜
146 0
软件测试|Python神器pillow,从此拍照不再需要滤镜
python小玩意——图片转素描
python小玩意——图片转素描
python小玩意——图片转素描
|
API 计算机视觉 Python
用Python实现美化照片———磨皮
如何用Python实现磨皮
482 0
用Python实现美化照片———磨皮
|
算法 计算机视觉
万恶的马赛克---OpenCV-Python开发指南(51)
万恶的马赛克---OpenCV-Python开发指南(51)
270 0
万恶的马赛克---OpenCV-Python开发指南(51)
|
算法 计算机视觉 Python
实现油画效果---OpenCV-Python开发指南(50)
实现油画效果---OpenCV-Python开发指南(50)
257 0
实现油画效果---OpenCV-Python开发指南(50)