PaddleHub一键视频动漫化

PaddleHub一键视频动漫化

如何将自己拍的街景变成动漫风格呢?下面将教会你用PaddleHub一键视频动漫化。快学起来吧!

AnimeGAN——PaddlePaddle版

AnimeGAN是基于CartoonGAN的改进,并提出了一个更加轻量级的生成器架构。在论文中还提出了三个全新的损失函数用于提升风格化的动漫视觉效果,这三个损失函数分别是灰度风格损失,灰度对抗损失和颜色重建损失。后续将会给出这3个损失函数的数学公式并对其作详细介绍。下面我们看一下CartoonGAN与AnimeGAN在生成器上的性能对比。可以看出AnimeGAN具有更小的模型大小,更少的计算量以及更快的推理速度。

实践过程

(1)因为PaddleHub提供的预处理模型是将照片动漫化,所以我们将视频进行切分

def transform_video_to_image(video_file_path, img_path):
    
    将视频中每一帧保存成图片
    
    video_capture = cv2.VideoCapture(video_file_path)
    fps = video_capture.get(cv2.CAP_PROP_FPS)
    count = 0
    while(True):
        ret, frame = video_capture.read() 
        if ret:
            cv2.imwrite(img_path + %d.jpg % count, frame)
            count += 1
        else:
            break
    video_capture.release()
    print(视频图片保存成功, 共有 %d 张 % count)
    return fps,count
# 将视频中每一帧保存成图片
fps,count = transform_video_to_image(input_video, work/mp4_img/)

然后,将每一帧照片进行动漫化

def get_combine_img(input_file_patha):
    #Pathname=""
    output_file_path="work/mp4_img2/"
    input_file_path="work/mp4_img/"+input_file_patha
    #print(input_file_path)
    #print(output_file_path)
    result = model.style_transfer(images=[cv2.imread(input_file_path)],visualization=True,output_dir=output_file_path)
    for root, dirs, files in os.walk(output_file_path):
        fils=files
    files=.join(files)
    #print(files)
    dict1="mv "+output_file_path+files+" "+output_file_path+input_file_patha
    os.system(dict1)
    dict1="cp "+output_file_path+input_file_patha+" "+"./work/mp4_img3/"+input_file_patha
    #print(dict1)
    os.system(dict1)
    os.system("rm -rf ./work/mp4_img2")

def transform():
    os.system("mkdir ./work/mp4_img3")
    for i in range(0,count):
        name=str(i)+".jpg"
        #print(name)
        get_combine_img(name)
    print(视频图片转换成功, 共有 %d 张 % (i+1))
transform()

最后,我们稍作处理,将动漫化后的照片合成为视频,并且添加原有音轨即可。

总结

PaddedHub是一个非常有利于初学者使用的工具,具有方便、易操作等特点。它不仅减轻训练模型的成本,还减轻开发者的开发压力。PaddleHub还有许多模型供大家使用,一起来尝试一下吧!

经验分享 程序员 微信小程序 职场和发展