电脑网站制作教程/宁波正规seo推广
所谓人脸融合就是将两张人脸的特征进行融合生成同一张人脸。对于不会人脸识别的我们来说,可能会比较困难。重复造轮子显然也不是程序员的风格。
网上就有很多类似的API供我们直接使用,不管是人脸融合或者人脸检测、人脸对比等等都可以找到免费的API。
今天演示的例子,用到了百度的AI开放平台。如果要使用平台的API,需要先创建一个自己的应用,然后拿到系统生成的ApI Key和 Secret Key。
进入百度的AI开放平台(http://ai.baidu.com/) 按照下图提示进入人脸融合,

在应用列表中进行创建应用,创建成功之后系统会为我们提供Api Key、Secret Key等参数

这就用到了我们创建应用提供的api key与secret key这俩参数。
通过get请求 https://aip.baidubce.com/oauth/2.0/token。获取到token,为下一步提供参数
def get_token(self):url = 'https://aip.baidubce.com/oauth/2.0/token'params = {'grant_type': 'client_credentials','client_id': self.app_id,'client_secret': self.secret_key}response = requests.get(url, params=params)resp_json = response.json()self.access_token = resp_json['access_token']
获取到access_token 就可以开始我们的融合工作了。
通过POST请求访问
https://aip.baidubce.com/rest/2.0/face/v1/merge?access_token=你的token。然后在body体中传入图片地址或者base64信息即可,最终融合的图片也是以base64格式进行返回。
def merge(self, face1, face2):url = f'https://aip.baidubce.com/rest/2.0/face/v1/merge?access_token={self.access_token}'data = {'image_template': {'image': base64_tool(face1),'image_type': 'BASE64'},'image_target': {'image': base64_tool(face2),'image_type': "BASE64"}}response = requests.post(url, data=json.dumps(data))resp_json = response.json()
完整代码如下:
import requests, base64, jsonclass MergeFace:def __init__(self, app_id, secret_key):self.app_id = app_idself.secret_key = secret_keyself.access_token = ''def get_token(self):url = 'https://aip.baidubce.com/oauth/2.0/token'params = {'grant_type': 'client_credentials','client_id': self.app_id,'client_secret': self.secret_key}response = requests.get(url, params=params)resp_json = response.json()self.access_token = resp_json['access_token']def merge(self, face1, face2):url = f'https://aip.baidubce.com/rest/2.0/face/v1/merge?access_token={self.access_token}'data = {# 目标图'image_template': {'image': base64_tool(face1),'image_type': 'BASE64'},'image_target': {'image': base64_tool(face2),'image_type': "BASE64"}}response = requests.post(url, data=json.dumps(data))resp_json = response.json()if resp_json['error_code'] == 0:merge_image = resp_json['result']['merge_image']img_data = base64.b64decode(merge_image)with open('face_merge.jpg', 'wb') as fp:fp.write(img_data)else:print(resp_json['error_msg'])def base64_tool(image):with open(image, 'rb') as f:b = base64.b64encode(f.read())return b.decode()if __name__ == '__main__':face = MergeFace(app_id='mmNGOyk0MzP3eh8。。。', secret_key='2Qv。。。3WqRA54b')try:face.get_token()except Exception as e:print('获取access_token异常...', e)face.merge(face1='face1.jpg', face2='face2.jpg')
最终融合效果图如下:
有没有感觉很喜感,哈哈哈
以上,便是今天的分享,希望大家喜欢,觉得内容不错的,欢迎点击「在看」支持,谢谢各位。

感谢您的阅读