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彩色化Linux的命令行终端界面的代码实例分享
Jul 02 Python
Python反射用法实例简析
Dec 22 Python
python邮件发送smtplib使用详解
Jun 16 Python
使用matplotlib画散点图的方法
May 25 Python
python实现大转盘抽奖效果
Jan 22 Python
python异步实现定时任务和周期任务的方法
Jun 29 Python
python 读取更新中的log 或其它文本方式
Dec 24 Python
完美解决pycharm导入自己写的py文件爆红问题
Feb 12 Python
Python Selenium截图功能实现代码
Apr 26 Python
Pandas中DataFrame交换列顺序的方法实现
Dec 14 Python
python+selenium爬取微博热搜存入Mysql的实现方法
Jan 27 Python
python openpyxl模块的使用详解
Feb 25 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
phpmyadmin MySQL 加密配置方法
2009/07/05 PHP
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
php set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
php日期转时间戳,指定日期转换成时间戳
2012/07/17 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
PHP序列化的四种实现方法与横向对比
2018/11/29 PHP
javascript的事件描述
2006/09/08 Javascript
jQuery中removeClass()方法用法实例
2015/01/05 Javascript
详解AngularJS中的filter过滤器用法
2016/01/04 Javascript
Js实现简单的小球运动特效
2016/02/18 Javascript
Bootstrap三种表单布局的使用方法
2016/06/21 Javascript
JavaScript中的对象继承关系
2016/08/01 Javascript
bootstrap导航、选项卡实现代码
2016/12/28 Javascript
Bootstrap 手风琴菜单的实现代码
2017/01/20 Javascript
Angular.js基础学习之初始化
2017/03/10 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
2018/01/25 jQuery
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
详解小程序开发经验:多页面数据同步
2019/05/18 Javascript
微信小程序把百度地图坐标转换成腾讯地图坐标过程详解
2019/07/10 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
2019/08/08 jQuery
vue-cli3项目打包后自动化部署到服务器的方法
2020/09/16 Javascript
Python中的迭代器漫谈
2015/02/03 Python
深入理解Python中装饰器的用法
2016/06/28 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
2019/08/08 Python
python爬虫爬取监控教务系统的思路详解
2020/01/08 Python
Python标准库itertools的使用方法
2020/01/17 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
2020/04/30 Python
pyCharm 实现关闭代码检查
2020/06/09 Python
python openCV自制绘画板
2020/10/27 Python
AmazeUI底部导航栏与分享按钮的示例代码
2020/08/18 HTML / CSS
初中生期末考试的自我评价
2013/12/17 职场文书
学校安全工作制度
2014/01/19 职场文书
公司会计主管岗位责任制
2014/03/01 职场文书
幼师求职自荐信
2014/05/31 职场文书
nginx location中多个if里面proxy_pass的方法
2021/03/31 Servers
你真的会用Mysql的explain吗
2022/03/31 MySQL