当前位置:   article > 正文

Python调用百度API实现人脸融合_图像融合api

图像融合api

1.作者介绍

刘帅波,男,西安工程大学电子信息学院,2021级研究生,张宏伟人工智能课题组
研究方向:机器视觉与人工智能
电子邮件:1461004501@qq.com

2.人脸融合介绍

简单来说就是对两张人脸进行融合处理,使生成的人脸同时具备两张人脸的外貌特征。这是百度智能云官网平台给出的在线测试页面,支持四种图片格式,且要求图片大小不超过2M。
在这里插入图片描述

3.调用百度智能云API

如何创建应用接口步骤如下,按照箭头提示依次点击即可
步骤一:

步骤二:
在这里插入图片描述
步骤三:
在这里插入图片描述

4.代码解析

4.1 导入库

import requests         # 可以用来生成一个网络请求,抓取网络信息即用来调用百度云的接口
import base64           # 将图片信息采用Base64编码
import json             # 是一种轻量级的数据交换格式
  • 1
  • 2
  • 3

4.2 获取token

# token获取
def get_token(client_id, client_secret):
    # client_id为官网获取的API Key,client_secret为官网获取的Secret Key.下行client_id=后的马赛克为你的API Key,client_secret=后的马赛克为你的Secret Key
    url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=********&client_secret=*********"
    response = requests.get(url)
    resultJson = response.json()
    return resultJson['access_token']
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这里需要使用自己在百度智能云获取的API Key和Secret Key,token相当于访问百度云人脸融合接口时服务端发放给你的“访问许可”

4.3 读取图片,转换编码

# 根据图片名读取图片,并转换成base64
def read_photo(name):
    with open('%s' % name, 'rb') as f:
        base64_data = base64.b64encode(f.read())
        bd = base64_data.decode()
        return bd
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

此处属于固定函数模型

4.4 调用百度智能云接口实现图片融合

# 调用百度的接口,实现融合图片
def face_fusion(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_photo(res)
    else:
        print(str(result['error_code']) + result['error_msg'])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

这里为核心部分,调用百度API实现人脸图像融合

4.5 下载融合图片

# 下载融合后图片
def down_photo(data):
    imagedata = base64.b64decode(data)
    file = open('D:\\研一任务\\课程作业\\人工智能高级语言程序设计\\result.jpg', "wb")
    # 融合图片保存路径,'wb':以二进制格式打开一个文件只用于写入,文件存在则覆盖,若不存在创建新文件
    file.write(imagedata)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

注意此处的保存路径名称,避免出现“\n”,“\r”等形式,造成路径无法读取错误

4.6 运行主程序

# 主程序
if __name__ == '__main__':
    # 路径为自己的图片存储路径
    胡歌 = read_photo('D:\\研一任务\\课程作业\\人工智能高级语言程序设计\\1.jpg')                # 模板图片
    赵丽颖 = read_photo('D:\\研一任务\\课程作业\\人工智能高级语言程序设计\\2.jpg')              # 目标图片
    token = get_token('*********', '**********')  # 前者为API Key,后者改为Secret Key
    face_fusion(token, 胡歌, 赵丽颖)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

此处需要使用百度智能云获取的API Key和Secret Key,运行主程序便可获得人脸融合图像结果(注意:应当选择正面无遮挡的清晰人脸照片,否则会出现检测不到人脸的提示)

4.7 融合结果展示

在这里插入图片描述

5. 完整代码

'''
Author:LSB / 207
Date:2022年03月03日
'''

import requests         # 可以用来生成一个网络请求,抓取网络信息即用来调用百度云的接口
import base64           # 将图片信息采用Base64编码
import json             # 是一种轻量级的数据交换格式


# token获取
def get_token(client_id, client_secret):
    # client_id为官网获取的API Key,client_secret为官网获取的Secret Key.下行client_id=后的马赛克为你的API Key,client_secret=后的马赛克为你的Secret Key
    url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=***********&client_secret=************"  # 注意此处的&符号
    response = requests.get(url)
    resultJson = response.json()
    return resultJson['access_token']


# 根据图片名读取图片,并转换成base64
def read_photo(name):
    with open('%s' % name, 'rb') as f:
        base64_data = base64.b64encode(f.read())
        bd = base64_data.decode()
        return bd


# 调用百度的接口,实现融合图片
def face_fusion(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_photo(res)
    else:
        print(str(result['error_code']) + result['error_msg'])


# 下载融合后图片
def down_photo(data):
    imagedata = base64.b64decode(data)
    file = open('D:\\研一任务\\课程作业\\人工智能高级语言程序设计\\result.jpg', "wb")
    # 融合图片保存路径,'wb':以二进制格式打开一个文件只用于写入,文件存在则覆盖,若不存在创建新文件
    file.write(imagedata)


# 主程序
if __name__ == '__main__':
    # 路径为自己的图片存储路径
    胡歌 = read_photo('D:\\研一任务\\课程作业\\人工智能高级语言程序设计\\1.jpg')                # 模板图片
    赵丽颖 = read_photo('D:\\研一任务\\课程作业\\人工智能高级语言程序设计\\2.jpg')              # 目标图片
    token = get_token('*********', '**********')  # 前者为API Key,后者改为Secret Key
    face_fusion(token, 胡歌, 赵丽颖)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/123655?site
推荐阅读
相关标签
  

闽ICP备14008679号