基于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迭代器和生成器介绍
Mar 06 Python
在Python中的Django框架中进行字符串翻译
Jul 27 Python
基于hashlib模块--加密(详解)
Jun 21 Python
Django自定义认证方式用法示例
Jun 23 Python
使用Python进行AES加密和解密的示例代码
Feb 02 Python
20个常用Python运维库和模块
Feb 12 Python
python Opencv将图片转为字符画
Feb 19 Python
Python处理菜单消息操作示例【基于win32ui模块】
May 09 Python
python实现nao机器人手臂动作控制
Apr 29 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
Aug 13 Python
python自动发微信监控报警
Sep 06 Python
详解python常用命令行选项与环境变量
Feb 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的一个完整SMTP类(解决邮件服务器需要验证时的问题)
2006/10/09 PHP
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
2011/10/31 PHP
php  单例模式详细介绍及实现源码
2016/11/05 PHP
jquery插件tooltipv顶部淡入淡出效果使用示例
2013/12/05 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
bootstrapValidator.min.js表单验证插件
2017/02/09 Javascript
在React中如何优雅的处理事件响应详解
2017/07/24 Javascript
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
Vue Promise的axios请求封装详解
2018/08/13 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
js中自定义react数据验证组件实例详解
2018/10/19 Javascript
Vue 无限滚动加载指令实现方法
2019/05/28 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
vue实现简单图片上传
2020/06/30 Javascript
js实现鼠标切换图片(无定时器)
2021/01/27 Javascript
Python队列的定义与使用方法示例
2017/06/24 Python
Python根据欧拉角求旋转矩阵的实例
2019/01/28 Python
selenium+python环境配置教程详解
2019/05/28 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
jupyter notebook的安装与使用详解
2020/05/18 Python
德国高端单身人士交友网站:ElitePartner
2018/12/02 全球购物
如何写一份好的自荐信
2014/01/02 职场文书
运动会广播稿20字
2014/02/18 职场文书
市场营销求职信范文
2014/02/21 职场文书
2014大学生职业生涯规划书最新范文
2014/09/13 职场文书
个人租房协议书范本
2014/09/30 职场文书
教师群众路线心得体会
2014/11/04 职场文书
2015年清明节网上祭英烈留言寄语
2015/03/04 职场文书
违反纪律检讨书范文
2015/05/07 职场文书
入党介绍人意见怎么写
2015/06/03 职场文书
2015入党个人自传范文
2015/06/26 职场文书
2015年政教主任工作总结
2015/07/23 职场文书
幼儿园卫生保健制度
2015/08/05 职场文书
浅谈golang package中init方法的多处定义及运行顺序问题
2021/05/06 Golang