運行時如果提示模塊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