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 ValueError: invalid literal for int() with base 10 实用解决方法
Jun 21 Python
Python中表示字符串的三种方法
Sep 06 Python
python中利用队列asyncio.Queue进行通讯详解
Sep 10 Python
Python排序搜索基本算法之归并排序实例分析
Dec 08 Python
python的pandas工具包,保存.csv文件时不要表头的实例
Jun 14 Python
python中嵌套函数的实操步骤
Feb 27 Python
python里dict变成list实例方法
Jun 26 Python
浅谈Python中函数的定义及其调用方法
Jul 19 Python
用Cython加速Python到“起飞”(推荐)
Aug 01 Python
python反扒机制的5种解决方法
Feb 06 Python
Python按顺序遍历并读取文件夹中文件
Apr 29 Python
python playwright之元素定位示例详解
Jul 23 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用户指南-cookies部分
2006/10/09 PHP
在PHP中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
ThinkPHP标签制作教程
2014/07/10 PHP
PHP 实现代码复用的一个方法 traits新特性
2015/02/22 PHP
PHP并发多进程处理利器Gearman使用介绍
2016/05/16 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
php微信开发之关注事件
2018/06/14 PHP
PHP示例演示发送邮件给某个邮箱
2019/04/03 PHP
ToolTips JQEURY插件之简洁小提示框效果
2011/11/19 Javascript
jquery.messager.js插件导致页面抖动的解决方法
2013/07/14 Javascript
javascript判断chrome浏览器的方法
2014/03/26 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
2015/03/23 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
2017/02/09 Javascript
Angularjs 实现移动端在线测评效果(推荐)
2017/04/05 Javascript
AngularJS 控制器 controller的详解
2017/10/17 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
2018/11/22 Javascript
Element input树型下拉框的实现代码
2018/12/21 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
2019/05/12 Javascript
vue之debounce属性被移除及处理详解
2019/11/13 Javascript
js实现列表向上无限滚动
2020/01/13 Javascript
Vue 列表页带参数进详情页的操作(router-link)
2020/11/13 Javascript
python判断给定的字符串是否是有效日期的方法
2015/05/13 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
2017/04/17 Python
Python使用sqlalchemy模块连接数据库操作示例
2019/03/13 Python
Python将string转换到float的实例方法
2019/07/29 Python
python super的使用方法及实例详解
2019/09/25 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
python线程里哪种模块比较适合
2020/08/02 Python
台湾最大网路书店:博客来
2018/03/18 全球购物
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
美国工业用品采购网站:Zoro.com
2020/10/27 全球购物
列车长先进事迹材料
2014/01/25 职场文书
安全责任协议书
2014/04/21 职场文书
2014年生活老师工作总结
2014/12/23 职场文书
六年级语文教学反思
2016/03/03 职场文书
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android