基于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针对给定列表中元素进行翻转操作的方法分析
Apr 27 Python
python实现逆序输出一个数字的示例讲解
Jun 25 Python
python多进程使用及线程池的使用方法代码详解
Oct 24 Python
Python设计模式之解释器模式原理与用法实例分析
Jan 10 Python
使用python实现mqtt的发布和订阅
May 05 Python
Python实现获取系统临时目录及临时文件的方法示例
Jun 26 Python
python按行读取文件并找出其中指定字符串
Aug 08 Python
如何基于Python制作有道翻译小工具
Dec 16 Python
Python新手学习标准库模块命名
May 29 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
Jun 10 Python
Python加速程序运行的方法
Jul 29 Python
如何基于python实现单目三维重建详解
Jun 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
AM/FM收音机的安装与调试
2021/03/02 无线电
深入PHP nl2br()格式化输出的详解
2013/06/05 PHP
sql注入与转义的php函数代码
2013/06/17 PHP
PHP程序中使用adodb连接不同数据库的代码实例
2015/12/19 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
2016/03/07 PHP
PHP与Ajax相结合实现登录验证小Demo
2016/03/16 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
jquery 插件开发方法小结
2009/10/23 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
JavaScript数据类型转换的注意事项
2016/07/31 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
Swiper.js实现移动端元素左右滑动
2019/09/08 Javascript
layui下拉列表select实现可输入查找的方法
2019/09/28 Javascript
jQuery实现雪花飘落效果
2020/08/02 jQuery
详解vue 组件注册
2020/11/20 Vue.js
详解Django中的过滤器
2015/07/16 Python
python用装饰器自动注册Tornado路由详解
2017/02/14 Python
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
2020/03/13 Python
使用pandas实现筛选出指定列值所对应的行
2020/12/13 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
2021/01/08 Python
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
国际知名军事风格休闲装品牌:Alpha Industries(阿尔法工业)
2017/05/24 全球购物
英国专业美容产品在线:Mylee(从指甲到脱毛)
2020/07/06 全球购物
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
华硕新加坡官方网上商店:ASUS Singapore
2020/07/09 全球购物
怎样比较两个类型为String的字符串
2016/08/17 面试题
Linux上比较文件的命令都有哪些
2013/09/28 面试题
11月升旗仪式讲话稿
2014/02/15 职场文书
上课打牌的检讨书
2014/02/15 职场文书
护士求职简历自我评价
2015/03/10 职场文书
庆元旦主持词
2015/07/06 职场文书
基于python制作简易版学生信息管理系统
2021/04/20 Python
零基础学java之带返回值的方法的定义和调用
2022/04/10 Java/Android