## 百度paddlehub创意项目 秦时明月的雪女姐姐来到了现实的飞雪玉花,氤氲了一舞倾城

很多时候,我们需要进行人像抠图,视频合成等类似的操作,可能要学很多专业的图片处理软件,视频剪辑软件等,如photoshops,Ai premiere等,当然这些软件处理后的效果很好,但在有的时候我们需要快速处理而软件又不熟悉的时候,就加大了学习成本,而在学习了百度公司基于深度学习技术开发的paddlehub组件后,就可以利用paddlehub的预训练模型,来快速的进行上述操作,只需几行代码就可以得到不错的效果。先对paddlehub做个简单介绍吧,paddlehub提供全流程、可复现的应用场景,包括图像分类,目标检测,视频分类,图像分割等计算机视觉领域以及文本生成,词法分析等nlp等还有其他领域的应用场景,提供预训练模型,让开发者轻松验证模型算法的可用性,快速完成想要的功能操作。
在这次创意项目中,想要实现一个简单的功能,秦时明月的忠实观众,最近沧海横流好像也要快了,想要把秦时明月中雪女姐姐曼妙的舞姿搬到现实的飞雪玉花场景中,下面来结合paddlehub介绍下思路吧。
先来看一组效果演示:
![飞雪玉花](https://img-blog.csdnimg.cn/20200828121102350.gif#pic_center)

首先需要在AIstudio中配置好环境

# 首先配置环境  paddlehub模块和人像抠图分割模型的安装
!pip install paddlehub==1.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
!hub install deeplabv3p_xception65_humanseg==1.0.0

当环境装好后,需要导入对于该原素材视频处理所需要的模块

import paddlehub as hub
from PIL import Image
import os
import cv2

接下来就是正式的处理过程,主要思路就是,对于原素材视频来说,我们需要将视频中的人像抠出来,那怎么扣了,在这里,我们需要将视频预先处理成每一帧数图片,这部分我们可以利用OpenCV进行完成,在得到了每一帧的图片后,我们就可以利用百度的paddlehub模型中的deeplabv3p模型进行人像抠图,得到了人像,然后再利用opencv将现实中的背景图片和人像进行图像融合,再将融合后的每一帧图片合成视频,并将原视频中的音频提取并添加进新的视频,即可完成。
提取素材视频图片

# 将所需要的的视频按帧数提取成图片,为后续的人像抠图做准备def video2jpg(video_file,output_path):'''将视频文件video_file每一帧转成图片保存到output_path文件夹'''try:os.makedirs(output_path) #创建输出文件夹except:print()#读取视频文件cap = cv2.VideoCapture(video_file)num = 0while(True):ret,frame = cap.read() if ret:cv2.imwrite('%s%d.jpg'%(output_path,num), frame)num += 1else:breakcap.release()#关闭视频video_file='video/一舞倾城1.mp4'
output_path='video/video2jpg2/'
video2jpg(video_file,output_path)

进行人像抠图

# 使用预训练模型对上述得到的图片进行人像抠图
!hub run deeplabv3p_xception65_humansegdef humanseg(images,output_dir):#新建人像抠图后的文件夹路径try:os.makedirs(output_dir)except:print ()#装载模型module = hub.Module(name="deeplabv3p_xception65_humanseg")#执行模型segmentation命令result = module.segmentation(data={"image":images}, output_dir=output_dir)# print (result)return resultdef file_list(listdir):'''读取文件夹listdir里的序号文件,形成im_list'''im_list=[]files = os.listdir(listdir)for i in range(len(files)) :im_list.append('%s%d.jpg' %(listdir,i) )return im_listlistdir='video/video2jpg3/'
im_list=file_list(listdir)
# print (im_list)
output_dir='video/humanseg_out2/'
humanseg(im_list,output_dir)

图片融合

# 将背景图片与扣除的人像进行图像融合
def alpha_composite(fore_image,base_image,output_dir):'''将前景图片fore_image与背景图片base_image融合,输出到文件夹output_dir'''base_image_op = Image.open(base_image).convert("RGBA")fore_image_op = Image.open(fore_image).convert("RGBA")# print (base_image_op)# print (fore_image_op)#调整照片的size,因为背景图片较小,所以我调整背景图片来适应前景图片base_image_op = base_image_op.resize(fore_image_op.size)  # base_image = base_image.rotate(90)  #旋转图片image_c = Image.alpha_composite(base_image_op, fore_image_op)image_c.save(output_dir + fore_image.replace('video/humanseg_out1/','') )# display(final2)return image_c# 视频转化图片的文件夹
files_v = os.listdir('video/video2jpg2/')
#人像抠图的文件夹
fore_path='video/humanseg_out1/'
#背景图片
base_image='video/image_base.jpg'
#合成图片输出的文件夹
output_dir='video/image_composite1/'
try:os.makedirs(output_dir)
except:print()for i in range(len(files_v)):fore_image='%s%d.png'%(fore_path,i)try:    alpha_composite(fore_image,base_image,output_dir)except:continue

合成视频

# 将融合后的图片合成视频
def png2video(image_dir,out_video):'''将文件夹image_dir中的每一帧图片合成视频out_video'''fourcc = cv2.VideoWriter_fourcc(*'XVID')out = cv2.VideoWriter(out_video,fourcc, 25.0, (1280,720))files = os.listdir(image_dir)# 视频转化图片的文件夹files_v = os.listdir('video/video2jpg2/') for i in range(len(files_v)): image='%s%d.png' %(image_dir,i)try:img = cv2.imread(image)img = cv2.resize(img,(1280,720))out.write(img)#保存帧except:continueout.release()out_video='video/out_video2.mp4'
image_dir='video/image_composite1/'png2video(image_dir,out_video)

添加音频

# 提取音频
!ffmpeg -i video/一舞倾城1.mp4 video/video5_m.mp3 -loglevel quiet# 添加音频合成视频
!ffmpeg -i video/out_video2.mp4 -i video/video5_m.mp3  -vcodec copy -acodec copy video/out_video_final3.mp4 -loglevel quiet

最后的视频效果

飞雪玉花,一舞倾城

最后的总结:
总的来说,完成了一次简单的视频抠图合成体验,虽然好多地方视频合成的效果还有待改善,比如人像抠图,有的图片人像估计扣得不太明显或者直接没有扣到人像,可能是动漫人物的立体感不强又或者是预训练模型,但能做到这样已经很不错了,如果再多一点类似的样本再进行训练一波模型,抠图效果可能会更好,另一方面,对于需要融合的背景图片,可以提前处理一波,比如增加图片透明度等操作,让最终合成的效果更加好看。
最后,还是很感谢paddlepaddle百度飞桨团队能提供这次机会,既是一次学习过程,也是一次深度学习应用的体验过程。
本demo参考别的大佬博主所作:
link.

2020-08-28相关推荐

  1. (十一:2020.08.28)CVPR 2017 追踪之论文纲要(译)

    CVPR 2017 追踪之论文纲要(修正于2020.08.28) 讲在前面 论文目录 讲在前面 论坛很多博客都对论文做了总结和分类,但就医学领域而言,对这些论文的筛选信息显然需要更加精细的把控,所以自 ...

  2. (十四:2020.08.28)CVPR 2014 追踪之论文纲要(译)

    CVPR 2020 追踪之论文纲要(修正于2020.08.28) 讲在前面 论文目录 讲在前面 论坛很多博客都对论文做了总结和分类,但就医学领域而言,对这些论文的筛选信息显然需要更加精细的把控,所以自 ...

  3. (十三:2020.08.28)CVPR 2015 追踪之论文纲要(译)

    CVPR 2020 追踪之论文纲要(修正于2020.08.27) 讲在前面 论文目录 讲在前面 论坛很多博客都对论文做了总结和分类,但就医学领域而言,对这些论文的筛选信息显然需要更加精细的把控,所以自 ...

  4. (十五:2020.08.28)CVPR 2013 追踪之论文纲要(译)

    讲在前面 论坛很多博客都对论文做了总结和分类,但就医学领域而言,对这些论文的筛选信息显然需要更加精细的把控,所以自己对这200篇的论文做一个大致从名称上的筛选,希望能找到些能解决当前问题的答案. 论文 ...

  5. 2020/08/28 周末计划

    时间过得真快,不知不觉,又到周末了,作为单身狗还是乖乖窝在家里比较好, 一来可以静下心来沉淀技术,二来是,避免遭受暴击!暴击!暴击!(重要的事情强调三遍!!!) 哈哈,开开玩笑,爱情这种东西,还是宁缺 ...

  6. 2020.08.28(写点题)

    JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度. JSON就是一串字符串 只不过元素会使用特定的符号标注. {} 双 ...

  7. (九:2020.08.27)CVPR 2019 追踪之论文纲要(译)

    CVPR 2019 追踪之论文纲要(修正于2020.08.28) 讲在前面 论文目录 讲在前面 论坛很多博客都对论文做了总结和分类,但就医学领域而言,对这些论文的筛选信息显然需要更加精细的把控,所以自 ...

  8. PYTHON学习笔记之(一)2020.08

    PYTHON学习笔记之(一)2020.08 Python基础 数据类型 常见的列表.字典,以及元组.集合. 1 列表 list 1.1 列表转换字符串 stu = ['王一', '李二', '张三'] ...

  9. IDEA 2020/7/28更新特性速览 - 对于各框架的支持,版本控制工具,docker,构建工具等的支持

    文章目录 IDEA 2020/7/28更新特性速览 - 对于各框架的支持,版本控制工具,docker,构建工具等的支持 1.对java 的更新 支持java15 支持错误跟踪 能够创建多个结构搜索和替 ...

  10. 2020.08.05狂人日记:C#计时器与串口通信

    2020.08.05狂人日记:C#计时器与串口通信 串口通信学习笔记 问题及解决 串口通信学习笔记 哔哩哔哩学习"C#上位机开发串口通信编程"笔记 串口发送数据 try //防止出 ...

最新文章

  1. linux 服务不支持 chkconfig 的解决方法
  2. 内存泄漏和内存溢出有什么区别
  3. Python剑指offer:和为s的连续整数序列
  4. Andriod --- JetPack (六):Room 增删改查
  5. springmvc教程(4)
  6. python 守护程序检测进程是否存在_python创建守护进程的疑问
  7. [EDA] 给出一个双进程状态机,请把它改为单进程状态机。
  8. Redis命令小细节
  9. maven依赖包和依赖仓库(1)
  10. ElasticSearch入门系列(一)是什么以及安装和运行
  11. 面向对象之自动生成助记码
  12. html实现圆形计时器特效,js css3圆形的时分秒计时器动画特效
  13. json字符生成Java实体类--用好bejson
  14. Unity3D应用防外挂与防破解
  15. 计算机老师教师节祝福语,送给老师教师节祝福语
  16. 今日微语早报简报 精选12条新闻摘要 每天一分钟 知晓天下事 3月22日
  17. 2017 最新qq登录算法
  18. 电力系统数字化转型历史(跨部门系统自建阶段)
  19. 敲代码时如何快速移动光标_如何用 罗技蓝牙键盘 K380在手机上打字编辑发布头条文章...
  20. 1.25 Cubemx_STM32H743II—QSPI

热门文章

  1. halcon图像灰度操作
  2. oracle EBS查进程,Linux下使用ps命令来查看Oracle DB以及EBS相关的进程
  3. centos7.x系统磁盘lvm扩容
  4. 百分百背后是百度电商的悲哀
  5. ElasticSearch + Kibana
  6. 如何学习Unity3D
  7. P4:正则表达式(Regular Expression)学习笔记
  8. Java神操作之利用Mybatis的resultMap的id标签进行分组映射
  9. Docker 部署在线文件转换服务--Libre Office Online
  10. zookeeper代码实现常用命令 - 雨中散步撒哈拉