和换脸算法的简单粗暴相比,人脸融合算法就要弹性的多。顾名思义,人脸融合是对两张人脸进行融合处理,生成的人脸同时具备两张人脸的外貌特征。人脸融合有什么实际意义呢?一个简单的应用就是用父母双方的脸部图片融合,得到未来孩子可能的长相。

本文通过百度AI开放平台的人脸融合功能来做一个简单的试验。

前期准备

账号注册

我们要使用百度AI开发平台的功能,必须先注册一个账号。访问 https://login.bce.baidu.com/ ,然后用你的百度账号登录就行。

登录之后,在左边的菜单栏依次选择“产品服务 -> 人工智能 -> 人脸识别”子菜单,进入到人脸识别的产品界面:

然后点击“创建应用”,填写“应用名称”和“应用描述”即可创建应用:

然后返回应用列表,就可以看到你创建的应用:

创建完应用,你需要将 API Key 和 Secret Key 记下来,我们待会的代码里面会用到。

阅读开发文档

应用创建完后,我们需要知道怎么调用百度的API来完成我们的试验,所以我们需要阅读官方文档。我们需要做两件事情:鉴权认证和图片融合。

鉴权认证文档

如果要调用百度的 API 接口,必须先鉴权认证,也就是获取应用 token 。获取 token 的文档地址为:https://ai.baidu.com/ai-doc/FACE/5k37c1ti0。

文档中对我们有用的几处信息如下:

请求URL数据格式:

向授权服务地址https://aip.baidubce.com/oauth/2.0/token发送请求(推荐使用POST),并在URL中带上以下参数:

  • grant_type:必须参数,固定为client_credentials;

  • client_id:必须参数,应用的API Key;

  • client_secret:必须参数,应用的Secret Key;

请求举例:

https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=Va5yQRHlA4Fq5eR3LT0vuXV4&client_secret=0rDSjzQ20XUj5itV6WRtznPQSzr5pVw2&

服务器返回的JSON文本参数如下:

  • access_token:要获取的Access Token;

  • expires_in:Access Token的有效期(秒为单位,一般为1个月);

  • 其他参数忽略,暂时不用;

返回举例:

{"refresh_token": "25.b55fe1d287227ca97aab219bb249b8ab.315360000.1798284651.282335-8574074","expires_in": 2592000,"scope": "public wise_adapt","session_key": "9mzdDZXu3dENdFZQurfg0Vz8slgSgvvOAUebNFzyzcpQ5EnbxbF+hfG9DQkpUVQdh4p6HbQcAiz5RmuBAja1JJGgIdJI","access_token": "24.6c5e1ff107f0e8bcef8c46d3424a0e78.2592000.1485516651.282335-8574074","session_secret": "dfac94a3489fe9fca7c3221cbf7525ff"
}

图片融合文档

图片融合文档的地址为:https://ai.baidu.com/ai-doc/FACE/5k37c1ti0。

文档中对我们有用的几处信息如下:

请求注意事项:

  • 请求体格式化:Content-Type为application/json,通过json格式化请求体。

  • Base64编码:请求的图片需经过Base64编码,图片的base64编码指将图片数据编码成一串字符串,使用该字符串代替图像地址。您可以首先得到图片的二进制,然后用Base64格式编码即可。需要注意的是,图片的base64编码是不包含图片头的,如data:image/jpg;base64。

  • 图片格式:现支持PNG、JPG、JPEG、BMP,不支持GIF图片。

请求示例:

  • HTTP方法:POST

  • 请求URL:https://aip.baidubce.com/rest/2.0/face/v1/merge

  • URL参数:access_token

  • Header:Content-Type  为application/json

  • Body中放置请求参数

返回示例:

{"error_code": 0,"error_msg": "SUCCESS","log_id": 1234567890123,"timestamp": 1533094576,"cached": 0,"result": {"merge_image": "iVBORw0KGgoAAAANSUhEUgAAAeoAAAHqCAYAAADLb..."}
}

编码

获取 token

根据上面的文档描述,我们调用鉴权接口的方法如下:

# 获取token
def get_token(client_id, client_secret):url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials"params = {"client_id": client_id, "client_secret": client_secret}res = requests.get(url, params=params)result = res.json()return result['access_token']

