基于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的ORM框架SQLObject入门实例
Apr 28 Python
利用python代码写的12306订票代码
Dec 20 Python
Python自定义主从分布式架构实例分析
Sep 19 Python
Python 专题三 字符串的基础知识
Mar 19 Python
python导入坐标点的具体操作
May 10 Python
浅析Python与Mongodb数据库之间的操作方法
Jul 01 Python
Python qrcode 生成一个二维码的实例详解
Feb 12 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
Jun 14 Python
没编程基础可以学python吗
Jun 17 Python
Python基于yaml文件配置logging日志过程解析
Jun 23 Python
有关pycharm登录github时有的时候会报错connection reset的问题
Sep 15 Python
详解pytorch创建tensor函数
Mar 22 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接收json 并将接收数据插入数据库的实现代码
2015/12/01 PHP
PHP在线书签系统分享
2016/01/04 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
js的匿名函数使用介绍
2013/12/11 Javascript
兼容主流浏览器的iframe自适应高度js脚本
2014/01/10 Javascript
javascript函数重载解决方案分享
2014/02/19 Javascript
js使用DOM设置单选按钮、复选框及下拉菜单的方法
2015/01/20 Javascript
基于javascript实现最简单的选项卡切换效果
2016/05/16 Javascript
喜大普奔!jQuery发布 3.0 最终版
2016/06/12 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
JS闭包可被利用的常见场景小结
2017/04/09 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
2017/05/23 Javascript
vue 进阶之实现父子组件间的传值
2019/04/26 Javascript
基于postman获取动态数据过程详解
2020/09/08 Javascript
vue使用svg文件补充-svg放大缩小操作(使用d3.js)
2020/09/22 Javascript
Python实现的数据结构与算法之基本搜索详解
2015/04/22 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
详解PyCharm安装MicroPython插件的教程
2019/06/24 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
2019/08/06 Python
Python 复平面绘图实例
2019/11/21 Python
Python迭代器模块itertools使用原理解析
2019/12/11 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
2020/03/30 Python
详解HTML5如何使用可选样式表为网站或应用添加黑暗模式
2020/04/07 HTML / CSS
国外平面设计第一市场:99designs
2016/10/25 全球购物
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
《第一次抱母亲》教学反思
2014/04/16 职场文书
教师党员个人整改措施
2014/10/27 职场文书
2015年端午节活动总结
2015/02/11 职场文书
业务内勤岗位职责
2015/04/13 职场文书
理解深度学习之深度学习简介
2021/04/14 Python
SpringBoot SpringEL表达式的使用
2021/07/25 Java/Android
Vue3如何理解ref toRef和toRefs的区别
2022/02/18 Vue.js
开发者首先否认《遗弃》被取消的传言
2022/04/11 其他游戏