1.准备工作,按博主的环境为准

Python 3.5

Opencv 3

Tensorflow 1.3.1

Keras 2

cudnn和CUDA,如果你的GPU足够厉害并且支持的话,可以选择安装

那就先安装起来,有兴趣的朋友给我个暗示,好让我有动力写下去,想实现整套的功能还是有点复杂的

第一部分,数据采集,及视频内人物脸

import cv2save_path = 'your save path'
cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml path')
cap = cv2.VideoCapture('your video path')
i = 0
while True:ret,frame = cap.read()gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)rect = cascade.detectMultiScale(gray,scaleFactor=1.3,minNeighbors=9,minSize=(50,50),flags = cv2.CASCADE_SCALE_IMAGE)print ("rect",rect)if not rect is ():for x,y,z,w in rect:roiImg = frame[y:y+w,x:x+z]cv2.imwrite(save_path+str(i)+'.jpg',roiImg)cv2.rectangle(frame,(x,y),(x+z,y+w),(0,0,255),2)i +=1cv2.imshow('frame',frame)if cv2.waitKey(1) &0xFF == ord('q'):break
cap.release()
cv2.destroyAllWindows()

第二部分,国外大神开源代码,用于模型训练

import cv2
import numpyfrom utils import get_image_paths, load_images, stack_images
from training_data import get_training_datafrom model import autoencoder_A
from model import autoencoder_B
from model import encoder, decoder_A, decoder_Btry:encoder  .load_weights( "models/encoder.h5"   )decoder_A.load_weights( "models/decoder_A.h5" )decoder_B.load_weights( "models/decoder_B.h5" )
except:passdef save_model_weights():encoder  .save_weights( "models/encoder.h5"   )decoder_A.save_weights( "models/decoder_A.h5" )decoder_B.save_weights( "models/decoder_B.h5" )print( "save model weights" )images_A = get_image_paths( "data/trump" )
images_B = get_image_paths( "data/cage"  )
images_A = load_images( images_A ) / 255.0
images_B = load_images( images_B ) / 255.0images_A += images_B.mean( axis=(0,1,2) ) - images_A.mean( axis=(0,1,2) )print( "press 'q' to stop training and save model" )for epoch in range(1000000):batch_size = 64warped_A, target_A = get_training_data( images_A, batch_size )warped_B, target_B = get_training_data( images_B, batch_size )loss_A = autoencoder_A.train_on_batch( warped_A, target_A )loss_B = autoencoder_B.train_on_batch( warped_B, target_B )print( loss_A, loss_B )if epoch % 100 == 0:save_model_weights()test_A = target_A[0:14]test_B = target_B[0:14]figure_A = numpy.stack([test_A,autoencoder_A.predict( test_A ),autoencoder_B.predict( test_A ),], axis=1 )figure_B = numpy.stack([test_B,autoencoder_B.predict( test_B ),autoencoder_A.predict( test_B ),], axis=1 )figure = numpy.concatenate( [ figure_A, figure_B ], axis=0 )figure = figure.reshape( (4,7) + figure.shape[1:] )figure = stack_images( figure )figure = numpy.clip( figure * 255, 0, 255 ).astype('uint8')cv2.imshow( "", figure )key = cv2.waitKey(1)if key == ord('q'):save_model_weights()exit()

第三部分,国外大神开源代码,人脸输出

import cv2
import numpy
from pathlib import Pathfrom utils import get_image_pathsfrom model import autoencoder_A
from model import autoencoder_B
from model import encoder, decoder_A, decoder_Bencoder  .load_weights( "models/encoder.h5"   )
decoder_A.load_weights( "models/decoder_A.h5" )
decoder_B.load_weights( "models/decoder_B.h5" )images_A = get_image_paths( "data/trump" )
images_B = get_image_paths( "data/cage" )def convert_one_image( autoencoder, image ):assert image.shape == (256,256,3)crop = slice(48,208)face = image[crop,crop]face = cv2.resize( face, (64,64) )face = numpy.expand_dims( face, 0 )new_face = autoencoder.predict( face / 255.0 )[0]new_face = numpy.clip( new_face * 255, 0, 255 ).astype( image.dtype )new_face = cv2.resize( new_face, (160,160) )new_image = image.copy()new_image[crop,crop] = new_facereturn new_imageoutput_dir = Path( 'output' )
output_dir.mkdir( parents=True, exist_ok=True )for fn in images_A:image = cv2.imread(fn)new_image = convert_one_image( autoencoder_B, image )output_file = output_dir / Path(fn).namecv2.imwrite( str(output_file), new_image )

第四部分,人脸替换

#import necessary libraries
import cv2
import glob as gb
# import numpy#capture video from the webcam
cap = cv2.VideoCapture('your video path')
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('your output video path', fourcc, 20.0, (1920, 1080))
#load the face finder
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml path')#load the face that will be swapped in
img_path = gb.glob("your image path")#start loop
for path in img_path:face_img = cv2.imread(path)while True:ret, img = cap.read()  # read imagegray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)faces = face_cascade.detectMultiScale(gray, 1.3, 3)  # find faces# for all the faces found in the framefor (x, y, w, h) in faces:# resize and blend the face to be swapped inface = cv2.resize(face_img, (h, w), interpolation=cv2.INTER_CUBIC)face = cv2.addWeighted(img[y:y + h, x:x + w], .5, face, .5, 1)# swap facesimg[y:y + h, x:x + w] = faceout.write(img)# show the imagecv2.imshow('img', img)key = cv2.waitKey(1)if key == ord('q'):exit()
cap.release()
cv2.destroyAllWindows()

