人像动漫化~百度AI开放平台初体验
鹿鼎记肯定 发布于2020-07 浏览:15235 回复:9
1
收藏

【个人简介】本二计科在读学生一枚~主要研究目标检测、文字识别、语义分割和实例分割。这是一期关于GAN系列的项目,喜欢的朋友可以扫码订阅哟!

【项目列表】

  • 梵高风格图像生成 一起来玩风格迁移呀!  https://aistudio.baidu.com/aistudio/projectdetail/597606
  • 人像动漫化~百度AI开放平台初体验  https://aistudio.baidu.com/aistudio/projectdetail/639514

 

【概述】 第一次接触百度智能云的同学可能会对它的使用比较陌生,别急,这篇文章的目的就是教你如何零基础“白嫖”百度AI开放平台的接口的~

以人像动漫化为例。首先我们去到 人像动漫化 的网址:https://ai.baidu.com/tech/imageprocess/selfie_anime 

右边有两个名词,Request 和 Response

  Request Response
Post 1 API Key 和 Secret Key access_token
Post 2 access_token image


我们需要发送两次 Post 请求,第一次通过 API_Key 和 Secret_Key 获取 access_token ,第二次通过 access_token 获取处理后的 image 。这个放在后面说,先介绍下如何在百度智能云创建应用:

1. 打开百度智能云( https://login.bce.baidu.com ),进入管理中心;
2. 左侧 产品服务 中选择图像增强与特效;
3. 创建应用,并填写应用名称和应用描述;


4. 在 应用列表 可以看到我们的 AppID、API Key和Secret Key。

这里我们暂且将 API Key 和 Secret Key 理解成帐号和密码,有了这两个东西,我们就可以开始请求调用百度AI开放平台的接口了~下面介绍 Post 请求调用的方法

 

Post 1(鉴权认证机制)

这一步比较简单,只需在 URL 中带上以下参数即可(建议封装成字典)

是否固定
grant_type client_credentials
client_id API Key
client_secret Secret Key

如果请求成功,则返回的JSON格式如下:

  • access_token: 要获取的access_token;
  • expires_in: access_token的有效期(秒为单位,一般为1个月);
  • 其他参数忽略,暂时不用;

如果请求失败,则返回的JSON格式如下:

  • error: 错误码。invalid_client
  • error_description: 错误描述信息。unknown client id 代表 API Key 不正确 | Client authentication failed 代表 Secret Key不正确

只要 API Key 和 Secret Key 没有错误,是不会返回这种错误的。如果出错的话建议检查下这两个参数~

Post 1的操作具有普遍性,对于大部分用HTTP API的调用者,只需修改代码的 API Key 和 Secret Key 部分便可获取 access_token。

##############
###  参数  ###
##############
API_Key = "None"
Secret_Key = "None"

# 第一次 Post 请求,获取access_token
def get_access_token():
    # URL
    url = 'https://aip.baidubce.com/oauth/2.0/token'
    # 参数
    params = {
        'grant_type': 'client_credentials',    # 固定值  
        'client_id': API_Key,  
        'client_secret': Secret_Key  
    }
    res = requests.post(url, data=params)
    res = res.json()
    access_token = res['access_token']
    return access_token

 

Post 2(在线API)

调用接口最关键的一步,我们需要利用上面获取的 access_token 来作为 URL 的参数。不同于上面的 Post 1,这一步需要携带两个参数,一个是 Header,它有固定的键和值,另一个是 Param,它的键为 image,值是格式转换成base64后的图片。为了代码有更好的可读性,我把 f.open() 改成了 with open() as f: 的格式

##############
###  参数  ###
##############
photo = "7hinc.jpg"
mask_id = 1
assert 1 <= mask_id <= 8, "mask_id应为1~8之间整数"

# 第二次 Post 请求
request_url = "https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime"
# 二进制方式打开图片文件
with open(photo, 'rb') as f:
    # 图像转为base64的格式
    img = base64.b64encode(f.read()) 
    # 定义params和header
    params = {"image":img, "type": "anime_mask"}
    header = {'content-type': 'application/x-www-form-urlencoded'}
    # 发送请求
    try:
        request_url = request_url + "?access_token=" + get_access_token()
    except KeyError:
        print("access_token有误!请检查API Key 或 Secret Key是否复制正确")
        sys.exit(0)
    response = requests.post(request_url, data=params, headers=header)
    res = response.json()

所见即所得的体验,可移步AI Studio~ https://aistudio.baidu.com/aistudio/projectdetail/639514

不得不说,公家的东西果然好用。

百度开放平台有很多非常成熟的技术,包括语音技术、图像技术、文字识别和人脸识别等,如果我们在学习或生活或工作需要用到这些技术,可以直接去 https://ai.baidu.com/ 找相关服务,并且部分接口提供了每天xxx次免费调用的机会,即使你把免费的机会用完了,按量后付和次数包预付费方式所呈现的价格也是非常美丽~一顿饭的钱,就可以调用几百次。另外,在AI 社区每月积分兑换活动中有 百度AI调用量&QPS调用量 ,岂不是美滋滋

想了解更多关于百度AI开放平台的消息,可以参考 帮助文档( https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjgn3 )

ps. 白嫖真快乐!

收藏
点赞
1
个赞
共9条回复 最后由用户已被禁言回复于2022-04
#10仔仔棒123456回复于2020-09

感觉失真太严重

0
#9188******76回复于2020-09

赞啊!

0
#8大手拉小手0123回复于2020-08
#7 鹿鼎记肯定回复
确实,小程序走起!

我已经看到过这个相机了

0
#7鹿鼎记肯定回复于2020-07
#6 189******30回复
原来还发了篇文章,我记得我看过这个项目的。 要是每天有额度,可以做个demo版的app了~~  
展开

确实,小程序走起!

0
#6189******30回复于2020-07
#4 鹿鼎记肯定回复
如果把500次改成每天几十次免费,那是香的不行不行[图片]

原来还发了篇文章,我记得我看过这个项目的。

要是每天有额度,可以做个demo版的app了~~

 

0
#5大手拉小手0123回复于2020-07

这个也太炫酷了吧,年轻人都喜欢

 

 

0
#4鹿鼎记肯定回复于2020-07
#3 为天地立心67回复
最后一句 也说出了 我的心里话

如果把500次改成每天几十次免费,那是香的不行不行

0
#3为天地立心67回复于2020-07

最后一句 也说出了 我的心里话

0
#2Wwsd3d回复于2020-07

可以的~

0
TOP
切换版块