赞
踩
本文主要介绍人脸融合API的调用使用攻略。这里只是调用测试,有的融合结果可能比较恐怖,希望不要拍砖。
一.平台接入
此步骤比较简单,不多阐述。可参照之前文档:
https://ai.baidu.com/forum/topic/show/943028
二.分析接口文档
1.接口API
https://ai.baidu.com/docs#/Face-Merge/6720b55c
(1)接口描述
图像融合:将检测到的两张人脸图片进行融合,输出一张融合后的人脸。
(2)请求说明
需要用到的信息有:
请求URL:https://aip.baidubce.com/rest/2.0/face/v1/merge
Header格式:Content-Type:application/json
图片要求:
模板图(template_image),要求被融合的人脸边缘需要与图片边缘保持一定距离,保证被融合的人脸的的核心区域完全在图片中。
目标图无严格限制, 建议选择正脸、清晰的图像。
(3)返回示例
返回渲染图片的Base64编码,需要进行解码还原成图片。
{ "error_code": 0, "error_msg": "SUCCESS", "log_id": 1234567890123, "timestamp": 1533094576, "cached": 0, "result": { "merge_image": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAHqCAYAAADLb..." } }
2.获取access_token
#client_id 为官网获取的AK, client_secret 为官网获取的SK
client_id =【百度云应用的AK】
client_secret =【百度云应用的SK】
#获取token
def get_token():
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret
request = urllib.request.Request(host)
request.add_header('Content-Type', 'application/json; charset=UTF-8')
response = urllib.request.urlopen(request)
token_content = response.read()
if token_content:
token_info = json.loads(token_content.decode("utf-8"))
token_key = token_info['access_token']
return token_key
三.识别结果
模板图:
目标图:
融合图:
处理结果方面:可以看出,融合效果还是不错。
处理速度方面:处理时间1.64 s,可以接受。
四.源码共享
# -*- coding: utf-8 -*- #!/usr/bin/env python import urllib import urllib.parse import urllib.request import json import io from PIL import Image import base64 #client_id 为官网获取的AK, client_secret 为官网获取的SK client_id = '*************************' client_secret = '****************************' #获取token def get_token(): host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret request = urllib.request.Request(host) request.add_header('Content-Type', 'application/json; charset=UTF-8') response = urllib.request.urlopen(request) token_content = response.read() if token_content: token_info = json.loads(token_content.decode("utf-8")) token_key = token_info['access_token'] return token_key #获取人脸融合结果 def face_detect_url(image_template_url,image_target_url): request_url = "https://aip.baidubce.com/rest/2.0/face/v1/merge" params = dict() params['image_template'] = {"image": image_template_url,'image_type':'URL'} params['image_target'] = {"image": image_target_url,'image_type':'URL'} params['merge_degree']= 'HIGH' params = json.dumps(params).encode('utf-8') access_token=get_token() request_url = request_url + "?access_token=" + access_token request = urllib.request.Request(url=request_url, data=params) request.add_header('Content-Type', 'application/json') response = urllib.request.urlopen(request) content = response.read() if content: receipts = json.loads(content.decode("utf-8")) result = receipts['result'] img_b64encode = result['merge_image'] # print(img_b64encode) img_b64decode = base64.b64decode(img_b64encode) # base64解码 image = io.BytesIO(img_b64decode) img = Image.open(image) img.show() file=open('2.jpg','wb') file.write(img_b64decode) file.close() print ('Success!') return content else: return '' mage_template_url='http://dingyue.nosdn.127.net/JaftnDIuIbHgg97vQ8fDvHRWoWYgV8h=LFgrZXxW25oSy1541668286416compressflag.jpeg' image_target_url='http://tx.haiqq.com/uploads/allimg/170503/0S3051605-0.jpg' face_detect_url(image_template_url,image_target_url)
五.意见建议
目前对正面照片融合效果较好,如果模板照片和目标照片人物角度不一致,如有一方为侧脸,则融合效果不好,建议做相应完善处理。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。