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中类变量与成员变量的使用注意点总结
Apr 29 Python
tensorflow创建变量以及根据名称查找变量
Mar 10 Python
Python实现的网页截图功能【PyQt4与selenium组件】
Jul 12 Python
在Python中使用gRPC的方法示例
Aug 08 Python
Python list列表中删除多个重复元素操作示例
Feb 27 Python
Python合并同一个文件夹下所有PDF文件的方法
Mar 11 Python
python爬取基于m3u8协议的ts文件并合并
Apr 26 Python
python 画二维、三维点之间的线段实现方法
Jul 07 Python
Python venv虚拟环境配置过程解析
Jul 08 Python
Python3爬虫里关于Splash负载均衡配置详解
Jul 10 Python
Python GUI库Tkiner使用方法代码示例
Nov 27 Python
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
Aug 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
全国FM电台频率大全 - 3 河北省
2020/03/11 无线电
php文章内容分页并生成相应的htm静态页面代码
2010/06/07 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
2011/12/16 PHP
php实现把数组按指定的个数分隔
2014/02/17 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
小议Function.apply() 之一------(函数的劫持与对象的复制)
2006/11/30 Javascript
Add a Formatted Table to a Word Document
2007/06/15 Javascript
javascript提取URL的搜索字符串中的参数(自定义函数实现)
2013/01/22 Javascript
js动态创建标签示例代码
2014/06/09 Javascript
jQuery Masonry瀑布流插件使用详解
2014/11/17 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
2015/09/09 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
2017/05/13 jQuery
解决VUEX刷新的时候出现数据消失
2017/07/03 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
2018/04/17 Javascript
灵活使用console让js调试更简单的方法步骤
2019/04/23 Javascript
JavaScript ES6 Class类实现原理详解
2020/05/08 Javascript
JavaScript使用prototype属性实现继承操作示例
2020/05/22 Javascript
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
详细讲解用Python发送SMTP邮件的教程
2015/04/29 Python
python编程开发之日期操作实例分析
2015/11/13 Python
pyspark 读取csv文件创建DataFrame的两种方法
2018/06/07 Python
python利用tkinter实现屏保
2019/07/30 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
2019/08/22 Python
python统计mysql数据量变化并调用接口告警的示例代码
2020/09/21 Python
Python 实现一个简单的web服务器
2021/01/03 Python
编写strcpy函数
2014/06/24 面试题
瀑布模型都有哪些优缺点
2014/06/23 面试题
广告创意求职信
2014/03/17 职场文书
员工趣味活动方案
2014/08/27 职场文书
初中国旗下的演讲稿
2014/08/28 职场文书
专业见习报告范文
2014/11/03 职场文书
整改落实自查报告
2014/11/05 职场文书
村党组织公开承诺书
2015/04/30 职场文书
Elasticsearch 聚合查询和排序
2022/04/19 Python