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

简介: 想知道未来孩子长相?Python人脸融合告诉你

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


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


前期准备


账号注册


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


image.png


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


image.png


image.png


创建完应用,你需要将 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图片。



请求示例:


返回示例:

{
    "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=' + token
    params = {
        "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)


我这里用一个男人的图片和一个女人的图片来做测试,以男人的图片作为模板,两张图片

都是从百度图片搜索出来的。

男人的人脸图片为:


image.png


女人的人脸图片为:


image.png


融合后的人脸图片为:


image.png


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


image.png


总结

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



目录
相关文章
|
2月前
|
数据采集 Python
Python实用记录(七):通过retinaface对CASIA-WebFace人脸数据集进行清洗,并把错误图路径放入txt文档
使用RetinaFace模型对CASIA-WebFace人脸数据集进行清洗,并将无法检测到人脸的图片路径记录到txt文档中。
45 1
|
4月前
|
机器学习/深度学习 存储 算法
【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索Python代码baseline
本文通过可视化分析,总结了2024年考研国家分数线的变化趋势,指出管理类MBA降低5分,哲学、历史学、理学、医学等10个专业分数线上涨,而经济学等专业出现下降,反映出不同专业分数线受考生数量、竞争情况和政策调整等因素的影响。
76 2
【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索Python代码baseline
|
4月前
|
机器学习/深度学习 存储 算法
【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索Python代码实现
本文提供了2024泰迪杯B题“基于多模态特征融合的图像文本检索”的Python代码实现,包括问题分析、多模态特征提取、特征融合模型和算法的构建,以及如何使用召回率作为评价标准进行模型性能评估的详细说明。
62 2
【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索Python代码实现
|
4月前
|
数据可视化 物联网 区块链
探索Python中的数据可视化:使用Matplotlib和Seaborn绘制图表探索未来:区块链、物联网与虚拟现实的融合趋势与应用前景
【8月更文挑战第30天】本文旨在引导读者通过Python编程语言,利用Matplotlib和Seaborn库,轻松掌握数据可视化技术。文章以浅显易懂的语言,结合实用的代码示例,从基础的图表绘制到高级定制功能,逐步深入讲解如何在数据分析中运用这些工具。无论你是编程新手还是希望提升可视化技能的开发者,都能在这篇文章中找到有价值的信息,让你的数据“活”起来。
|
4月前
|
Python
探索Python中的列表推导式:简洁与效率的融合
【8月更文挑战第31天】在编程的世界里,我们总是在寻找使代码更简洁、更高效的方法。Python语言提供了一种强大的工具——列表推导式,它允许我们在一行代码中生成列表,既提高了代码的可读性,也提升了执行效率。本文将带你了解列表推导式的基本概念,通过示例展示其使用场景,并探讨如何优雅地运用这一特性来简化你的Python代码。
|
4月前
|
数据采集 存储 算法
【2024泰迪杯】B 题:基于多模态特征融合的图像文本检索20页论文及Python代码
本文介绍了2024年泰迪杯B题的解决方案,该题目要求构建基于多模态特征融合的图像文本检索模型和算法,通过深入分析和预处理数据集,构建了OFA、BertCLIP和ChineseCLIP三种多模态特征融合模型,并通过投票融合机制优化检索效果,实验结果表明所提模型在图像与文本检索任务中显著提高了检索准确性和效率。
124 2
|
4月前
|
数据处理 开发者 Python
探索Python中的列表推导式:简洁与高效的融合
【8月更文挑战第30天】在编程的世界里,代码的优雅和效率往往如同天平的两端,难以兼得。然而,Python语言中的列表推导式(List Comprehension)却巧妙地实现了这两者的平衡。它以简明扼要的语法,将循环和条件判断融入一行代码之中,既提升了代码的可读性,又不失执行的效率。本文将深入探讨列表推导式的魅力所在,并通过对比分析,揭示其背后的逻辑结构,带你领略这一Python独到特性的风采。
|
4月前
|
测试技术 数据处理 开发者
探索Python中的列表推导式:简洁与效率的融合
【8月更文挑战第2天】在Python编程世界中,列表推导式以其简明扼要的语法和高效的性能而备受青睐。本文将通过实际代码示例深入探讨列表推导式的使用场景、优势及其背后的工作原理。我们将一起见证如何通过几行简单的代码,完成复杂的数据处理任务,并评估其在不同情况下的性能表现。
|
5月前
|
机器学习/深度学习 数据采集 算法
Python实现ISSA融合反向学习与Levy飞行策略的改进麻雀优化算法优化支持向量机回归模型(SVR算法)项目实战
Python实现ISSA融合反向学习与Levy飞行策略的改进麻雀优化算法优化支持向量机回归模型(SVR算法)项目实战
|
5月前
|
机器学习/深度学习 监控 算法框架/工具
使用Python实现深度学习模型:人脸识别与人脸表情分析
【7月更文挑战第18天】 使用Python实现深度学习模型:人脸识别与人脸表情分析
249 2
下一篇
DataWorks