基于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计时相关操作详解【time,datetime】
May 26 Python
Django中redis的使用方法(包括安装、配置、启动)
Feb 21 Python
python表格存取的方法
Mar 07 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
Aug 03 Python
python使用numpy读取、保存txt数据的实例
Oct 14 Python
浅谈解除装饰器作用(python3新增)
Oct 15 Python
使用Python实现微信提醒备忘录功能
Dec 04 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
Jul 04 Python
在pycharm下设置自己的个性模版方法
Jul 15 Python
Python Web框架之Django框架cookie和session用法分析
Aug 16 Python
Python3实现个位数字和十位数字对调, 其乘积不变
May 03 Python
python爬虫判断招聘信息是否存在的实例代码
Nov 20 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 array数组的教程详解
2013/06/05 PHP
php+mysql数据库实现无限分类的方法
2014/12/12 PHP
PHP使用Pear发送邮件(Windows环境)
2016/01/05 PHP
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
Smarty模板类内部原理实例分析
2019/07/03 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
ExtJS Grid使用SimpleStore、多选框的方法
2009/11/20 Javascript
js 表格隔行颜色
2009/12/02 Javascript
JS实现控制表格单元格垂直对齐的方法
2015/03/30 Javascript
Bootstrap模仿起筷首页效果
2016/05/09 Javascript
H5移动端图片压缩上传开发流程
2016/11/09 Javascript
原生ajax处理json格式数据的实例代码
2016/12/25 Javascript
在 Angular 中实现搜索关键字高亮示例
2017/03/21 Javascript
jsonp跨域获取数据的基础教程
2018/07/01 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
2019/09/01 Javascript
vue 解决mintui弹窗弹起来,底部页面滚动bug问题
2020/11/12 Javascript
Vue实现todo应用的示例
2021/02/20 Vue.js
浅谈function(函数)中的动态参数
2017/04/30 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
python dataframe常见操作方法:实现取行、列、切片、统计特征值
2018/06/09 Python
python3 kmp 字符串匹配的方法
2018/07/07 Python
Python多线程处理实例详解【单进程/多进程】
2019/01/30 Python
Django 创建新App及其常用命令的实现方法
2019/08/04 Python
使用python的turtle绘画滑稽脸实例
2019/11/21 Python
Python实现线性判别分析(LDA)的MATLAB方式
2019/12/09 Python
Java多线程实现四种方式原理详解
2020/06/02 Python
Python ADF 单位根检验 如何查看结果的实现
2020/06/03 Python
PyCharm 光标变成黑块的解决方式
2021/02/06 Python
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
一个C/C++编程面试题
2013/11/10 面试题
行政助理岗位职责
2013/11/10 职场文书
电子信息毕业生自荐信
2013/11/16 职场文书
聘用意向书范本
2014/04/01 职场文书
2015年高校辅导员工作总结
2015/04/20 职场文书
安全教育的主题班会
2015/08/13 职场文书