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 13 Python
用Python实现协同过滤的教程
Apr 08 Python
python使用paramiko实现远程拷贝文件的方法
Apr 18 Python
Python callable()函数用法实例分析
Mar 17 Python
pytorch构建网络模型的4种方法
Apr 13 Python
Django 反向生成url实例详解
Jul 30 Python
python 字典有序并写入json文件过程解析
Sep 30 Python
Python for循环通过序列索引迭代过程解析
Feb 07 Python
Python JSON常用编解码方法代码实例
Sep 05 Python
解决python 执行shell命令无法获取返回值的问题
Dec 05 Python
python中的unittest框架实例详解
Feb 05 Python
手把手教你实现PyTorch的MNIST数据集
Jun 28 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电台频率大全 - 26 西藏自治区
2020/03/11 无线电
用PHP实现将GB编码转换为UTF8
2006/11/25 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
PHP-FPM 的管理和配置详解
2019/02/17 PHP
php中钩子(hook)的原理与简单应用demo示例
2019/09/03 PHP
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
{}与function(){}选用空对象{}来存放keyValue
2012/05/23 Javascript
JS模板实现方法
2013/04/03 Javascript
js检测网络是否具体连接功能的代码
2014/05/23 Javascript
jQuery中toggleClass()方法用法实例
2015/01/05 Javascript
js仿微博实现统计字符和本地存储功能
2015/12/22 Javascript
javascript函数自动执行常用方法汇总
2016/03/28 Javascript
js获取所有checkbox的值的简单实例
2016/05/30 Javascript
微信小程序 页面跳转传值实现代码
2017/07/27 Javascript
使用DataTable插件实现异步加载数据
2017/11/19 Javascript
简单了解vue中的v-if和v-show的区别
2019/10/08 Javascript
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
python中将字典转换成其json字符串
2014/07/16 Python
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
Python的组合模式与责任链模式编程示例
2016/02/02 Python
Django数据库类库MySQLdb使用详解
2019/04/28 Python
Python中BeautifuSoup库的用法使用详解
2019/11/15 Python
Python中filter与lambda的结合使用详解
2019/12/24 Python
Python函数的迭代器与生成器的示例代码
2020/06/18 Python
python单元测试框架pytest的使用示例
2020/10/07 Python
python 实现倒计时功能(gui界面)
2020/11/11 Python
使用纯 CSS 创作一个脉动 loader效果的源码
2018/09/28 HTML / CSS
Grid 宫格常用布局的实现
2020/01/10 HTML / CSS
借助HTML5 Canvas来绘制三角形和矩形等多边形的方法
2016/03/14 HTML / CSS
英国最全面的橄榄球联盟门票网站:Live Rugby Tickets
2018/10/06 全球购物
缅怀革命先烈演讲稿
2014/05/14 职场文书
我的中国梦演讲稿小学篇
2014/08/19 职场文书
计算机实训报告总结
2014/11/05 职场文书
前台岗位职责范本
2015/04/16 职场文书
ThinkPHP5和ThinkPHP6的区别
2021/03/31 PHP
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
2022/06/10 Servers