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处理cookie详解
Feb 07 Python
跟老齐学Python之有容乃大的list(2)
Sep 15 Python
Python实现获取某天是某个月中的第几周
Feb 11 Python
深入理解python对json的操作总结
Jan 05 Python
利用Python进行异常值分析实例代码
Dec 07 Python
用PyInstaller把Python代码打包成单个独立的exe可执行文件
May 26 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
Jul 19 Python
Python实现基于socket的udp传输与接收功能详解
Nov 15 Python
django 实现celery动态设置周期任务执行时间
Nov 19 Python
Python系统公网私网流量监控实现流程
Nov 23 Python
Python 实现RSA加解密文本文件
Dec 30 Python
提取视频中的音频 Python只需要三行代码!
May 10 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用户登录之cookie信息安全分析
2016/05/13 PHP
PHP实现根据数组的值进行分组的方法
2017/04/20 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
javascript实现动态CSS换肤技术的脚本
2007/06/29 Javascript
基于jquery的仿百度的鼠标移入图片抖动效果
2010/09/17 Javascript
javascript 得到文件后缀名的思路及实现
2020/05/09 Javascript
JavaScript自定义事件介绍
2013/08/29 Javascript
jQuery中ajax的使用与缓存问题的解决方法
2013/12/19 Javascript
jQuery中hasClass()方法用法实例
2015/01/06 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
javascript创建cookie、读取cookie
2016/03/31 Javascript
js和jQuery设置Opacity半透明 兼容IE6
2016/05/24 Javascript
jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题
2016/08/15 Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
2018/01/18 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
JS函数内部属性之arguments和this实例解析
2018/10/07 Javascript
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
[03:56]DOTA2完美大师赛趣味视频之小鸽子和Mineski打台球
2017/11/24 DOTA
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
2015/05/05 Python
Python 函数基础知识汇总
2018/03/09 Python
python实现简单图片物体标注工具
2019/03/18 Python
Pycharm新手教程(只需要看这篇就够了)
2019/06/18 Python
基于sklearn实现Bagging算法(python)
2019/07/11 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
python图片二值化提高识别率代码实例
2019/08/24 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
2019/08/31 Python
Python数据可视化:箱线图多种库画法
2019/11/06 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
2020/05/09 Python
详解Python中list[::-1]的几种用法
2020/11/16 Python
解决pytorch 数据类型报错的问题
2021/03/03 Python
联谊活动总结
2014/08/28 职场文书
授权收款委托书范本
2014/10/10 职场文书
夫妻分居协议书范本
2014/11/28 职场文书
《我和小伙伴》教学反思
2016/02/20 职场文书
Golang 实现WebSockets
2022/04/24 Golang