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

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

Python 3.5

Opencv 3

Tensorflow 1.3.1

Keras 2

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

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

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

import cv2

save_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 +=1

cv2.imshow('frame',frame)

if cv2.waitKey(1) &0xFF == ord('q'):

break

cap.release()

cv2.destroyAllWindows()

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

import cv2

import numpy

from utils import get_image_paths, load_images, stack_images

from training_data import get_training_data

from model import autoencoder_A

from model import autoencoder_B

from model import encoder, decoder_A, decoder_B

try:

encoder .load_weights( "models/encoder.h5" )

decoder_A.load_weights( "models/decoder_A.h5" )

decoder_B.load_weights( "models/decoder_B.h5" )

except:

pass

def 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.0

images_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 = 64

warped_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 Path

from utils import get_image_paths

from model import autoencoder_A

from model import autoencoder_B

from model import encoder, decoder_A, decoder_B

encoder .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_face

return new_image

output_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).name

cv2.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 image

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(gray, 1.3, 3) # find faces

# for all the faces found in the frame

for (x, y, w, h) in faces:

# resize and blend the face to be swapped in

face = 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 faces

img[y:y + h, x:x + w] = face

out.write(img)

# show the image

cv2.imshow('img', img)

key = cv2.waitKey(1)

if key == ord('q'):

exit()

cap.release()

cv2.destroyAllWindows()

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

8e8b1896e2961090afe254260e0beb1a.png

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

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

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

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

Python的常用内置函数介绍

Python的常用内置函数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.取绝对值(abs) #!/usr/bin/env python #_*_coding:utf-8_ ...

零基础快速掌握Python系统管理视频课程【猎豹网校】

点击了解更多Python课程>>> 零基础快速掌握Python系统管理视频课程[猎豹网校] 课程目录 01.第01章 Python简介.mp4 02.第02章 IPython基础.m ...

Python学习教程(Python学习视频_Python学些路线):Day06 函数和模块的使用

Python学习教程(Python学习视频_Python学些路线):函数和模块的使用 在讲解本章节的内容之前,我们先来研究一道数学题,请说出下面的方程有多少组正整数解. $$x_1 + x_2 + x ...

[Python] 将视频转成ASCII符号形式、生成GIF图片

