无价之姐之三十而已
序言
首先非常感谢百度提供的平台AIstudio和百度提供的本次培训,通过参加这次培训让我了解到了什么是飞桨paddlepaddle框架,这个框架是首个国内开源的深度学习框架,使用这个框架感觉实现项目非常地便利,功能也是非常的强大,还可以用来参加各种比赛竞赛,最最最让人心动的事是百度还免费提供了每天12小时的免费V100显卡算力,这大大降低了学习的成本,如果你是一位想加入到深度学习领域来的学生,那将会感到多么的开心啊!那么本次创意作品的产生也是因为参加了百度提供的培训课程,让我收获满满,在与讲师、助教们的互动之中,提升了自己的能力,利用了飞桨的puddlehub进行实践,因此才有了这样一个小小的创意视频。
创意的由来
这个视频作品的创意来自于当下非常火的综艺《乘风破浪的姐姐》和劲爆的电视剧《三十而已》,想到参加乘风破浪的姐姐们都是30+的年纪,30岁以上的解解们既成熟又有魅力,拥有自己的事业,这是一个光芒四射的年纪,与《三十而已》这部剧的思想不谋而合,表达了在三十的姐姐们虽然会面临一些问题,但是却拥有解决问题的能力,还有自己的事业和想要守护的东西,未来才刚刚开始而已,也就三十岁而已。于是,就想要制作出一个小视频即展现了姐姐们30+的成熟干练气质又表达了这种乘风破浪无惧未来的精神,让姐姐们在《三十而已》的剧照中跳舞,展现风采。
puddlehub初体验
第一次参加百度培训,第一次使用 puddlehub,根据培训内容尝试着使用paddleub来直接使用模型获得想要的结果,感觉 puddlehub就是哆啦A梦的百宝箱,里面装满了各种各样的奇巧工具,想要什么效果,那我就从百宝箱里面取出一个工具,就像大雄想飞,哆啦A梦就拿出来一个竹蜻蜓一样那么神奇,这就是使用paddlehub最直接的感受了,后面将谈谈如何利用paddlehub实现的“无价之姐之三十而已”这个创意小项目。
技术路线
第一步:获取输入数据
首先在网上收集并下载了乘风破浪的姐姐—蓝盈盈的个人视频,然后将这个原始视频利用opencv工具拆解成一帧帧的图片,那么这样就获得了我们的原始第一部分素材。
import cv2
#拆分视频为图片
cap = cv2.VideoCapture('/home/aistudio/video.m4s')
然后,还需要在网上去收集《三十而已》的剧组照,这个剧组照要做到尽量能够和人物相匹配,于是挑选了两张备选,如下:
第二步:加载paddlehub
#加载paddlehub
!pip install paddlehub==1.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
第三步:安装合适的人像抠图模型
#安装人像抠图模型
!hub install deeplabv3p_xception65_humanseg==1.1.0
第四步:调用模型实现抠图
import paddlehub as hub
import cv2
import os
# 加载deeplabv3p_xception65_humanseg模型
module = hub.Module(name="deeplabv3p_xception65_humanseg")
第五步:合成人像和背景图片
import numpy as np
import matplotlib.image as image
# 定义合成函数blend_images将扣出的人物换背景,
#其中参数fore_image为抠图的人像图片,base_image为找好的背景图片,
#output_path为合成之后的图片保存路径。
def blend_images(fore_image, base_image, output_path):
第六步:合成每帧图像并合并为gif
from PIL import Image
import numpy as np
humanseg_jie = [filename for filename in os.listdir('humanseg_output')]
output_path='hecheng/'
for i, img in enumerate(humanseg_jie):
img = blend_images(img_path, 'work/bg2.png', output_path_img)
import imageio
for i in range(350,370):
frames.append(imageio.imread('hecheng/video/%d.png' % i))
# Save them as frames into a gif
imageio.mimsave(gif_name, frames, 'GIF',duration = 0.001)
第六步:合成每帧图像并合并为视频
#合成每帧图像为视频
for i in range(len(files)):
img = cv2.imread('hecheng/video/%d.png' % i)
out.write(img)#保存帧
out.release()
综合所有的步骤之后,最终的《无价之姐三十而已》创意视频效果请点击以下观看:
paddlehub自制视频:无价之姐三十而已
总结
非常开心同时也非常荣幸能够参加这次的百度的培训活动,受益匪浅,这是第一次参加百度的培训,希望后面能够有机会再次参加百度的培训课程,感谢班班和各位讲师助教的辛勤付出,耐心聆听和解答疑问,谢谢百度能够提供这么好用又免费的平台AIstudio,最后附上本视频作品的完整项目链接。
完整项目AIStudio链接地址
paddlehub创意赛:无价之姐之三十而已