基于Python实现视频的人脸融合功能


Posted in Python onJune 12, 2020

基于Python实现视频的人脸融合功能

图片提取

为了方便技术展示,我们选取素材为演员杨紫的一段演讲视频,用例仅为技术交流演示使用,不针对任何指定人。

为达到我们AI换脸的目的,我们首先需要将这段视频逐帧提取成照片

def vedio_2_pic(self,file,save_path):
 """
 逐帧取照片
 file:视频的位置
 save_path:保存路径
 """
 # 读取视频
 video = cv2.VideoCapture(file)
 # 获取视频帧率
 fps = video.get(cv2.CAP_PROP_FPS)
 # 获取画面大小
 width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
 height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))
 size = (width, height)
 frame_num = str(video.get(7))
 ret, frame = video.read()
 num =1
 while True:
  ret, frame = video.read()
  if ret !=True:
  break
  cv2.imwrite(save_path + str(num) + '.jpg', frame)
  num +=1
 video.release()
 return fps, size,frame_num

脸部融合

上一环节我们已对视频进行了图片提取,我希望演员杨紫可以有杨幂一样的眼睛,长得更像杨幂一点。那么"目标选定人"就是杨幂了。

因为视频可能会有镜头切换,对焦目标可能是观众或者其他人,所以在脸部融合前,需要判断要转换的图片中是否有杨紫,如果有大于0.85的概率确定是杨紫,我们进行脸部融合,如果小于等于0.85概率我们就不进行脸部融合,下面进行脸部融合。

基于Python实现视频的人脸融合功能

核心代码

for i in range(frame_num):
 image2="""/Users/***/face_ztl/picture/%d.jpg"""%(i)
 content = video_make.img_compare(image1,image2)
 try:
 if content >0.85:
  print('-----%d-----'%(i))
  video_make.merge_face(image2,object_image,merge_rate=100)
 else:
  print(0)
  img = cv2.imread(image2)
  img_path = image2.replace('picture','picture_new')
  cv2.imwrite(img_path, img)
 except:
 pass
 print('第%d张出现了问题'%(i))

提取音频

为了合成后的视频有声音,我们将视频中的音频进行提取并保存下来,代码如下:

def getMusic(self,video_name,save_path):
 """
 获取指定视频的音频
 video_name:视频路径
 save_path:音频保存路径
 举例
 save_path='/Users/***/vedio/1.wav' 
 """
 # 读取视频文件
 video = VideoFileClip(video_name)
 # 返回音频
 audio = video.audio
 audio.write_audiofile(save_path)

合成视频

至此我们得到了音频、融合后的图片,接下来就是最后一步合成视频了,代码如下:

"""
 图片转视频
 save_path:视频保存路径
 """
 # 写入视频
 fourcc = cv2.VideoWriter_fourcc(*'mp4v')
 video = cv2.VideoWriter(save_path, fourcc, fps, size)

 # 排序目的
 for item in range(int(frame_num)):
  path = pic_path +str(item) + '.jpg'
  if os.path.exists(path):
  # 读取原图像
  img = cv2.imread(path)
  # 写入视频
  video.write(img)
 video.release()

总结

到此这篇关于基于Python实现视频的人脸融合功能的文章就介绍到这了,更多相关Python实现视频的人脸融合内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
闭包在python中的应用之translate和maketrans用法详解
Aug 27 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
Jun 24 Python
Python正则获取、过滤或者替换HTML标签的方法
Jan 28 Python
opencv python 2D直方图的示例代码
Jul 20 Python
django使用LDAP验证的方法示例
Dec 10 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
May 15 Python
python处理document文档保留原样式
Sep 23 Python
python 使用shutil复制图片的例子
Dec 13 Python
Python装饰器原理与基本用法分析
Jan 07 Python
Django 再谈一谈json序列化
Mar 16 Python
python如何使用代码运行助手
Jul 03 Python
anaconda3安装及jupyter环境配置全教程
Aug 24 Python
使用Keras实现简单线性回归模型操作
Jun 12 #Python
Python实现Keras搭建神经网络训练分类模型教程
Jun 12 #Python
简单了解Python变量作用域正确使用方法
Jun 12 #Python
keras 读取多标签图像数据方式
Jun 12 #Python
Python数据可视化图实现过程详解
Jun 12 #Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
Jun 12 #Python
升级keras解决load_weights()中的未定义skip_mismatch关键字问题
Jun 12 #Python
You might like
php中计算时间差的几种方法
2009/12/31 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
2020/02/10 PHP
如何实现动态删除javascript函数
2007/05/27 Javascript
javascript 短路法代码精简
2009/08/20 Javascript
js或者jquery判断图片是否加载完成实现代码
2013/03/20 Javascript
js实现页面转发功能示例代码
2013/08/05 Javascript
jquery.mobile 共同布局遇到的问题小结
2015/02/10 Javascript
JavaScript获取浏览器信息的方法
2015/11/20 Javascript
IE和Firefox之间在JavaScript语法上的差异
2016/04/22 Javascript
JS实现touch 点击滑动轮播实例代码
2017/01/19 Javascript
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
微信小程序图片横向左右滑动案例
2017/05/19 Javascript
15个顶级开源JavaScript框架和库
2018/10/10 Javascript
Angular设置别名alias的方法
2018/11/08 Javascript
微信小程序webview实现长按点击识别二维码功能示例
2019/01/24 Javascript
详解vue组件中使用路由方法
2019/02/12 Javascript
微信小程序制作表格的方法
2019/02/14 Javascript
Angular6项目打包优化的实现方法
2019/12/15 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
5个很好的Python面试题问题答案及分析
2018/01/19 Python
Python I/O与进程的详细讲解
2019/03/08 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
python中p-value的实现方式
2019/12/16 Python
收集的22款给力的HTML5和CSS3帮助工具
2012/09/14 HTML / CSS
英格兰足协官方商店:England Store
2019/07/12 全球购物
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
C++面试题:关于链表和指针
2013/06/05 面试题
Python中如何定义一个函数
2016/09/06 面试题
校园安全广播稿范文
2014/09/25 职场文书
员工年终考核评语
2014/12/31 职场文书
浅谈css实现背景颜色半透明的两种方法
2021/12/06 HTML / CSS
基于Pygame实现简单的贪吃蛇游戏
2021/12/06 Python
MySQL数据库表约束讲解
2022/06/21 MySQL
element tree树形组件回显数据问题解决
2022/08/14 Javascript