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 相关文章推荐
Tornado Web服务器多进程启动的2个方法
Aug 04 Python
代码讲解Python对Windows服务进行监控
Feb 11 Python
PyQt5每天必学之进度条效果
Apr 19 Python
Selenium的使用详解
Oct 19 Python
python3 实现对图片进行局部切割的方法
Dec 05 Python
使用Python 统计高频字数的方法
Jan 31 Python
将python文件打包成EXE应用程序的方法
May 22 Python
python障碍式期权定价公式
Jul 19 Python
python实现拼图小游戏
Feb 22 Python
Python库安装速度过慢解决方案
Jul 14 Python
python自动打开浏览器下载zip并提取内容写入excel
Jan 04 Python
详解Flask开发技巧之异常处理
Jun 15 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 Memcache 中实现消息队列
2009/11/24 PHP
php中的比较运算符详解
2013/10/28 PHP
php实现的操作excel类详解
2016/01/15 PHP
mysql_escape_string()函数用法分析
2016/04/25 PHP
JavaScript 模仿vbs中的 DateAdd() 函数的代码
2007/08/13 Javascript
一个JS小玩意 几个属性相加不能超过一个特定值.
2009/09/29 Javascript
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
jquery bind(click)传参让列表中每行绑定一个事件
2014/08/06 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
2015/01/23 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
AngularJS学习笔记(三)数据双向绑定的简单实例
2016/11/08 Javascript
JS中setTimeout和setInterval的最大延时值详解
2017/02/13 Javascript
inner join 内联与left join 左联的实例代码
2017/09/18 Javascript
深入浅析Node.js 事件循环、定时器和process.nextTick()
2018/10/22 Javascript
Antd的table组件表格的序号自增操作
2020/10/27 Javascript
nuxt静态部署打包相对路径操作
2020/11/06 Javascript
Python os模块学习笔记
2015/06/21 Python
Python Sql数据库增删改查操作简单封装
2016/04/18 Python
基于树莓派的语音对话机器人
2019/06/17 Python
python向图片里添加文字
2019/11/26 Python
TensorFlow设置日志级别的几种方式小结
2020/02/04 Python
Python tkinter和exe打包的方法
2020/02/05 Python
使用python库xlsxwriter库来输出各种xlsx文件的示例
2020/09/01 Python
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
Dodax奥地利:音乐、电影、书籍、玩具、电子产品等
2019/08/31 全球购物
葡萄牙航空官方网站:TAP Air Portugal
2019/10/31 全球购物
温泉秘密:Onsen Secret
2020/07/06 全球购物
教师专业自荐信
2014/05/31 职场文书
领导干部整治奢华浪费之风思想汇报
2014/10/07 职场文书
离婚案件答辩状
2015/05/22 职场文书
酒桌上的祝酒词
2015/08/12 职场文书
详解Python小数据池和代码块缓存机制
2021/04/07 Python
Python pandas读取CSV文件的注意事项(适合新手)
2021/06/20 Python
Nginx location 和 proxy_pass路径配置问题小结
2021/09/04 Servers