Python实现AI换脸

2 篇文章 0 订阅
1 篇文章 0 订阅

需要用到的接口:
获取人脸信息的接口: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)

效果:
换脸前
在这里插入图片描述
要换的脸:
在这里插入图片描述
换脸后:
在这里插入图片描述

  • 17
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
AI 换脸需要用到深度学习技术和图像处理技术,这里提供一个基于 PythonAI 换脸库 FaceSwap 的使用方法。 以下是使用 FaceSwap 库实现 AI 换脸的步骤: 1. 安装 FaceSwap 库 安装方法可以参考 FaceSwap 的官方文档,可以使用 pip 安装: ``` pip install faceswap ``` 2. 准备源图像和目标图像 分别准备需要换脸的源图像和目标图像,并将它们放在不同的文件夹中。 3. 提取源图像和目标图像的人脸 使用 FaceSwap 提供的 extract 工具来提取源图像和目标图像中的人脸: ``` faceswap extract -i path/to/source/image -o path/to/source/face faceswap extract -i path/to/target/image -o path/to/target/face ``` 其中,`path/to/source/image` 和 `path/to/target/image` 分别是源图像和目标图像的路径,`path/to/source/face` 和 `path/to/target/face` 分别是提取后的人脸图像的存储路径。 4. 训练模型 使用 FaceSwap 提供的 train 工具来训练模型: ``` faceswap train -A path/to/source/face -B path/to/target/face -m path/to/model ``` 其中,`path/to/source/face` 和 `path/to/target/face` 分别是提取后的源图像和目标图像中的人脸图像的存储路径,`path/to/model` 是训练后的模型存储路径。 5. 进行换脸操作 使用 FaceSwap 提供的 convert 工具来进行换脸操作: ``` faceswap convert -i path/to/source/image -o path/to/output/image -m path/to/model -w ``` 其中,`path/to/source/image` 是源图像的路径,`path/to/output/image` 是输出图像的路径,`path/to/model` 是训练后的模型存储路径,`-w` 参数表示将输出图像中的人脸进行对齐。 运行以上步骤,即可实现 AI 换脸
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值