1、概述
paddlepaddle(百度飞浆)作为百度的人工智能框架,在发展上可能没有tensorflow与pytorch来的成熟。但在本土化的应用中也有非常的明显的优势,比如汉语的自然语言处理层面。为了保证平台能够快速上手。他也内置了许多有趣的功能模块。本文主要介绍paddleGAN,对抗生成模块的相关接口。可以帮助我们达到一些意想不到的效果。下面的内容将涵盖图片的上色,视频的修复,超频以及卡通头像生成等内容。
在运行本文的案例之前您需要先安装paddlepaddle以及panddleGAN具体的安装步骤请参考下面链接。
https://github.com/PaddlePaddle/PaddleGAN/blob/develop/docs/zh_CN/install.md
2、引入相关类库并设置GPU运行环境
from matplotlib import pyplot as plt
%matplotlib notebook
from PIL import Image
import cv2
import imageio
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from IPython.display import HTML
import warnings
warnings.filterwarnings("ignore")import paddle
paddle.set_device('gpu')
如果您是单卡GPU可以看到下面输出
CUDAPlace(0)
编写显示视频辅助函数
# 定义一个展示视频的函数
def display(driving, fps, size=(8, 6)):fig = plt.figure(figsize=size)ims = []for i in range(len(driving)):cols = []cols.append(driving[i])im = plt.imshow(np.concatenate(cols, axis=1), animated=True)plt.axis('off')ims.append([im])video = animation.ArtistAnimation(fig, ims, interval=1000.0/fps, repeat_delay=1000)plt.close()return video
2、上色功能
2.1 老照片上色ppgan.apps.DeOldifyPredictor
该上色功能主要用于老照片上色,实例化参数说明
- output (str): 设置输出图片的保存路径,默认是output。注意,保存路径为设置output/DeOldify。
- weight_path (str): 指定模型路径,默认是None,则会自动下载内置的已经训练好的模型。
- artistic (bool): 是否使用偏"艺术性"的模型。"艺术性"的模型有可能产生一些有趣的颜色,但是毛刺比较多。
- render_factor (int): 图片渲染上色时的缩放因子,图片会缩放到边长为16xrender_factor的正方形, 再上色,例如render_factor默认值为32,输入图片先缩放到(16x32=512) 512x512大小的图片。通常来说,render_factor越小,计算速度越快,颜色看起来也更鲜活。较旧和较低质量的图像通常会因降低渲染因子而受益。渲染因子越高,图像质量越好,但颜色可能会稍微褪色。
from ppgan.apps import DeOldifyPredictor
deoldify = DeOldifyPredictor()
result=deoldify.run("imgs/heibai1.jpg")
figure,ax=plt.subplots(1,2,figsize=(8,4))
srcimg=Image.open("imgs/heibai1.jpg")
ax[0].imshow(srcimg)
ax[1].imshow(result[0])
输出效果如下
可以使用该模型为视频上色
result2=deoldify.run("imgs/bj.mp4")
video_path = "output/DeOldify/bj/bj_deoldify_out.mp4"
video_frames = imageio.mimread(video_path, memtest=False)# 获得视频的原分辨率
cap = cv2.VideoCapture(video_path)
fps = cap.get(cv2.CAP_PROP_FPS)HTML(display(video_frames, fps).to_html5_video())
2.2 视频修复并上色
接口说明
ppgan.apps.DeepRemasterPredictor(output='output', weight_path=None, colorization=False, reference_dir=None, mindim=360)
参数说明
- output (str): 设置输出图片的保存路径,默认是output。注意,保存路径为设置output/DeepRemaster。
- weight_path (str): 指定模型路径,默认是None,则会自动下载内置的已经训练好的模型。
- colorization (bool): 是否打开上色功能,默认是False,既不打开,只执行修复功能。
- reference_dir(str|None): 打开上色功能时,输入参考色图片路径,也可以不设置参考色图片。
- mindim(int): 预测前图片会进行缩放,最小边长度。
from ppgan.apps import DeepRemasterPredictor
deep_remaster = DeepRemasterPredictor(colorization=True)
result=deep_remaster.run("imgs/bj.mp4")
video_path = 'output/DeepRemaster/bj_comp.mp4'
video_frames = imageio.mimread(video_path, memtest=False)# 获得视频的原分辨率
cap = cv2.VideoCapture(video_path)
fps = cap.get(cv2.CAP_PROP_FPS)HTML(display(video_frames, fps).to_html5_video())
效果如下
3、超分
from ppgan.apps import RealSRPredictor
sr = RealSRPredictor()
result=sr.run("output/DeepRemaster/bj_out.mp4")
video_path = "output/RealSR/bj_out/bj_out_realsr_out.mp4"
video_frames = imageio.mimread(video_path, memtest=False)# 获得视频的原分辨率
cap = cv2.VideoCapture(video_path)
fps = cap.get(cv2.CAP_PROP_FPS)HTML(display(video_frames, fps).to_html5_video())
效果如下
4、图像动漫化
from ppgan.apps import AnimeGANPredictor
predictor = AnimeGANPredictor(use_adjust_brightness=True)
result3=predictor.run('imgs/girl.jpg')
figure,ax=plt.subplots(1,2,figsize=(8,4))
srcimg=Image.open("output/anime.png")
ax[0].imshow(srcimg)
ax[1].imshow(result3)
效果如下图所示
其实paddleGAN还有一些其他的功能大家可以尝试一下,不过个人解决整体接口易用性还是有待提高。另外像补帧的一些功能还会爆出异常(也有可能是我调用方式不对)不过框架的整体感觉还是不错的大家可以多用国产的AI框架