基于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 26 Python
探究Python多进程编程下线程之间变量的共享问题
May 05 Python
Python对List中的元素排序的方法
Apr 01 Python
对pandas的层次索引与取值的新方法详解
Nov 06 Python
python使用matplotlib绘制热图
Nov 07 Python
解决pip install xxx报错SyntaxError: invalid syntax的问题
Nov 30 Python
django框架面向对象ORM模型继承用法实例分析
Jul 29 Python
python中的线程threading.Thread()使用详解
Dec 17 Python
Python Tkinter Entry和Text的添加与使用详解
Mar 04 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
Mar 09 Python
Python判断字符串是否为空和null方法实例
Apr 26 Python
Python getsizeof()和getsize()区分详解
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对包含html标签的字符串进行截取的函数分享
2014/06/19 PHP
php中cookie实现二级域名可访问操作的方法
2014/11/11 PHP
PHP实现判断数组是一维、二维或几维的方法
2017/02/06 PHP
firefox下对ajax的onreadystatechange的支持情况分析
2009/12/14 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
Vue.js实现微信过渡动画左右切换效果
2017/06/13 Javascript
微信小程序实现留言板
2018/10/31 Javascript
微信小程序中显示倒计时代码实例
2019/05/09 Javascript
最简单的vue消息提示全局组件的方法
2019/06/16 Javascript
Angular.JS读取数据库数据调用完整实例
2019/07/02 Javascript
解决Vue打包后访问图片/图标不显示的问题
2019/07/25 Javascript
Vue中错误图片的处理的实现代码
2019/11/07 Javascript
[03:02]辉夜杯主赛事第二日 每日之星
2015/12/27 DOTA
Python3 入门教程 简单但比较不错
2009/11/29 Python
Python基于二分查找实现求整数平方根的方法
2016/05/12 Python
使用Python写一个贪吃蛇游戏实例代码
2017/08/21 Python
python实现多线程网页下载器
2018/04/15 Python
python中subprocess批量执行linux命令
2018/04/27 Python
如何实现删除numpy.array中的行或列
2018/05/08 Python
Python实现读写INI配置文件的方法示例
2018/06/09 Python
Python高级特性与几种函数的讲解
2019/03/08 Python
python3.6环境安装+pip环境配置教程图文详解
2019/06/20 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
2020/01/06 Python
Python numpy多维数组实现原理详解
2020/03/10 Python
使用opencv识别图像红色区域,并输出红色区域中心点坐标
2020/06/02 Python
新学期班主任寄语
2014/01/18 职场文书
怎样写好创业计划书的内容
2014/02/06 职场文书
老师的检讨书
2014/02/23 职场文书
计算机网络及管理学专业求职信
2014/06/05 职场文书
激励员工的口号
2014/06/16 职场文书
工作检讨书怎么写
2014/10/10 职场文书
python实现腾讯滑块验证码识别
2021/04/27 Python
java基础——多线程
2021/07/03 Java/Android