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 序列化 pickle/cPickle模块使用介绍
Nov 30 Python
使用Python中的cookielib模拟登录网站
Apr 09 Python
python动态参数用法实例分析
May 25 Python
详解Python中的文件操作
Aug 28 Python
一个基于flask的web应用诞生(1)
Apr 11 Python
django 按时间范围查询数据库实例代码
Feb 11 Python
python合并已经存在的sheet数据到新sheet的方法
Dec 11 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
May 27 Python
python安装numpy和pandas的方法步骤
May 27 Python
python如何写出表白程序
Jun 01 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
Dec 21 Python
Django给表单添加honeypot验证增加安全性
May 06 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 随机生成10位字符代码
2009/03/26 PHP
eAccelerator的安装与使用详解
2013/06/13 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
实例解析php的数据类型
2018/10/24 PHP
Laravel第三方包报class not found的解决方法
2019/10/13 PHP
Javascript打印网页部分内容的脚本
2008/11/17 Javascript
学习JavaScript鼠标响应事件
2015/12/25 Javascript
详解Backbone.js框架中的模型Model与其集合collection
2016/05/05 Javascript
动态的9*9乘法表效果的实现代码
2016/05/16 Javascript
用 js 的 selection range 操作选择区域内容和图片
2017/04/18 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
2017/10/16 Javascript
vue计算属性和监听器实例解析
2018/05/10 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
2018/09/27 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
Python批量修改文件后缀的方法
2014/01/26 Python
Django的URLconf中使用缺省视图参数的方法
2015/07/18 Python
CentOS安装pillow报错的解决方法
2016/01/27 Python
Python单例模式实例详解
2017/03/01 Python
numpy:找到指定元素的索引示例
2019/11/26 Python
在Sublime Editor中配置Python环境的详细教程
2020/05/03 Python
什么是Python包的循环导入
2020/09/08 Python
HTML5中的新元素介绍
2008/10/17 HTML / CSS
医学护理系毕业生求职信
2013/10/01 职场文书
个人自我鉴定范文
2013/10/04 职场文书
小学生学习感言
2014/03/10 职场文书
中职毕业生自我鉴定范文(3篇)
2014/09/28 职场文书
考试作弊检讨书1000字(5篇)
2014/10/19 职场文书
2015年圣诞节活动总结
2015/03/24 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
闪闪的红星观后感
2015/06/08 职场文书
《日月潭》教学反思
2016/02/20 职场文书
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript
「约定的梦幻岛」作画发布诺曼生日新绘
2022/03/21 日漫
集英社今正式宣布 成立游戏公司“集英社Games”
2022/03/31 其他游戏