超简单使用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 装饰器实现DRY(不重复代码)原则
Mar 05 Python
python使用RNN实现文本分类
May 24 Python
Python实现的简单计算器功能详解
Aug 25 Python
不知道这5种下划线的含义,你就不算真的会Python!
Oct 09 Python
python简单实现AES加密和解密
Mar 28 Python
Python 共享变量加锁、释放详解
Aug 28 Python
python中bytes和str类型的区别
Oct 21 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
Apr 23 Python
Python使用Excel将数据写入多个sheet
May 16 Python
pandas创建DataFrame的7种方法小结
Jun 14 Python
详解Scrapy Redis入门实战
Nov 18 Python
scrapy在python爬虫中搭建出错的解决方法
Nov 22 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下使用SMTP发邮件的代码
2008/01/10 PHP
php cookie 登录验证示例代码
2009/03/16 PHP
PHP如何解决网站大流量与高并发的问题
2011/06/25 PHP
php判断用户是否手机访问代码
2015/06/08 PHP
一个完整的php文件上传类实例讲解
2015/10/27 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
2016/12/21 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
2019/04/09 PHP
discuz论坛更换域名,详细文件修改步骤
2020/12/09 PHP
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
2012/01/04 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
ES6 Promise对象概念与用法分析
2017/04/01 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
2017/04/24 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
angular2系列之路由转场动画的示例代码
2017/11/09 Javascript
Vue数据双向绑定原理及简单实现方法
2018/05/18 Javascript
vue使用ajax获取后台数据进行显示的示例
2018/08/09 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
2019/05/10 Javascript
Vue实现图书管理案例
2021/01/20 Vue.js
python的keyword模块用法实例分析
2015/06/30 Python
使用Nginx+uWsgi实现Python的Django框架站点动静分离
2016/03/21 Python
python取余运算符知识点详解
2019/06/27 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
2019/08/17 Python
python 实现快速生成连续、随机字母列表
2019/11/28 Python
Ubuntu16.04安装python3.6.5步骤详解
2020/01/10 Python
pytorch 实现删除tensor中的指定行列
2020/01/13 Python
某公司.Net方向面试题
2014/04/24 面试题
民族团结先进个人材料
2014/02/05 职场文书
学校志愿者活动总结
2014/06/27 职场文书
会计主管岗位职责
2015/04/02 职场文书
2015年环境整治工作总结
2015/05/22 职场文书
2015团员个人年度总结
2015/11/24 职场文书
全国劳模先进事迹材料(2016精选版)
2016/02/25 职场文书
2016年小学六一儿童节活动总结
2016/04/06 职场文书
如何用Node.js编写内存效率高的应用程序
2021/04/30 Javascript
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
2021/06/11 Python
mysql查询结果实现多列拼接查询
2022/04/03 MySQL