Python实现AI换脸功能
作者:_wish_ 发布时间:2021-02-11 19:39:08
标签:Python,AI,换脸
需要用到的接口:
获取人脸信息的接口: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)
效果:
换脸前
要换的脸:
换脸后:
来源:https://blog.csdn.net/cl18154399536/article/details/105387239


猜你喜欢
- 1、Python的内置高阶函数1.1 map()map()会根据提供的函数对指定序列做映射语法格式:map(function, iterab
- close()方法方法关闭打开的文件。关闭的文件无法读取或写入更多东西。文件已被关闭之后任何操作会引发ValueError。但是
- 现在浏览器种类也越来越多,诸如 IE、Firefox、Chrome、Safari等等,因此现在要实现一个js复制内容到剪贴板的小功能就不是一
- 前言CSDN博客好久没有换过头像了,想换个新头像,在相册里面翻来翻去,然后就找到以前养的小宠物的一些照片,有一张特别有意思惊恐到站起来的金丝
- 如何用python做后端写网页-flask框架 什么是Flask安装flask模块Hello World更深一步:数据绑定后端传入数据从前端
- 1.什么是Json?JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它是JavaScript的
- 我们在切换选项卡的时候,如果使用的是ajax技术,会碰到如下情况:点击tab1选项,服务器发出一个Ajax请求获取该选项tab1的内容数据。
- 字体的处理在网页设计中无论怎么强调也不为过, 毕竟网页使用来传递信息的, 而最经典最直接的信息传递方式就是文字,&nbs
- 前言随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了windows下YOLO的环境搭建流程。一
- 1. JWT 介绍jwt( JSON Web Tokens ),是一种开发的行业标准 RFC 7519 ,用于安全的表示双方之间的声明。目前
- 导语害!现在是10月份了,国庆过完也降温了——还有几个月就过年了,哦吼~这一年就快过去了,不知道小编带给大家这么多的表白代码都用了没?用了没
- 1、类的定义创建一个rectangle.py文件,并在该文件中定义一个Rectangle类。在该类中,__init__表示构造方法。其中,s
- 初识OpenCVOpenCV是一个开源的,跨平台的计算机视觉库,它采用优化的C/C++代码编写,能够充分利用多核处理器的优势,提供了Pyth
- 用Python实现点对点的聊天,2个程序,一个是client.py,一个是server.py,通过本机地址127.0.0.1连接进行通信,利
- 本文实例讲述了Python实现字符串与数组相互转换功能。分享给大家供大家参考,具体如下:字符串转数组str = '1,2,3'
- Base64是一种用64个字符来表示任意二进制数据的方法。用记事本打开exe、jpg、pdf这些文件时,我们都会看到一大堆乱码,因为二进制文
- property() 函数的作用是在新式类中返回属性值。Python中有一个property的语法,它类似于C#的get set语法,其功能
- 1、设置web.config文件。以下为引用的内容:<system.web> ...... <globalization
- 百度了一下。。有说将cmd字符编码用chcp命令改为65001(utf8字符编码),可这样之后根本无法输入中文,查询出的中问结果依旧乱码 。
- 长话短说,今天介绍实现此功能的一个方法,需要了解的朋友可以参考下:一、JS 重载页面,本地刷新,返回上一页 代码如下:<a href=