超简单使用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动态网页批量爬取
Feb 14 Python
python常用函数详解
Sep 13 Python
Python3调用微信企业号API发送文本消息代码示例
Nov 10 Python
Python操作mongodb数据库的方法详解
Dec 08 Python
django2笔记之路由path语法的实现
Jul 17 Python
Python queue队列原理与应用案例分析
Sep 27 Python
Pytorch Tensor 输出为txt和mat格式方式
Jan 03 Python
Python小白学习爬虫常用请求报头
Jun 03 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
Jun 04 Python
python字典通过值反查键的实现(简洁写法)
Sep 30 Python
python调试工具Birdseye的使用教程
May 25 Python
用python修改excel表某一列内容的操作方法
Jun 11 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 json_decode函数详细解析
2014/02/17 PHP
PHP面试题之文件目录操作
2015/10/15 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
Jquery 模板数据绑定插件的使用方法详解
2013/07/08 Javascript
js中如何把字符串转化为对象、数组示例代码
2013/07/17 Javascript
解析JSON对象与字符串之间的相互转换
2013/12/18 Javascript
jQuery使用toggleClass方法动态添加删除Class样式的方法
2015/03/26 Javascript
jQuery解析json数据实例分析
2015/11/24 Javascript
jquery实现简单的全选和反选功能
2016/01/02 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
微信小程序左右滑动的实现代码
2017/12/15 Javascript
JS中循环遍历数组的四种方式总结
2021/01/23 Javascript
[33:39]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第二局
2016/02/27 DOTA
[01:11:11]Alliance vs RNG 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
Using Django with GAE Python 后台抓取多个网站的页面全文
2016/02/17 Python
python利用matplotlib库绘制饼图的方法示例
2016/12/18 Python
Python Flask基础教程示例代码
2018/02/07 Python
Python实现针对给定单链表删除指定节点的方法
2018/04/12 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
2018/07/12 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
2018/12/27 Python
Python饼状图的绘制实例
2019/01/15 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
python中@property的作用和getter setter的解释
2020/12/22 Python
Python 可视化神器Plotly详解
2020/12/26 Python
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
html5 拖拽及用 js 实现拖拽功能的示例代码
2020/10/23 HTML / CSS
美国椅子和沙发制造商:La-Z-Boy
2020/10/25 全球购物
什么是数组名
2012/05/10 面试题
行政工作个人的自我评价
2014/02/13 职场文书
21岁生日感言
2014/02/27 职场文书
安全先进班组材料
2014/12/26 职场文书
企业投资意向书
2015/05/09 职场文书
2015年为民办实事工作总结
2015/05/26 职场文书
残联2016年全国助残日活动总结
2016/04/01 职场文书
基于Redis实现分布式锁的方法(lua脚本版)
2021/05/12 Redis