最后放一张训练一小时后的视频截图,用的是尼古拉斯凯奇的脸

面朝大海--\(˙<>˙)/--落霞与孤鹜齐飞

【部分原创】python实现视频内的face swap(换脸)相关推荐

  1. h5 换脸 php,【部分原创】python实现视频内的face swap(换脸)

    1.准备工作,按博主的环境为准 Python 3.5 Opencv 3 Tensorflow 1.3.1 Keras 2 cudnn和CUDA,如果你的GPU足够厉害并且支持的话,可以选择安装 那就先 ...

  2. python实现视频ai换脸_【原创】python实现视频内的face swap(换脸)

    ruby中excel简单操作以及文件读取操作方法 # -*-coding:utf-8 -*-#author:kanlijunrequire 'win32ole'require 'fileutils'c ...

  3. [原创]使用python对视频/音频文件进行详细信息采集,并进行去重操作

    [原创]使用python对视频/音频文件进行详细信息采集,并进行去重操作 转载请注明出处 一.关于为什么用pymediainfo以及pymediainfo的安装 使用python对视频/音频文件进行详 ...

  4. Python通过文字生成语音,随机获取视频或图片素材生成伪原创的短视频

    前段时间写了一篇<抖音自动引流脚本源码>主要通过语录系统自动生成语句或随机评论,适用于自动评论引流脚本. 今天脑洞大开,想用Python通过文字生成语音,随机获取视频或图片素材生成伪原创的 ...

  5. python编程实例视屏-使用Python实现视频下载功能实例代码

    最近一两年短视频业务风生水起,各个视频网站都有各自特色的短视频内容.如果有一个程序可以把各大视频网站的热门用户最新发布的视频下载下来,不仅方便了观看,还可以将没有版权的视频发布在个人社交网站上,增加自 ...

  6. python视频-python剪切视频与合并视频的实现

    windows10/python3.6环境需安装imageio,ffmpeg(视频中有教下载)文字中不体现太麻烦,看起来也不方便! 剪切代码python代码: import imageio image ...

  7. AI火爆干货最全整理!五套深度学习和算法学习教程和三套Python学习视频!!!限时无套路免费领取!...

    点击蓝色"AI专栏"关注我哟 选择"星标",重磅干货,第一时间送达 这是站长第 31 期免费送丰富宝贵的干货资源与教程 本期绝对是满满的干货! 获取更多资源请关 ...

  8. Python处理视频文件的实用姿势

    Python处理视频文件的实用姿势 感觉这辈子,最深情绵长的注视,都给了手机. 视频是目前最热门的领域之一. 各平台争先推出便捷工具,自带滤镜和玩法,普通人也能轻松制作精美视频. 也有不少团队实现了批 ...

  9. python将视频像素抓取替换导出mosaic效果的文本视频

    python将视频像素抓取替换导出mosaic效果的文本视频 第一次写博客,关于python的. 全网关于这种视频的的合成代码几乎没有,所以我提供了一套这样的思路. 完成过程很痛苦.因为全网类似的太少 ...

最新文章

  1. 【 karle 专栏 】Android 初探底层知识系列
  2. gRPC——简介与Hello World
  3. SDNU 1416.一元三次方程求解(数学)
  4. 前端学习(983):jquery概念
  5. mysql 主从备份 全量数据_当主库存在历史数据时如何完成全量Mysql主从复制
  6. 苹果屏蔽更新_iOS 屏蔽更新的最新方法,完美支持 iOS13 系统
  7. 华为手机短息没有声音解决方案
  8. DeFi货币市场协议DMM宣布因监管部门的要求,已停止运营
  9. c语言合法自定义标识符_c语言合法标识符的要求是什么
  10. 中国人口增长的数学模型(for数学建模)
  11. HTML5期末大作业:关于旅游主题网站设计——开心网旅游网页源码(15页) HTML+CSS+JavaScript
  12. 关闭Dynamipsgui的自动更新
  13. 综合项目之闪讯破解(二)之 如何用C++建立PPPOE连接
  14. MySQL索引原理以及查询优化
  15. pkl形式的数据集读取和可视化
  16. 20220223换硬盘操作
  17. win10分辨率不能调整_笔记本电脑如何连接投影仪?MAC OS/Win10/7笔记本和投影仪连接方法...
  18. 【uni-app】Hbuilder打包h5发行到web服务器
  19. 简单解决高分屏模糊问题
  20. GTX960M安装Anaconda+cuda9.0+cudnn v7.6.5+tensorflow-gpu1.8.0

热门文章

  1. php 检测服务器网速_php测试用户网速
  2. html怎么让导航栏平均分布,CSS 怎么让按钮平均分布
  3. java 静态方法重写_Java 类中可以覆盖静态方法吗?
  4. View 体系详解:View 的工作流程
  5. 利用linux自带的邮箱服务实现邮件转发
  6. 26.angularJS $routeProvider
  7. linux磁盘管理系列一:磁盘配额管理
  8. tar.xz、tar.bz2 压缩包解压方式
  9. springmvc的异常处理对静态的资源的处理
  10. windows 80端口被占用的解决方法