Python调用百度API进行人像动漫化

1. 作者介绍

吴燕子,女,西安工程大学电子信息学院,2021级研究生,张宏伟人工智能课题组
研究方向:模式识别与人工智能
电子邮件:[email protected]

2. 调用百度API实现人像动漫化介绍

2.1 API接口描述

运用世界领先的对抗生成网络,结合人脸检测、头发分割、人像分割等技术,为用户量身定制千人千面的二次元动漫形象,并且可通过参数设置,生成戴口罩的二次元动漫人像。

2.2 请求说明

HTTP 方法:POST。HTTP是超文本传输协议(Hyper Text Transfer Protocol)的缩写,其用于从服务器传输超文本到本地浏览器的传送协议,本实验采取POST请求方法。
请求URL: https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime

2.3 参数说明

在这里插入图片描述

3. 实验过程

3.1 安装的软件包

在终端安装如下两条指令,导入实验需要的库即可:
requests:python实现的简单易用的HTTP库。

pip install requests

base64:一种将不可见字符转换为可见字符的编码方式,是百度API要求的一种将图片编码的方式。

pip install pybase64

3.2 实验过程

1.百度API免费获取方法
依次经过以下步骤就可以获得自己的API Key和Secret Key。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 实验代码

首先导入实验所需的库,然后使用获得的API密钥访问百度API提供的人像动漫化地址以获得访问令牌,得到访问令牌之后就可以调用人像动漫化模块,将输入图片读入之后转换成为动漫化之后的图片。

import requests
import base64

# 这个函数的操作是为了获取access_token参数
def get_access_token():
    url = 'https://aip.baidubce.com/oauth/2.0/token'       #访问人像动画漫画地址,以得到访问令牌
    data = {
    
    
        'grant_type': 'client_credentials',  # 固定值
        'client_id': '***',  # 在开放平台注册后所建应用的API Key
        'client_secret': '***'  # 所建应用的Secret Key
    }
    res = requests.post(url, data=data)
    res = res.json()

    access_token = res['access_token']        #获取访问令牌
    return access_token                       #百度返回的读取令牌


# 下面的代码就是API文档中的代码,直接搬过来使用即可。
request_url = "https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime"
f = open('输入图片.jpg', 'rb')  # 二进制方式打开图片文件

img = base64.b64encode(f.read())  # 图像转为base64的格式,这是百度API文档中要求的

params = {
    
    "image": img}
access_token = '24.11731cd1f0...9f9b3a930f917f3681b.2592000.1596894747.282335-21221990'        #令牌地址
request_url = request_url + "?access_token=" + get_access_token()
headers = {
    
    'content-type': 'application/x-www-form-urlencoded'}      #返回的类型
response = requests.post(request_url, data=params, headers=headers)
res = response.json()          #返回的处理后的数据
# 前面我们讲述了这个请求返回的是一个字典,其中一个键就是image,代表的是处理后的图像信息。
# 将这个图像信息写入,得到最终的效果图。
if res:
    f = open("生成的动漫图.jpg", 'wb')
    after_img = res['image']                         
    after_img = base64.b64decode(after_img)        #将返回的图像数据解码回图片形式
    f.write(after_img)           
    f.close()

上述代码中参数仅使用了一个:image,此时该程序除了使输入图片转化为对应的动漫图后没有其他要求。如2.3表给出的参数可知,可以设置输出图片是否戴口罩和所戴口罩类型,则需要变动相应参数程序:

扫描二维码关注公众号,回复: 13752768 查看本文章
params = {
    
    "image": img, "type": 'anime_mask', "mask_id": "6"}
# 注意:这里就是多了type参数和mask_id参数,都是在源文档中可以查看的参数。
# type的值为anime或者anime_mask。前者生成二次元动漫图,后者生成戴口罩的二次元动漫人像。
# 18之间的整数,用于指定所使用的口罩的编码。大家可以自行下去尝试。

3.4 运行结果

可以观察到调用百度API实现人像动漫化在单人图片和多人图片中的运行结果都是比较好的。
在这里插入图片描述
可以观察到歪头角度越大,动漫化结果越差。
在这里插入图片描述

参考

1.用Python实现抖音上的“人像动漫化”特效,原来这么简单.

猜你喜欢

转载自blog.csdn.net/m0_37758063/article/details/123645864