Python实现AI换脸功能


Posted in Python onApril 10, 2020

需要用到的接口:

获取人脸信息的接口:https://api-cn.faceplusplus.com/facepp/v3/detect

实现换脸的接口 :https://api-cn.faceplusplus.com/imagepp/v1/mergeface

代码分为三步

代码:

import requests
import json
import simplejson
import base64

#第一步:获取人脸关键点
def find_face(imgpath):
 """
 :param imgpath: 图片的地址
 :return: 一个字典类型的人脸关键点 如:{'top': 156, 'left': 108, 'width': 184, 'height': 184}
 """
 http_url = 'https://api-cn.faceplusplus.com/facepp/v3/detect' #获取人脸信息的接口
 data = {
 "api_key":"x2NyKaa6vYuArYwat4x0-NpIbM9CrwGU",#访问url所需要的参数
 "api_secret":"OuHx-Xaey1QrORwdG7QetGG5JhOIC8g7",#访问url所需要的参数
 "image_url":imgpath, #图片地址
 "return_landmark":1
 }


 files = {'image_file':open(imgpath,'rb')} #定义一个字典存放图片的地址
 response = requests.post(http_url,data=data,files=files)
 res_con1 = response.content.decode('utf-8')
 res_json = simplejson.loads(res_con1)
 faces = res_json['faces']
 list = faces[0]
 rectangle = list['face_rectangle']
 return rectangle

#第二步:实现换脸
def merge_face(image_url1,image_url2,image_url,number):
 """
 :param image_url1: 被换脸的图片路径
 :param image_url2: 换脸的图片路径
 :param image_url: 换脸后生成图片所保存的路径
 :param number: 换脸的相似度
 """
 #首先获取两张图片的人脸关键点
 face1 = find_face(image_url1)
 face2 = find_face(image_url2)
 #将人脸转换为字符串的格式
 rectangle1 = str(str(face1['top']) + "," + str(face1['left']) + "," + str(face1['width']) + "," + str(face1['height']))
 rectangle2 = str(str(face2['top']) + "," + str(face2['left']) + "," + str(face2['width']) + "," + str(face2['height']))
 #读取两张图片
 f1 = open(image_url1,'rb')
 f1_64 = base64.b64encode(f1.read())
 f1.close()
 f2 = open(image_url2, 'rb')
 f2_64 = base64.b64encode(f2.read())
 f2.close()

 url_add = 'https://api-cn.faceplusplus.com/imagepp/v1/mergeface' #实现换脸的接口
 data={
 "api_key": "x2NyKaa6vYuArYwat4x0-NpIbM9CrwGU",
 "api_secret": "OuHx-Xaey1QrORwdG7QetGG5JhOIC8g7",
 "template_base64":f1_64,
 "template_rectangle":rectangle1,
 "merge_base64":f2_64,
 "merge_rectangle":rectangle2,
 "merge_rate":number
 }
 response1 = requests.post(url_add,data=data)
 res_con1 = response1.content.decode('utf-8')
 res_dict = json.JSONDecoder().decode(res_con1)
 result = res_dict['result']
 imgdata = base64.b64decode(result)
 file=open(image_url,'wb')
 file.write(imgdata)
 file.close()

if __name__ == '__main__':
 image1 = r"meizi1.jpg"
 image2 = r"meizi.jpg"
 image3 = r"face1.jpg"
 merge_face(image1,image2,image3,100)

效果:

换脸前

Python实现AI换脸功能

要换的脸:

Python实现AI换脸功能

换脸后:

Python实现AI换脸功能

总结

到此这篇关于Python实现AI换脸的代码的文章就介绍到这了,更多相关Python实现AI换脸内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
仅用50行代码实现一个Python编写的计算器的教程
Apr 17 Python
浅谈Python数据类型判断及列表脚本操作
Nov 04 Python
Python中的上下文管理器和with语句的使用
Apr 17 Python
python使用PIL给图片添加文字生成海报示例
Aug 17 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
python进阶之自定义可迭代的类
Aug 20 Python
PyCharm下载和安装详细步骤
Dec 17 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
Dec 19 Python
iPython pylab模式启动方式
Apr 24 Python
Django分组聚合查询实例分享
Apr 29 Python
Python爬虫获取豆瓣电影并写入excel
Jul 31 Python
Python OpenCV实现传统图片格式与base64转换
Jun 13 Python
python使用OpenCV模块实现图像的融合示例代码
Apr 10 #Python
Jupyter notebook运行Spark+Scala教程
Apr 10 #Python
Python HTMLTestRunner可视化报告实现过程解析
Apr 10 #Python
jupyter notebook清除输出方式
Apr 10 #Python
解决Python在导入文件时的FileNotFoundError问题
Apr 10 #Python
jupyter notebook参数化运行python方式
Apr 10 #Python
Python库skimage绘制二值图像代码实例
Apr 10 #Python
You might like
盘点被央视点名过的日本动画电影 一部比一部强
2020/03/08 日漫
长波有什么东西
2021/03/01 无线电
批量修改RAR文件注释的php代码
2010/11/20 PHP
PHP使用socket发送HTTP请求的方法
2016/02/14 PHP
PHP开发中csrf攻击的简单演示和防范
2017/05/07 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
通过JS 获取Mouse Position(鼠标坐标)的代码
2009/09/21 Javascript
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
JavaScript计算字符串中每个字符出现次数的小例子
2013/07/02 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
JQuery中DOM事件绑定用法详解
2015/06/13 Javascript
基于jquery实现动态竖向柱状条特效
2016/02/12 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
js实现简易聊天对话框
2017/08/17 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
利用ES6实现单例模式及其应用详解
2017/12/09 Javascript
详解React 的几种条件渲染以及选择
2018/10/23 Javascript
Vue2.x Todo之自定义指令实现自动聚焦的方法
2019/01/08 Javascript
vue实现日历表格(element-ui)
2020/09/24 Javascript
python代码实现ID3决策树算法
2017/12/20 Python
python 重命名轴索引的方法
2018/11/10 Python
pandas 数据归一化以及行删除例程的方法
2018/11/10 Python
pycharm运行scrapy过程图解
2019/11/22 Python
HTML5 Web Database 数据库的SQL语句的使用方法
2012/12/09 HTML / CSS
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
Farah官方网站:男士服装及配件
2019/11/01 全球购物
物业经理求职自我评价
2013/09/22 职场文书
大学生自我鉴定范文模板
2014/01/21 职场文书
素质拓展感言
2014/01/29 职场文书
经销商订货会主持词
2014/03/27 职场文书
公司承诺函范文
2015/01/21 职场文书
师德师风个人总结
2015/02/06 职场文书
总经理聘用协议书
2015/09/21 职场文书
《西游记》读后感(3篇)
2019/09/20 职场文书