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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM