基于深度学习的老黑白视频修复

基于深度学习的老黑白视频修复

  • PaddleGAN实现老北京黑白视频修复
    • 项目背景与意义
    • 安装PaddleGAN
      • 1.1 准备工作
      • 1.2 下载PaddleGAN代码
      • 1.3 安装依赖
    • 导入依赖包
      • 2.1 导入相关库
      • 2.2 定义display函数
    • 展示旧影像
      • 3.1 读取视频帧
      • 3.2 获得帧率并显示
    • 视频修复
      • 4.1 使用DAIN模型补帧
      • 4.2 使用DeOldify模型进行上色
      • 4.3 使用PPMSVSR模型实现视频的超分辨率
    • 展示结果

PaddleGAN实现老北京黑白视频修复

项目背景与意义

随着深度学习技术的不断发展,图像修复技术在各个领域都取得了显著的成果。在这个项目中,我们将使用PaddleGAN来实现对老北京黑白视频的修复。这个项目的背景是为了保护和恢复珍贵的历史视频资料,使其更适于现代观众观看,并延长其保存寿命。通过图像补帧、上色和超分辨率等技术,我们可以提高视频的质量,使其更加清晰、生动,同时保留了历史的原汁原味。
基于深度学习的老黑白视频修复_第1张图片

安装PaddleGAN

1.1 准备工作

首先,在AIStudio中新建一个经典版项目,选择PaddlePaddle框架的2.1.2版本,Python选择3.7版本。在项目目录下新建名为ExperData的文件夹,将待修复的视频命名为test1.mp4,上传到ExperData文件夹下。

1.2 下载PaddleGAN代码

进入ExperData文件夹,使用以下命令克隆PaddleGAN代码:

%cd ExperData
!git clone https://gitee.com/paddlepaddle/PaddleGAN.git

1.3 安装依赖

进入克隆的PaddleGAN代码目录,使用以下命令安装PaddleGAN依赖:

%cd PaddleGAN
!pip install -e .
%cd /home/aistudio

导入依赖包

2.1 导入相关库

使用以下代码导入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

2.2 定义display函数

定义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

展示旧影像

3.1 读取视频帧

使用以下代码读取视频帧:

# 展示输入的视频 
video_path = '/home/aistudio/ExperData/test1.mp4'
video_frames = imageio.mimread(video_path, memtest=False)

3.2 获得帧率并显示

使用以下代码获取视频的帧率并调用display函数展示视频:

# 用cv2读取视频获得视频的信息 
cap = cv2.VideoCapture(video_path)
# 读取视频的fps 
fps = cap.get(cv2.CAP_PROP_FPS)
# 调用display函数展示视频
HTML(display(video_frames, fps).to_html5_video())

旧视频

视频修复

4.1 使用DAIN模型补帧

DAIN模型通过探索深度信息来检测遮挡,并且开发了深度感知的流投影层来合成中间流,具有较好的视频补帧效果。

4.2 使用DeOldify模型进行上色

DeOldify模型采用自注意力机制的生成对抗网络,生成器是一个U-NET结构的网络,在图像上色方面有着较好的效果。

4.3 使用PPMSVSR模型实现视频的超分辨率

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())

上色-超分-补帧-新视频


通过以上步骤,我们完成了对老北京黑白视频的修复,使其更加清晰、色彩鲜艳,让观众更好地体验历史文化。

你可能感兴趣的:(深度学习,GAN,深度学习,音视频,人工智能,视频修复)