超简单使用Python换脸实例


Posted in Python onMarch 27, 2019

换脸!

这段时间,deepfakes搞得火热,比方说把《射雕英雄传》里的朱茵换成了杨幂,看下面的图!毫无违和感!

超简单使用Python换脸实例

其实早在之前,基于AI换脸的技术就得到了应用,比方说《速度与激情7》里面的演员保罗.沃克,由于发生意外,

后期的视频都是由他的兄弟完成拍摄,然后再对其换脸,最终也就是我们影院看到的效果。

当然,也有人把这项技术应用在其他的领域,例如把某种电影的女主换成了盖尔.加朵(《神奇女侠》的扮演者),,,

超简单使用Python换脸实例

这真的是对“技术是一把又刃剑”阐述的十分到位。。。

关于deepfakes这里不再详细说明,好吧,小编承认是来蹭热度的。。。

下面来介绍一种对照片的简单换脸方法。

本篇介绍的换脸方法需要借助Face++,关于Face++的API,大家可自行查看说明文档,都比较简单,小编在这里就不做具体

说明了:

文档地址:https://console.faceplusplus.com.cn/documents/20813963

1.配置工具:

pip install requests
pip install simplejson

2.获取Face++ api_key和secret

Face++网址:https://console.faceplusplus.com.cn/dashboard

3.换脸步骤

调用的库

import requests
import simplejson
import json
import base64

第一步,获取人脸关键点,代码如下说述:

def find_face(imgpath):
    
    print("finding")
    
    http_url = 'https://api-cn.faceplusplus.com/facepp/v3/detect'
    
    data = {"api_key": '自己申请',
        "api_secret": '自己申请', "image_url": imgpath, "return_landmark": 1}
    
    files = {"image_file": open(imgpath, "rb")}
    
    response = requests.post(http_url, data=data, files=files)
    
    req_con = response.content.decode('utf-8')
    
    req_dict = json.JSONDecoder().decode(req_con)
    
    this_json = simplejson.dumps(req_dict)
    
    this_json2 = simplejson.loads(this_json)
    
    faces = this_json2['faces']
    
    list0 = faces[0]
    
    rectangle = list0['face_rectangle']
    
    # print(rectangle)
    
    return rectangle

第二步,换脸,其中图片的大小应不超过2M,代码如下所述:

#number表示换脸的相似度
def merge_face(image_url_1,image_url_2,image_url,number):
    
    ff1 = find_face(image_url_1)
    
    ff2 = find_face(image_url_2)
 
    rectangle1 = str(str(ff1['top']) + "," + str(ff1['left']) + "," + str(ff1['width']) + "," + str(ff1['height']))
    
    rectangle2 = str(ff2['top']) + "," + str(ff2['left']) + "," + str(ff2['width']) + "," + str(ff2['height'])
 
    url_add = "https://api-cn.faceplusplus.com/imagepp/v1/mergeface"
 
    f1 = open(image_url_1, 'rb')
 
    f1_64 = base64.b64encode(f1.read())
    
    f1.close()
    
    f2 = open(image_url_2, 'rb')
    
    f2_64 = base64.b64encode(f2.read())
    
    f2.close()
 
    data = {"api_key": '自己申请', "api_secret": '自己申请',
        "template_base64": f1_64, "template_rectangle": rectangle1,
        "merge_base64": f2_64, "merge_rectangle": rectangle2, "merge_rate": number}
 
    response = requests.post(url_add, data=data)
 
    req_con = response.content.decode('utf-8')
 
    req_dict = json.JSONDecoder().decode(req_con)
 
    result = req_dict['result']
 
    imgdata = base64.b64decode(result)
 
    file = open(image_url, 'wb')
 
    file.write(imgdata)
 
    file.close()

测试

def test():
    
    image1 = r"F:\GXT.bmp"
    
    image2 = r"F:\MSC.bmp"
    
    image = r"F:\MEG.bmp"
    
    merge_face(image2,image1,image,90)

测试结果:

左图:关某某

右图:马某某

中图:MERGE

超简单使用Python换脸实例超简单使用Python换脸实例超简单使用Python换脸实例

以上所述是小编给大家介绍的Python换脸实例详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python中MySQLdb和torndb模块对MySQL的断连问题处理
Nov 09 Python
Python采用Django开发自己的博客系统
Sep 29 Python
Python编程实现线性回归和批量梯度下降法代码实例
Jan 04 Python
Python数据类型之Number数字操作实例详解
May 08 Python
python三大神器之fabric使用教程
Jun 10 Python
Python中查看变量的类型内存地址所占字节的大小
Jun 26 Python
Linux下通过python获取本机ip方法示例
Sep 06 Python
Python装饰器使用你可能不知道的几种姿势
Oct 25 Python
Python爬虫爬取电影票房数据及图表展示操作示例
Mar 27 Python
通过Python实现一个简单的html页面
May 16 Python
python SOCKET编程基础入门
Feb 27 Python
Python天气语音播报小助手
Sep 25 Python
python爬虫爬取微博评论案例详解
Mar 27 #Python
Python实现查找字符串数组最长公共前缀示例
Mar 27 #Python
详解python中@的用法
Mar 27 #Python
详解python列表生成式和列表生成式器区别
Mar 27 #Python
Python3实现的回文数判断及罗马数字转整数算法示例
Mar 27 #Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
Mar 27 #Python
python模块之subprocess模块级方法的使用
Mar 26 #Python
You might like
以文件形式缓存php变量的方法
2015/06/26 PHP
php实现贪吃蛇小游戏
2016/07/26 PHP
PHP之多条件混合筛选功能的实现方法
2019/10/09 PHP
JAVASCRIPT 对象的创建与使用
2021/03/09 Javascript
海量经典的jQuery插件集合
2010/01/12 Javascript
基于jsTree的无限级树JSON数据的转换代码
2010/07/27 Javascript
基于jquery的jqDnR拖拽溢出的修改
2011/02/12 Javascript
Javascript 面向对象编程(一) 封装
2011/08/28 Javascript
JavaScript插入动态样式实现代码
2012/02/22 Javascript
Js 获取Gridview选中行的内容操作步骤
2013/02/05 Javascript
js实现回放拖拽轨迹从过程上进行分析
2014/06/26 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
2015/10/25 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
JavaScript隐式类型转换
2016/03/15 Javascript
基于node实现websocket协议
2016/04/25 Javascript
jQuery删除节点用法示例(remove方法)
2016/09/08 Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
2017/07/11 Javascript
jQuery使用bind函数实现绑定多个事件的方法
2017/10/11 jQuery
如何利用@angular/cli V6.0直接开发PWA应用详解
2018/05/06 Javascript
微信小程序获取音频时长与实时获取播放进度问题
2018/08/28 Javascript
vue中引入第三方字体文件的方法示例
2018/12/17 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
2019/05/30 Javascript
layer父页获取弹出层输入框里面的值方法
2019/09/02 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
2019/12/06 Javascript
Python生成短uuid的方法实例详解
2018/05/29 Python
关于python写入文件自动换行的问题
2018/06/23 Python
python数据结构学习之实现线性表的顺序
2018/09/28 Python
python 生成图形验证码的方法示例
2018/11/11 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
2019/08/09 Python
python实现双色球随机选号
2020/01/01 Python
Python中sys模块功能与用法实例详解
2020/02/26 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
2021/02/22 Python
alice McCALL官网:澳大利亚时尚品牌
2020/11/16 全球购物
学校政风行风评议工作总结
2014/10/21 职场文书
婚礼答谢词
2015/01/04 职场文书
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技