赞
踩
- # AI换脸
- # AndyChe
-
- 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"E:\test\12.jpg"
- # 自己的图
- image2 = r"E:\test\2.jpg"
- # 结果图
- image3 = r"E:\test\result.jpg"
- merge_face(image1, image2, image3, 100)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。