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中enumerate函数代码解析
Oct 31 Python
Python编程django实现同一个ip十分钟内只能注册一次
Nov 03 Python
PyCharm代码整体缩进,反向缩进的方法
Jun 25 Python
Python对数据进行插值和下采样的方法
Jul 03 Python
使用TensorFlow实现SVM
Sep 06 Python
详解Python中正则匹配TAB及空格的小技巧
Jul 26 Python
浅谈Tensorflow 动态双向RNN的输出问题
Jan 20 Python
python字符串替换re.sub()实例解析
Feb 09 Python
Python无头爬虫下载文件的实现
Apr 02 Python
Python virtualenv虚拟环境实现过程解析
Apr 18 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
Jun 09 Python
Python 如何测试文件是否存在
Jul 31 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
网络资源
2006/10/09 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
PHP中header函数的用法及其注意事项详解
2016/06/13 PHP
thinkphp利用模型通用数据编辑添加和删除的实例代码
2016/11/20 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
thinkphp中U方法按路由规则生成url的方法
2018/03/12 PHP
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
jquery复选框CHECKBOX全选、反选
2008/08/30 Javascript
jQuery的ready方法详解
2014/11/27 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
js实现表格筛选功能
2017/01/18 Javascript
JavaScript实现类似淘宝的购物车效果
2017/03/16 Javascript
Vue Spa切换页面时更改标题的实例代码
2017/07/15 Javascript
Angular @HostBinding()和@HostListener()用法
2018/03/05 Javascript
爬虫利器Puppeteer实战
2019/01/09 Javascript
vue中的过滤器实例代码详解
2019/06/06 Javascript
JavaScript enum枚举类型定义及使用方法
2020/05/15 Javascript
动态实现element ui的el-table某列数据不同样式的示例
2021/01/22 Javascript
Django中传递参数到URLconf的视图函数中的方法
2015/07/18 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
2015/12/14 Python
python正则分析nginx的访问日志
2017/01/17 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
2017/01/20 Python
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
2017/12/20 Python
python判断列表的连续数字范围并分块的方法
2018/11/16 Python
Python3.5 处理文本txt,删除不需要的行方法
2018/12/10 Python
python ctypes库2_指定参数类型和返回类型详解
2019/11/19 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
2020/09/05 Python
Python里面如何拷贝一个对象
2014/02/17 面试题
材料工程专业毕业生求职信
2014/03/04 职场文书
幼儿园评语大全
2014/04/17 职场文书
双拥工作宣传标语
2014/06/26 职场文书
家属慰问信
2015/02/14 职场文书
同学聚会感言一句话
2015/07/30 职场文书
《彼得与狼》教学反思
2016/02/20 职场文书