一.简要说明 简述:本文主要展示将视频转成ASCII符号形式展示出来,带音频. 运行环境:Win10/Python3.5. 主要模块: PIL.numpy.shutil. [PIL]: 图像处理 [n ...

python常用数据类型内置方法介绍

熟练掌握python常用数据类型内置方法是每个初学者必须具备的内功. 下面介绍了python常用的集中数据类型及其方法,点开源代码,其中对主要方法都进行了中文注释. 一.整型 a = 100 a.xx ...

python计算非内置数据类型占用内存

getsizeof的局限 python非内置数据类型的对象无法用sys.getsizeof()获得真实的大小,例: import networkx as nx import sys G = nx.Gr ...

Python远程视频监控

Python远程视频监控程序   老板由于事务繁忙无法经常亲临教研室,于是让我搞个监控系统,让他在办公室就能看到教研室来了多少人.o(>﹏

随机推荐

mysql关联表的复制

1. 复制被参照的表: CREATE TABLE clone_product_1 LIKE product_1; INSERT INTO clone_product_1 SELECT * FROM p ...

Web API数据传输加密

http://www.cnblogs.com/wuhuacong/p/4620300.html Web API应用架构设计分析(2) 在上篇随笔, ...

类型转换辅助工具类TypeCaseHelper

package org.sakaiproject.util; import java.math.BigDecimal; import java.sql.Date; import java.sql.Ti ...

仿souhu页面设计

仿搜狐页面设计 Html页面设计代码: ...

【ASP.NET+MVC4+Web+编程】读书笔记

模型:数据和业务逻辑 视图:展示 控制器:接收视图输入数据,通过模型层业务逻辑处理后 返回给视图 分离关注点(模型 视图 控制器).惯例优先原则 browser-->routing-->c ...

CentOS IP DNS设置

1.CentOS 修改DNS 修改对应网卡的DNS的配置文件 # vi /etc/resolv.conf 修改以下内容 nameserver 8.8.8.8 #google域名服务器 nameserv ...

centos 下安装 Jre 及 selenium

下载软件包 下载链接: jre-7u55-linux-i586.tar.gz : http://pan.baidu.com/s/14cjds selenium-server-standalone-2. ...

前端框架Bootstrap - 快速搭建网站

Bootstrap简介         Bootstrap是Twitter推出的一个开源的用于前端开发的工具包.是一个CSS/HTML/JavaScript框架.Bootstrap是基于HTML5和C ...

Windows Server 2016-清理残留域控信息

本章紧接上文,当生产环境中域控出现问题无法修复以后,一方面我们需要考虑抢夺FSMO角色,另一方面我们需要考虑的问题是清理当前域控的残留信息,以防止残留数据信息导致用户验证或者解析异常等问题.本章讲到如 ...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

接口隔离原则(ISP)

接口隔离原则(The Interface Segregation Interface) 这个原则用来处理“胖(fat)”接口(类的接口不是内聚的)所具有的缺点。“胖”接口可以分解成多组方法。 考虑一个安全系统,有一些Door对象&a…

马歇尔·赫伯特:人工智能的前沿技术与实例分析

来源:中国人工智能学会2017年12月11日,国际知名机器人专家、美国卡耐基梅隆大学机器人研究所所长马歇尔赫伯特(Martial Hebert)教授和首席科学家大卫伯恩(David Bourne)教授访问了中国科学技术大学参观中科大机器人实验室并作演讲。演讲人简介&#xff1…

ActiveMQ消费者平滑关闭

平滑关闭的思路就是让正在执行的任务线程正常执行完毕,然后再关闭JVM。在JVM关闭之前触发一个shutdown hook,jvm自带这个hook,在java启动时候就可以注册这样的hook。 ##1、简述JVM关闭钩子(shutdown hook) 首先JVM的关…

二叉堆时间复杂度 php,二叉堆(Binary Heap)

二叉堆这个数据结构有点意思,自己做了个总结,内容结构如下:二叉堆性质二叉堆操作应用二叉堆性质:堆(Heap)是一个可以被看成近似完全二叉树的结构,具有完全二叉树的特性:缺少的叶子节点总是位于右子节点n个节…

产业丨一文读懂人工智能产业链,未来10年2000亿美元市场

来源:国防科技信息网概要:针对人工智能产业链,主要有三个核心:基础技术、人工智能技术及人工智能应用,本文将从主要从这三个方面进行梳理。人工智能(Artificial Intelligence),英文缩…

2017年高性能计算领域的成功与失败

来源:中科院信息科技战略情报概要:2017年,机器学习和各种人工智能应用在高性能计算领域持续发挥着重要影响力。2017年12月9日,TOP500官网刊文总结了高性能计算在2017年取得的新进展,以及未来发展趋势,主要内…

Science封面:谁动了我的DNA?原来是你拿去做机器人了

来源:机器人大讲堂概要:慕尼黑工业大学的Friedrich C. Simmel团队使用DNA分子,组装出了一个可以远程控制的纳米机械臂,并用它成功推动了一个纳米金颗粒。本周《Science》期刊的封面故事,介绍了一款德国制造的灵活DNA手…

中国倒数第五!毕马威全球自动驾驶报告|附下载

来源:智东西概要:指向高效、安全的自动驾驶被认为是未来汽车形态,渐渐融入到各国汽车发展战略中去,科技公司和传统车企纷纷入局。指向高效、安全的自动驾驶被认为是未来汽车形态,渐渐融入到各国汽车发展战略中去&#…

潘建伟团队进行人类首次洲际量子通信,给奥地利发去了什么?

来源:澎湃新闻概要:世界首颗量子通信实验卫星完成目标;世界首条量子保密通信“京沪干线”开通;世界首次洲际量子通信……世界首颗量子通信实验卫星完成目标;世界首条量子保密通信“京沪干线”开通;世界首次…

《人工智能标准化白皮书(2018版)》发布|附下载

来源:光明网概要:1月18日下午,2018人工智能标准化论坛在京召开,本次论坛发布了《人工智能标准化白皮书(2018版)》。1月18日下午,2018人工智能标准化论坛在京召开,本次论坛发布了《人…

matlab7.0停止工作,matlab7.0闪退是怎么回事_matlab7.0闪退怎么办

描述兼容性引起的matlab7.0闪退1、在桌面的matlab图标上点击右键,选择“属性”2、选择“兼容性”3、勾选“以兼容模式运行这个程序”,再选择“Windows2000”4点击“确定”matlab7.0闪退的解决办法1)如果不是Intel的CPU,要添加环境变量--〉系统…

贝叶斯机器学习前沿进展

来源:人机与认知实验室概要:随着大数据的快速发展,以概率统计为基础的机器学习在近年来受到工业界和学术界的极大关注,并在视觉、语音、自然语言、生物等领域获得很多重要的成功应用。摘要 随着大数据的快速发展,以概率…

数据库事务的概念及其实现原理

目录 1. 认识事务 1.1 为什么需要数据库事务1.2 什么是数据库事务1.3 事务如何解决问题1.4 事务的ACID特性以及实现原理概述2.并发异常与并发控制技术 2.1 常见的并发异常2.2 事务的隔离级别2.3 事务隔离性的实现——常见的并发控制技术 2.3.1 基于封锁的并发控制2.3.2 基于时…

Fast.ai推出NLP最新迁移学习方法「微调语言模型」,可将误差减少超过20%!

原文来源:arxiv作者:Jeremy Howard、Sebastian Ruder「雷克世界」编译:嗯~是阿童木呀可以这样说,迁移学习已经促使计算机视觉领域发生了具有革命性的变化,但对于自然语言处理(NLP)中的现有方法来…

Spring Data JPA事务管理

1、事务基础概念_四大特性 数据库中事务的四大特性(ACID),如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性,是指事务包含的所有…

教育部发文:AI、算法等2018年进入全国高中课程!

来源:全球人工智能概要:1月16日上午,教育部召开新闻发布会,介绍了《普通高中课程方案和语文等学科课程标准(2017年版)》的有关情况,并重新修订了语文等14门学科的课程标准。1月16日上午&#xf…

JPA事务示例分析

在这个工程中,定义一个名为User的实体: Entity Data NoArgsConstructor public class User {IdGeneratedValueprivate Long id;Size(max 5)private String name;Max(50)private Integer age;public User(String name, Integer age) {this.name name;t…

智能零售来了!Amazon Go无人商店周一正式对公众开放

来源:网络大数据概要:经过近 14 个月只对亚马逊公司员工开放的试运行,周一这家标着 Amazon Go 标志的店面将公开亮相,这是亚马逊近年来投入最多努力的项目之一,旨在重塑实体购物的体验。据《西雅图时报》报道&#xff…

看懂GE Predix ,就看懂了工业互联网

来源:小黑羊JoinWings概要:Predix是GE推出的针对整个工业领域的基础性系统平台,这是一个开放的平台,它可以应用在工业制造、能源、医疗等各个领域。Predix是GE推出的针对整个工业领域的基础性系统平台,这是一个开放的平…

JPA和事务管理

1 事务 1.1事务管理方式 spring支持编程式事务管理和声明式事务管理两种方式。 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。 声明式事务管理建立在AOP之上的…