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 相关文章推荐
python自动化测试之连接几组测试包实例
Sep 28 Python
深入理解Javascript中的this关键字
Mar 27 Python
Python中操作符重载用法分析
Apr 29 Python
Python获取二维矩阵每列最大值的方法
Apr 03 Python
TensorFlow查看输入节点和输出节点名称方式
Jan 04 Python
python爬虫库scrapy简单使用实例详解
Feb 10 Python
python 实现朴素贝叶斯算法的示例
Sep 30 Python
用python实现一个简单计算器(完整DEMO)
Oct 14 Python
Python 列表推导式需要注意的地方
Oct 23 Python
python实现发送邮件
Mar 02 Python
深入解析NumPy中的Broadcasting广播机制
May 30 Python
如何Python使用re模块实现okenizer
Apr 30 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
新浪SAE云平台下使用codeigniter的数据库配置
2014/06/12 PHP
php jsonp单引号转义
2014/11/23 PHP
windows中为php安装mongodb与memcache
2015/01/06 PHP
php使用递归函数实现数字累加的方法
2015/03/16 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
escape、encodeURI 和 encodeURIComponent 的区别
2009/03/02 Javascript
(jQuery,mootools,dojo)使用适合自己的编程别名命名
2010/09/14 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
Angularjs 基础入门
2014/12/26 Javascript
jquery中attr和prop的区别分析
2015/03/16 Javascript
Javascript基础知识盲点总结之函数
2016/05/15 Javascript
Bootstrap3多级下拉菜单
2017/02/24 Javascript
webpack开发跨域问题解决办法
2017/08/03 Javascript
Vue-router 切换组件页面时进入进出动画方法
2018/09/01 Javascript
vue自定义底部导航栏Tabbar的实现代码
2018/09/03 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
scrapy爬虫实例分享
2017/12/28 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
50行Python代码获取高考志愿信息的实现方法
2019/07/23 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
2019/07/25 Python
Python利用matplotlib绘制约数个数统计图示例
2019/11/26 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
用60行代码实现Python自动抢微信红包
2021/02/04 Python
CSS3 box-shadow属性实例详解
2020/06/19 HTML / CSS
印度尼西亚最好的小工具在线商店:Erafone.com
2019/03/26 全球购物
什么是封装
2013/03/26 面试题
房屋租赁协议书范本
2014/04/10 职场文书
社区创先争优承诺书
2014/08/30 职场文书
学生吸烟检讨书
2014/09/14 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
中学图书馆工作总结
2015/08/11 职场文书
小学班级标语口号大全
2015/12/26 职场文书
合作意向书怎么写
2019/06/24 职场文书
CSS 鼠标点击拖拽效果的实现代码
2022/12/24 HTML / CSS
关于MySQL中explain工具的使用
2023/05/08 MySQL