不会人脸识别,该怎样做一个人脸融合的功能?

本文探讨了在缺乏人脸识别技术的情况下如何创建一个人脸融合功能,通过使用API和密钥进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

640?wx_fmt=jpeg


所谓人脸融合就是将两张人脸的特征进行融合生成同一张人脸。对于不会人脸识别的我们来说,可能会比较困难。重复造轮子显然也不是程序员的风格。

网上就有很多类似的API供我们直接使用,不管是人脸融合或者人脸检测、人脸对比等等都可以找到免费的API。

今天演示的例子,用到了百度的AI开放平台。如果要使用平台的API,需要先创建一个自己的应用,然后拿到系统生成的ApI Key和 Secret Key。

进入百度的AI开放平台(http://ai.baidu.com/) 按照下图提示进入人脸融合,

640?wx_fmt=png

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

640?wx_fmt=png

这就用到了我们创建应用提供的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, json


class MergeFace:
    def __init__(self, app_id, secret_key):
        self.app_id = app_id
        self.secret_key = secret_key
        self.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')

最终融合效果图如下:

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

有没有感觉很喜感,哈哈哈


以上,便是今天的分享,希望大家喜欢,觉得内容不错的,欢迎点击「在看」支持,谢谢各位。

640?


感谢您的阅读

640?wx_fmt=gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值