超简单使用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之总结参数的传递
Oct 10 Python
python实现的文件夹清理程序分享
Nov 22 Python
Python PyQt4实现QQ抽屉效果
Apr 20 Python
Django代码性能优化与Pycharm Profile使用详解
Aug 26 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
Feb 05 Python
python下载卫星云图合成gif的方法示例
Feb 18 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
Apr 13 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
Apr 20 Python
python实现读取类别频数数据画水平条形图案例
Apr 24 Python
Python中的整除和取模实例
Jun 03 Python
Python中的流程控制详解
Feb 18 Python
Python按顺序遍历并读取文件夹中文件
Apr 29 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
点评山进PR-D3L三波段收音机
2021/03/02 无线电
Zend Studio (eclipse)使用速度优化方法
2011/03/23 PHP
php中把美国时间转为北京时间的自定义函数分享
2014/07/28 PHP
php实现将base64格式图片保存在指定目录的方法
2016/10/13 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
2019/05/01 PHP
用JS实现的一个include函数
2007/07/21 Javascript
Javascript 学习笔记 错误处理
2009/07/30 Javascript
JavaScript 变量基础知识
2009/11/07 Javascript
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
jQuery插件datepicker 日期连续选择
2015/06/12 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
2015/09/24 Javascript
HTML页面,测试JS对C函数的调用简单实例
2016/08/09 Javascript
jquery实现左右滑动式轮播图
2017/03/02 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
详解vue 在移动端体验上的优化解决方案
2019/05/20 Javascript
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
2019/10/12 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
python+Splinter实现12306抢票功能
2018/09/25 Python
python数据处理 根据颜色对图片进行分类的方法
2018/12/08 Python
python框架django项目部署相关知识详解
2019/11/04 Python
Python 使用office365邮箱的示例
2020/10/29 Python
CSS3动画animation实现云彩向左滚动
2014/05/09 HTML / CSS
墨尔本最受欢迎的复古风格品牌:Princess Highway
2018/12/21 全球购物
亚洲颇具影响力的男性在线购物零售商:His
2019/11/24 全球购物
do you have any Best Practice for testing
2016/06/04 面试题
简历中自我评价范文3则
2013/12/14 职场文书
党员先锋岗事迹材料
2014/05/08 职场文书
公司法人授权委托书范本
2014/09/12 职场文书
2015年小学财务工作总结
2015/07/20 职场文书
sql server删除前1000行数据的方法实例
2021/08/30 SQL Server
动画《朋友游戏》公开佐藤友生绘制的开播纪念绘
2022/04/06 日漫