Python实现AI换脸功能

Posted 为乐而来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python实现AI换脸功能相关的知识,希望对你有一定的参考价值。

运行时如果提示模块requests和simplejson不存在使用命令

pip install requests

pip install simplejson

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__\':
    face1="mingxing"
    face2="meizi"  
    face3=face1+"_"+face2 #把face2的脸换到face1图片中的脸上去
    image1 = r""+face1+".jpg"
    image2 = r""+face2+".jpg"
    image3 = r""+face3+".jpg"
    merge_face(image1,image2,image3,100)

把图片与py文件放在同一目录下

原图mingxing.jpg

要换的脸图meizi.jpg

换完以后的图mingxing_meizi.jpg

以上是关于Python实现AI换脸功能的主要内容,如果未能解决你的问题,请参考以下文章

怎么将本地视频ai换脸

Python AI 换脸,宋小宝都能换脸刘亦菲,你的网恋对象不知道有多可怕!

Python AI 换脸,宋小宝都能换脸刘亦菲,你的网恋对象不知道有多可怕!

Python AI 换脸,宋小宝都能换脸刘亦菲,你的网恋对象不知道有多可怕!

怎么在手机将视频ai换脸

国内有没有和Disco diffusion差不多的AI绘画软件?