基于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 创建子进程模块subprocess详解
Apr 08 Python
Python找出9个连续的空闲端口
Feb 01 Python
python对象及面向对象技术详解
Jul 19 Python
Python脚本获取操作系统版本信息
Dec 17 Python
Python入门之三角函数全解【收藏】
Nov 08 Python
Python操作Oracle数据库的简单方法和封装类实例
May 07 Python
python对html过滤处理的方法
Oct 21 Python
python 定时器每天就执行一次的实现代码
Aug 14 Python
python 协程中的迭代器,生成器原理及应用实例详解
Oct 28 Python
python带参数打包exe及调用方式
Dec 21 Python
nginx搭建基于python的web环境的实现步骤
Jan 03 Python
如何用Python徒手写线性回归
Jan 25 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
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
用PHP连接MySQL代码的参数说明
2008/06/07 PHP
PHP OPCode缓存 APC详细介绍
2010/10/12 PHP
linux系统上支持php的 iconv()函数的方法
2011/10/01 PHP
理解PHP中的stdClass类
2014/04/18 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
PHP 信号管理知识整理汇总
2017/02/19 PHP
基于PHP实现发微博动态代码实例
2020/12/11 PHP
Javascript中暂停功能的实现代码
2007/03/04 Javascript
range 标准化之获取
2011/08/28 Javascript
jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享
2015/08/20 Javascript
Jquery easyui 实现动态树
2015/11/17 Javascript
谈谈target=_new和_blank的不同之处
2016/10/25 Javascript
javascript中的try catch异常捕获机制用法分析
2016/12/14 Javascript
Bootstrap缩略图的创建方法
2017/03/22 Javascript
集合Bootstrap自定义confirm提示效果
2017/09/19 Javascript
vue源码入口文件分析(推荐)
2018/01/30 Javascript
jQuery Dom元素操作技巧
2018/02/04 jQuery
JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例
2018/02/08 Javascript
vue2.0获取鼠标位置的方法
2018/09/13 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
JS图片懒加载技术实现过程解析
2020/07/27 Javascript
python——全排列数的生成方式
2020/02/26 Python
香港化妆品经销商:我的公主
2016/08/05 全球购物
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
上课迟到检讨书100字
2014/01/11 职场文书
四川成都导游欢迎词
2014/01/18 职场文书
士力架广告词
2014/03/20 职场文书
机械专业技术员求职信
2014/06/14 职场文书
项目转让协议书
2014/10/27 职场文书
同学毕业留言寄语
2015/02/27 职场文书
音乐教师求职信范文
2015/03/20 职场文书
python析构函数用法及注意事项
2021/06/22 Python
python数据可视化JupyterLab实用扩展程序Mito
2021/11/20 Python
python中pycryto实现数据加密
2022/04/29 Python