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实现寻找最长回文子序列的方法
Jun 02 Python
python3解析库BeautifulSoup4的安装配置与基本用法
Jun 26 Python
利用python实现在微信群刷屏的方法
Feb 21 Python
Python学习笔记之视频人脸检测识别实例教程
Mar 06 Python
使用python爬取微博数据打造一颗“心”
Jun 28 Python
Python 获取ftp服务器文件时间的方法
Jul 02 Python
Kali Linux安装ipython2 和 ipython3的方法
Jul 11 Python
Python 3.8正式发布重要新功能一览
Oct 17 Python
Python实现aes加密解密多种方法解析
May 15 Python
Django中ORM的基本使用教程
Dec 22 Python
Python编程根据字典列表相同键的值进行合并
Oct 05 Python
python创建字典及相关管理操作
Apr 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
PHP中限制IP段访问、禁止IP提交表单的代码
2011/04/23 PHP
PHP编程之设置apache虚拟目录
2016/07/08 PHP
PHP获取二叉树镜像的方法
2018/01/17 PHP
静态页面下用javascript操作ACCESS数据库(读增改删)的代码
2007/05/14 Javascript
javascript RadioButtonList获取选中值
2009/04/09 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
javascript检测两个数组是否相似
2015/05/19 Javascript
Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
2016/02/02 Javascript
jQuery图片轮播插件——前端开发必看
2016/05/31 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
EasyUI为Numberbox添加blur事件的方法
2017/03/05 Javascript
JS+DIV实现的卷帘效果示例
2017/03/22 Javascript
关于定制FileField中的上传文件名称问题
2017/08/22 Javascript
vue+springboot实现项目的CORS跨域请求
2018/09/05 Javascript
vue中v-for通过动态绑定class实现触发效果
2018/12/06 Javascript
javascript实现简易聊天室
2019/07/12 Javascript
JavaScript手写数组的常用函数总结
2020/11/22 Javascript
使用python实现strcmp函数功能示例
2014/03/25 Python
Python中__init__.py文件的作用详解
2016/09/18 Python
Python端口扫描简单程序
2016/11/10 Python
python 实现在txt指定行追加文本的方法
2018/04/29 Python
Python requests发送post请求的一些疑点
2018/05/20 Python
python web框架中实现原生分页
2019/09/08 Python
dpn网络的pytorch实现方式
2020/01/14 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
HTML5中判断横屏竖屏的方法(移动端)
2016/08/04 HTML / CSS
英国在线潜水商店:Simply Scuba
2019/03/25 全球购物
Saks Fifth Avenue澳洲/亚太地区:萨克斯第五大道精品百货店
2019/06/09 全球购物
C#面试题
2016/05/06 面试题
房屋买卖协议书
2014/04/10 职场文书
办理护照工作证明
2014/10/10 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
MySQL的join buffer原理
2021/04/29 MySQL
Python虚拟环境virtualenv是如何使用的
2021/06/20 Python
win10+RTX3050ti+TensorFlow+cudn+cudnn配置深度学习环境的方法
2022/06/25 Servers
HTML5中的DOCUMENT.VISIBILITYSTATE属性详解
2023/05/07 HTML / CSS