Python實現AI換臉功能
阿新 • • 發佈:2020-04-13
需要用到的介面:
獲取人臉資訊的介面: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)
效果:
換臉前
要換的臉:
換臉後:
總結
到此這篇關於Python實現AI換臉的程式碼的文章就介紹到這了,更多相關Python實現AI換臉內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!