随着深度学习技术的不断发展,图像修复技术在各个领域都取得了显著的成果。在这个项目中,我们将使用PaddleGAN来实现对老北京黑白视频的修复。这个项目的背景是为了保护和恢复珍贵的历史视频资料,使其更适于现代观众观看,并延长其保存寿命。通过图像补帧、上色和超分辨率等技术,我们可以提高视频的质量,使其更加清晰、生动,同时保留了历史的原汁原味。
首先,在AIStudio中新建一个经典版项目,选择PaddlePaddle框架的2.1.2版本,Python选择3.7版本。在项目目录下新建名为ExperData的文件夹,将待修复的视频命名为test1.mp4,上传到ExperData文件夹下。
进入ExperData文件夹,使用以下命令克隆PaddleGAN代码:
%cd ExperData
!git clone https://gitee.com/paddlepaddle/PaddleGAN.git
进入克隆的PaddleGAN代码目录,使用以下命令安装PaddleGAN依赖:
%cd PaddleGAN
!pip install -e .
%cd /home/aistudio
使用以下代码导入cv2、imageio、numpy、matplotlib等库:
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
定义display函数,便于后续修复前后的视频可以显示在网页上:
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
# 定义视频显示函数
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
使用以下代码读取视频帧:
# 展示输入的视频
video_path = '/home/aistudio/ExperData/test1.mp4'
video_frames = imageio.mimread(video_path, memtest=False)
使用以下代码获取视频的帧率并调用display函数展示视频:
# 用cv2读取视频获得视频的信息
cap = cv2.VideoCapture(video_path)
# 读取视频的fps
fps = cap.get(cv2.CAP_PROP_FPS)
# 调用display函数展示视频
HTML(display(video_frames, fps).to_html5_video())
旧视频
DAIN模型通过探索深度信息来检测遮挡,并且开发了深度感知的流投影层来合成中间流,具有较好的视频补帧效果。
DeOldify模型采用自注意力机制的生成对抗网络,生成器是一个U-NET结构的网络,在图像上色方面有着较好的效果。
PP-MSVSR是百度自研的多阶段视频超分深度架构,具有局部融合模块、辅助损失和细化对齐模块,以逐步细化增强结果。
调用video-enhance.py文件来进行视频的修复:
!python ExperData/PaddleGAN/applications/tools/video-enhance.py \
--input /home/aistudio/ExperData/test1.mp4 \
--process_order DAIN DeOldify PPMSVSR \
--output /home/aistudio/OutPut
在修复完成后的输出路径下,有三个文件表示经过补帧、上色、超分辨率后的图像。展示修复后的视频:
video_path = '/home/aistudio/OutPut/DeOldify/test1/test1_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())
上色-超分-补帧-新视频