【云AI】利用百度智能云,实现人像动漫化

🍅0 写在前面


👨‍🎓 博主介绍:大家好,我是可可卷,很高兴又和大家见面了~
⭐️情景引入:最近刚加入了百度松果人才培养菁英班,直接被安利了一波百度大脑,用起来真是吓了一跳,不用写模型也能玩转人工智能?
🔎仔细观察:详细了解了一番,发现功能还挺多,主要还是免费的,这不得开发下新用法?嘿嘿~


在这里插入图片描述

🍅1 概念介绍


人像动漫化

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


🍅2 效果展示

官方展示的效果~

效果展示


我制作的效果~

在这里插入图片描述


是不是很传神?

还有更神奇的!

在这里插入图片描述

猫猫变成了透明!

🍅3 使用方法


 🍓3.1 注册账户

打开百度开发平台,直接注册账户就可以

 🍓3.2 免费额度

所有的API都会赠送一定免费额度,大家可以放心尝试哦~

 🍓3.3 创建应用

进入控制台创建应用,选择产品服务->图像增强与特效
在这里插入图片描述


 🍓3.4 领取免费资源

在这里插入图片描述
领取成功后会在圆圈所示区域显示剩余次数~


 🍓3.5 创建应用

点击创建应用,填写应用名称(任意),选择需要的接口(比如 图像增强与特效–人像动漫化),选择应用归属为个人,随便写一下应用描述
在这里插入图片描述


***

 🍓3.6 获取key

点击左侧应用列表,查看、保存API Key和Secret Key,后面会用到
在这里插入图片描述


 🍓3.7 调用接口

请求示例

HTTP 方法:POST

请求URL: https://aip.baidubce.com/rest/2.0/image-process/v1/style_trans

URL参数:

参数
access_token通过API Key和Secret Key获取的access_token,参考”Access Token获取

Header如下:

参数
Content-Typeapplication/x-www-form-urlencoded

Body中放置请求参数,参数详情如下:

请求参数

参数是否必选类型可选值范围说明
image和url二选一string-base64编码后大小不超过10M(参考:原图大约为8M以内),最短边至少10px,最长边最大5000px,长宽比4:1以内。注意:图片的base64编码是不包含图片头的,如(data:image/jpg;base64,)
url和image二选一string-图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过10M(参考:原图大约为8M以内),最短边至少10px,最长边最大5000px,长宽比4:1以内,支持jpg/png/bmp格式,当image字段存在时url字段失效。
optiontruestringcartoon pencil color_pencil warm wave lavender mononoke scream gothiccartoon:卡通画风格 pencil:铅笔风格 color_pencil:彩色铅笔画风格 warm:彩色糖块油画风格 wave:神奈川冲浪里油画风格 lavender:薰衣草油画风格 mononoke:奇异油画风格 scream:呐喊油画风格 gothic:哥特油画风格

 🍓3.8 在线调试API

大家可以进入在线调试接口,嫌麻烦的也可以跳过这一步,直接通过代码调试


 🍓3.9 python调用

官方给出的代码如下:

# encoding:utf-8

import requests
import base64

'''
人像动漫化
'''
request_url = "https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime"
# 二进制方式打开图片文件
f = open('[本地文件]', 'rb')
img = base64.b64encode(f.read())

params = {"image":img}
access_token = '[调用鉴权接口获取的token]'
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:
    print (response.json())

我们对其稍作修改

# encoding:utf-8

import requests
import base64

def image_process(img_name,client_id,client_secret):
    request_url = "https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime"
    # 二进制方式打开图片文件
    f = open(img_name, 'rb')
    img = base64.b64encode(f.read())

    params = {"image":img}
    access_token = get_token(client_id,client_secret)
    request_url = request_url + "?access_token=" + access_token
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(request_url, data=params, headers=headers)
    if response:
        print (response.json())
    return response.json()['image']

 🍓3.10 获取token

官方给出的token获取方式:

# encoding:utf-8
import requests 

# client_id 为官网获取的AK, client_secret 为官网获取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】'
response = requests.get(host)
if response:
    print(response.json())

我们对其稍作修改

def get_token(client_id,client_secret):
    # client_id 为官网获取的AK, client_secret 为官网获取的SK
    host = f'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={client_id}&client_secret={client_secret}'
    response = requests.get(host)
    if response:
        print(response.json())
        return response.json()['access_token']
    else:
        print('no response!')

然后,运行代码就可以获取处理后图片的base64编码啦~

# client_id 为官网获取的AK, client_secret 为官网获取的SK
client_id='xxx'
client_secret='xxx'
img_name='img_name.jpg'
img_base64=image_process(img_name,client_id,client_secret)
print(img_base64)

可以发现,官方已经给出了很详细的代码模板,我们真正需要改的部分也就只有
client_id='xxx'
client_secret='xxx'
两行而已~


 🍓3.11 查看图片

获取到编码后,可以在浏览器输入data:image/jpeg;[你的base64编码,注意需要去掉中括号]查看图片
或者使用下面的代码将base64编码转换成图片

def base2picture(img_base64,img_save):
    imgdata = base64.b64decode(img_base64)
    with open(img_save,'wb') as f:
        f.write(imgdata)
img_save='img_save.jpg'
base2picture(img_base64,img_save)

🍅4 完整代码

# encoding:utf-8

import requests
import base64

def image_process(img_name,client_id,client_secret):
    request_url = "https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime"
    # 二进制方式打开图片文件
    f = open(img_name, 'rb')
    img = base64.b64encode(f.read())

    params = {"image":img}
    access_token = get_token(client_id,client_secret)
    request_url = request_url + "?access_token=" + access_token
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(request_url, data=params, headers=headers)
    if response:
        print (response.json())
    return response.json()['image']

def get_token(client_id,client_secret):
    # client_id 为官网获取的AK, client_secret 为官网获取的SK
    host = f'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={client_id}&client_secret={client_secret}'
    response = requests.get(host)
    if response:
        print(response.json())
        return response.json()['access_token']
    else:
        print('no response!')

def base2picture(img_base64,img_save):
    imgdata = base64.b64decode(img_base64)
    with open(img_save,'wb') as f:
        f.write(imgdata)


if __name__=='__main__':
    client_id='xxx'
    client_secret='xxx'
    img_name='1.jpg'
    img_base64=image_process(img_name,client_id,client_secret)
    print(img_base64)

    # 或者在浏览器输入 data:image/jpeg;[base64]
    img_save='2.jpg'
    base2picture(img_base64,img_save)

大家都学会了吗?
快去试试吧~
评论 118
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可可卷

不要看到我~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值