这个接口很简单,我们传入我们应用的信息就可以直接获得。

获取图片的 base64 编码

我们调用百度人脸融合接口,需要传入图片的 base64 编码,所以我们先要将图片转为 base64 格式,转换方法如下:

# 读取图片,转换成base64
def read_pic(name):with open('./%s' % name, 'rb') as f:base64_data = base64.b64encode(f.read())s = base64_data.decode()return s

我将图片放在程序同级目录下,方法传入图片文件名就可以。

调用人脸融合接口并保存结果

token 值和图片的 base64 编码准备好了,我们就可以来调用接口进行融合。根据官方的 API 文档,我们的调用方法如下:

# 融合图片
def merge(token, template, target):url = 'https://aip.baidubce.com/rest/2.0/face/v1/merge'request_url = url + '?access_token=' + tokenparams = {"image_template": {"image": template,"image_type": "BASE64","quality_control": "NORMAL"},"image_target": {"image": target,"image_type": "BASE64","quality_control": "NORMAL"},"merge_degree": "HIGH"}params = json.dumps(params)headers = {'content-type': 'application/json'}result = requests.post(request_url, data=params, headers=headers).json()if result['error_code'] == 0:res = result["result"]["merge_image"]down_pic(res)else:print(str(result['error_code'])+result['error_msg'])

参数中的 template 指的是模板图片,target 指的是被融合图片。也就是说将 target 图片的人脸融合到 template 图片的人脸中,最后输出的图片是以 template 图片为模板的。

这里有一个将接口返回的图片转存到本地的方法 down_pic ,其实现如下:

# 下载图片
def down_pic(data):imagedata = base64.b64decode(data)file = open('./result.jpg', "wb")file.write(imagedata)

我们把融合的图片命名为 result.jpg ,存储在程序同级目录下。

主程序

主要的方法我们都完成了,下面我们通过编写主程序来测试我们的融合效果,代码如下:

if __name__ == '__main__':girl = read_pic('girl.jpg')boy = read_pic('boy.jpg')token = get_token(API_KEY, SECRET_KEY)merge(token, boy, girl)

我这里用一个男人的图片和一个女人的图片来做测试,以男人的图片作为模板,两张图片都是从百度图片搜索出来的。

男人的人脸图片为:

女人的人脸图片为:

融合后的人脸图片为:

是不是很帅气,这个可能是这两个人未来儿子的模样。接着,我们调换一下模板,我们以女人的图片作为模板,看看他们未来女儿的模样,结果如下:

总结

本文通过调用百度AI开放平台的人脸融合接口,来实现两张正面人脸图片的融合试验。大家觉得融合的效果怎么样?我觉得如果这两个人结婚,生男孩子会好看些呢!大家也可以把自己和另一半的自拍照拿来试验一下,看看未来孩子长啥样?当然,如果你是单身狗,那可以找个漂亮明星图片来幻想一下。

