当前位置:   article > 正文

AI创造营~AnimeGAN一键生成日系动漫Vlog_宫崎骏动漫视频风格转换 api

宫崎骏动漫视频风格转换 api

AI创造营~AnimeGAN一键生成日系动漫Vlog

引子

作为日本动漫的爱好者,特别是对宫崎骏、新海诚的童鞋们有福了。

本项目基于 PaddleHub 的动漫风格的转换模型,可以一键将视频转动漫哦!——>{日系风Vlog就在这}。

PaddleHub已将定制打造的街景动漫化模型animegan_v2_hayao_99animegan_v2_shinkai_53animegan_v2_paprika_98等多个优质模型开源。可以自行切换转换风格!

效果展示图

AI创造营~AnimeGAN一键生成日系动漫Vlog(附代码)

动漫化结果

一、安装相关的库

!pip install paddlehub
!pip install paddlepaddle
!pip install moviepy
  • 1
  • 2
  • 3

二、函数

import cv2
from PIL import Image
import numpy as np
import os
import paddlehub as hub
from moviepy.editor import *
from tqdm import tqdm

# Config
# 原始视频地址
original_video_path = './1.mp4'
# 提取视频图像的存放地址
original_video_img_path = './original_video_img/'
# 合成视频存放地址
img2video_path = './2.mp4'
# 添加声音后的视频最终输出地址
output_video_path = './3.mp4'

# 从视频提取图片
def video2img(video_path, out_path):
    cap = cv2.VideoCapture(video_path)
    i=1
    while True:
        ret, frame = cap.read()
        if frame is None:
            break
        else:
            cv2.imwrite(out_path + str(i) + ".jpg", frame)
            i+=1
    return


# 把图片转动漫并合成视频
def ani2video(img_path, org_video_path, out_path, model):
    # 获取图片总数
    file_list = os.listdir(img_path)
    img_num = len(file_list)

    # 查看原始视频的参数
    cap = cv2.VideoCapture(org_video_path)
    ret, frame = cap.read()
    # 任选一张图片查看高度和宽度
    result = model.style_transfer(images=[cv2.imread(os.path.join(img_path,file_list[0]))])
    height = result[0].shape[0]
    width = result[0].shape[1]

    fps = cap.get(cv2.CAP_PROP_FPS)  # 返回视频的fps--帧率

    # 把参数用到我们要创建的视频上
    video = cv2.VideoWriter(out_path, cv2.VideoWriter_fourcc('m', 'p', '4', 'v'), fps, (width, height))  # 创建视频流对象
    """
    参数1 即将保存的文件路径
    参数2 VideoWriter_fourcc为视频编解码器 cv2.VideoWriter_fourcc('m', 'p', '4', 'v') 文件名后缀为.mp4
    参数3 为帧播放速率
    参数4 (width,height)为视频帧大小
    """
    for i in tqdm(range(img_num)):
        f_name = str(i + 1) + '.jpg'
        item = os.path.join(img_path, f_name)
        result = model.style_transfer(images=[cv2.imread(item)]) # 转换动漫风格
        video.write(result[0])  # 把图片写进视频
    video.release()  # 释放

# 从原始视频上提取声音合成到新生成的视频上
def sound2video(org_video_path, new_video_path, out_video_path):
    # 读取原始视频
    video_o = VideoFileClip(org_video_path)
    # 获取原始视频的音频部分
    audio_o = video_o.audio

    # 读取新生成视频
    video_clip = VideoFileClip(new_video_path)
    # 指向新生成视频的音频部分
    video_clip2 = video_clip.set_audio(audio_o)
    # 修改音频部分并输出最终视频
    video_clip2.write_videofile(out_video_path)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77

三、从视频提取图像

if not os.path.exists(original_video_img_path):
    os.mkdir(original_video_img_path)
video2img(video_path=original_video_path, out_path=original_video_img_path)
  • 1
  • 2
  • 3

四、图像转换为动漫风格并合成新的视频

# 根据自己喜好选择风格:
## 今敏:'animegan_v2_paprika_98'
## 新海诚:'animegan_v2_shinkai_53'
## 宫崎骏:'animegan_v2_hayao_99'
model = hub.Module(name='animegan_v2_hayao_99', use_gpu=True) 
ani2video(img_path=original_video_img_path, org_video_path=original_video_path, out_path=img2video_path, model=model)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

五、添加原始音频

if not os.path.exists(output_video_path):
    sound2video(org_video_path=original_video_path, new_video_path=img2video_path, out_video_path=output_video_path)
else:
    print('最终视频已存在,请查看输出路径')
  • 1
  • 2
  • 3
  • 4

六、更多内容

  • 我的Github:https://github.com/Ryan906k9/AnimeVlog
  • 我的CSDN主页,欢迎关注:https://blog.csdn.net/qq_42067550

七、致谢

  • PaddleHub 官方项目集合:https://aistudio.baidu.com/aistudio/personalcenter/thirdview/79927
  • PaddleHub AnimeGAN动漫化模型一键应用(含动漫化小程序体验)项目:https://aistudio.baidu.com/aistudio/projectdetail/1308514
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/981088?site
推荐阅读
相关标签
  

闽ICP备14008679号