关于AI(即Artificial Intelligence)如何实现人脸切换,改变五官。背后有其自身的特殊算法,将人脸的信息特征通过机器语言来传达至计算机。通过机器学习(machine learning)让计算机懂得识别人脸对应的分点,然后再在其他人脸上展现出来,达到换脸的目的。
已经开发研究过AI的公司,有提供相应我们所需的api接口业务服务,我们可以借助这些公司提供的API进行人脸转换操作。此类有如:deepfake、face++等(这里以face++作为例子)
face++(点击即可进入)
首先需要进入face++官网,完成注册后,可在账户信息中申请创建得到API key,API secret。
import requests
import base64
import warnings; warnings.simplefilter('ignore')
API_Key = '' # JustForFun的API Key
API_Secret = '' # JustForFun的API Secret
def find_face(imgpath):
url = 'https://api-cn.faceplusplus.com/facepp/v3/detect'
data = {
'api_key': API_Key, 'api_secret': API_Secret, 'image_url': imgpath, 'return_landmark': 1}
files = {
'image_file': open(imgpath, 'rb')}
response = requests.post(url, data=data, files=files)
res_json = response.json() # 转换为json
faces = res_json['faces'][0]['face_rectangle'] # 获取面部大小的四个值,分别为长宽高低
return faces # 返回图片的面部参数
# 定义一个换脸函数,函数中number表示两张脸的相似度为99%
def change_face(image_1, image_2, number=99):
url = "https://api-cn.faceplusplus.com/imagepp/v1/mergeface"
find_p1 = find_face(image_1)
find_p2 = find_face(image_2)
rectangle1 = str(str(find_p1['top']) + ',' + str(find_p1['left']) + ',' + str(find_p1['width']) + ',' + str(find_p1['height']))
rectangle2 = str(str(find_p2['top']) + ',' + str(find_p2['left']) + ',' + str(find_p2['width']) + ',' + str(find_p2['height']))
page1 = open(image_1, 'rb')
page1_64 = base64.b64encode(page1.read())
page1.close()
page2 = open(image_2, 'rb')
page2_64 = base64.b64encode(page2.read())
page2.close()
data = {
'api_key': API_Key, 'api_secret': API_Secret, 'template_base64': page1_64,
'template_rectangle': rectangle1, 'merge_base64': page2_64, 'merge_rectangele': rectangle2,
'merge_rate': number}
response = requests.post(url, data=data).json()
results = response['result']
image = base64.b64decode(results)
with open('所得到的图片.jpg', 'wb') as file: # 将信息写入到图片
file.write(image)
print("转换完成")
最后将需要换脸的图片导入,运行
if __name__ == '__main__':
change_face('D:地址\\所交换的图片1.jpg',
'D:地址\\所交换的图片2.jpg')
import requests
import base64
import warnings; warnings.simplefilter('ignore')
API_Key = '' # JustForFun的API Key
API_Secret = '' # JustForFun的API Secret
def find_face(imgpath):
url = 'https://api-cn.faceplusplus.com/facepp/v3/detect'
data = {
'api_key': API_Key, 'api_secret': API_Secret, 'image_url': imgpath, 'return_landmark': 1}
files = {
'image_file': open(imgpath, 'rb')}
response = requests.post(url, data=data, files=files)
res_json = response.json() # 转换为json
faces = res_json['faces'][0]['face_rectangle'] # 获取面部大小的四个值,分别为长宽高低
return faces # 返回图片的面部参数
def change_face(image_1, image_2, number=99):
url = "https://api-cn.faceplusplus.com/imagepp/v1/mergeface" #
find_p1 = find_face(image_1)
find_p2 = find_face(image_2)
rectangle1 = str(str(find_p1['top']) + ',' + str(find_p1['left']) + ',' + str(find_p1['width']) + ',' + str(find_p1['height']))
rectangle2 = str(str(find_p2['top']) + ',' + str(find_p2['left']) + ',' + str(find_p2['width']) + ',' + str(find_p2['height']))
page1 = open(image_1, 'rb')
page1_64 = base64.b64encode(page1.read())
page1.close()
page2 = open(image_2, 'rb')
page2_64 = base64.b64encode(page2.read())
page2.close()
data = {
'api_key': API_Key, 'api_secret': API_Secret, 'template_base64': page1_64,
'template_rectangle': rectangle1, 'merge_base64': page2_64, 'merge_rectangele': rectangle2,
'merge_rate': number}
response = requests.post(url, data=data).json()
results = response['result']
image = base64.b64decode(results)
with open('所得到的图片.jpg', 'wb') as f: # 将信息写入到图片
f.write(image)
print("转换完成")
if __name__ == '__main__':
change_face('D:路径\\所交换的图片1.jpg',
'D:路径\\所交换的图片2.jpg')
换脸成功!照片就不放出来了。。
如果你觉得文章对你有帮助,求一个小小的赞
作为一个初来乍到的新人博主
求关注~(悄咪咪)
注:本篇文章仅供学习,请勿用于商业活动或侵权行为。