想知道未来孩子长相?Python人脸融合告诉你相关推荐

  1. python人脸融合_用Python玩人脸融合,想知道你未来孩子的长相?(附代码)

    这次花了点时间,将百度智能云里面的人脸识别功能与python结合,进行了一场实验.结果还是蛮有成就感的,过程也挺简单,不会复杂,说不定,你就能融合出你孩子的长相了耶~ 下面我们一起敲起键盘吧! # 好 ...

  2. 换发型算法_GitHub - fredliu168/yry: yry(颜如玉)—— 一个实现人脸融合的算法,可以接近腾讯天天P图疯狂变脸功能的效果...

    颜如玉 颜如玉 -- python 人脸融合程序,可实现类似天天P图疯狂换脸.face++人脸融合效果 项目描述 最近随着各种技术的发展,图像方面的人脸处理技术越来越广泛.各大相机软件都有美颜.贴图. ...

  3. 换发型算法_GitHub - DylanMaeng/yry: yry(颜如玉)—— 一个实现人脸融合的算法,可以接近腾讯天天P图疯狂变脸功能的效果...

    颜如玉 颜如玉 -- python 人脸融合程序,可实现类似天天P图疯狂换脸.face++人脸融合效果 项目描述 最近随着各种技术的发展,图像方面的人脸处理技术越来越广泛.各大相机软件都有美颜.贴图. ...

  4. 换发型算法_GitHub - donsonLiu/yry: yry(颜如玉)—— 一个实现人脸融合的算法,可以接近腾讯天天P图疯狂变脸功能的效果...

    颜如玉 颜如玉 -- python 人脸融合程序,可实现类似天天P图疯狂换脸.face++人脸融合效果 项目描述 最近随着各种技术的发展,图像方面的人脸处理技术越来越广泛.各大相机软件都有美颜.贴图. ...

  5. python人脸识别代码百度ai_强大的AI!Python几行代码,就能预测未来孩子的长相?...

    这次,将百度智能云中的人脸识别功能与python结合起来进行实验花了一些时间.结果非常令人满意,而且过程非常简单而不复杂.或许,你可以整合你孩子的外貌.让我们一起敲击键盘. 准备百度人工智能开放平台账 ...

  6. python h5游戏_从零开始制作H5人脸融合小游戏

    去年的建军节,一个展示军装照的H5人脸融合游戏火遍朋友圈,带来很好的传播效果.最近欧冠决赛要来了,公司决定做一个寻找和你最像的欧冠球星的H5游戏,那么该怎么做呢?认真分析了一下,这个游戏其实用到的技术 ...

  7. python+opencv+百度智能云 人脸识别——人脸融合

    一.设计思路 1.导入模块 import base64 import json import requests base64模块:由于某些系统中只能使用ASCII字符.Base64就是用来将非ASCI ...

  8. 想知道未来你娃长啥样?这里有技术可以预测!

    文 | 闲欢 来源:Python 技术「ID: pythonall」 和换脸算法的简单粗暴相比,人脸融合算法就要弹性的多.顾名思义,人脸融合是对两张人脸进行融合处理,生成的人脸同时具备两张人脸的外貌特 ...

  9. Python人脸识别——从入门到工程实践

    参考书籍:<Python人脸识别从入门到工程实践> 全书共8章: 第 1 章:介绍了人脸识别的基础知识和必备常识: 第 2~4 章:详细讲解了与人脸识别相关的数学.机器学习.计算机视觉.O ...

最新文章

  1. 图解:电商支付架构设计
  2. Java并发基本概念
  3. C#发现之旅第九讲 ASP.NET验证码技术
  4. 放置奇兵 新 粉石墨
  5. 推荐系统里的那些坑儿
  6. 在你的计算机上使用qr码登录,如何在Android 10上使用QR码共享您的Wi-fi凭据 | MOS86...
  7. nlp中的经典深度学习模型(一)
  8. 改进版的CBOW模型
  9. 前端开发入门站点推荐
  10. 黑色精美大气DJ音乐歌曲网站源码+带WAP手机端
  11. 惠普服务器显示器接口类型,介绍:目前显示器主要接口
  12. springboot1.5.x+ seata1.4.2(最新版本)+springcloud ( Edgware.SR5) +eureka+feign+mybatis-plus(最新)
  13. python爬取虾米音乐_【个人】爬虫实践,利用xpath方式爬取数据之爬取虾米音乐排行榜...
  14. Zack Arias One light workshop(单灯摄影艺术)
  15. NoticeBar 通知栏组件,封装好的可直接使用
  16. 微信小程序rich-text富文本图片
  17. “移除”虚拟机和“从磁盘中删除”虚拟机的区别
  18. VISUAL SVN安装 及客户端使用
  19. @Value注解获取不到配置值
  20. Ubuntu16.04创建用户时指定工作目录

热门文章

  1. ovf导入虚拟服务器,云主机 导入 ovf
  2. QT HTTP接收多个数据包生成图片
  3. 中国烟草和水烟行业市场供需与战略研究报告
  4. 从阿里云dms导出mysql无法导入_MySQL数据库怎么导入数据?怎么用DMS导入数据?...
  5. MAC版本subline text快捷键大全
  6. 便携式洁面仪商城质检报告检验标准是什么
  7. No1.初来乍到,请多指教
  8. Learning C++ No.14【STL No.4】
  9. window10关闭磁盘bitlocker加密
  10. Ubuntu下载软件包连接失败