Python自制动漫头像~快帮女神制作一个专属头像~

发布于:2022-11-29 ⋅ 阅读:(1076) ⋅ 点赞:(0)

嗨嗨,大家下午好 ~

不知道你们喜不喜欢用动漫头像~

请添加图片描述

但是每次换完头像后总会跟其他人撞头像!
实在没办法,在其他地方存的,别人也能找到,所以干脆一点用Python自制!
做自己的专属头像~

领取源码或者更多其他资料点击这行即可

请添加图片描述

展示效果:

请添加图片描述

一键动漫化:

请添加图片描述

大家肯定想,“这有什么难的,抖音特效一键实现”。但是技术工种的我们怎么能屈服于此,当然要刨根问底,追求溯源。虽然作为技术小白还不能开发这样一个超赞👍的程序,但百度有,我们还是可以先学习一下的嘛。下面我们就开始吧!

一、原理分析

这里,推出百度AI开放平台关于人像动漫化特效的网址:http://suo.im/64FNvD 。

请添加图片描述

在这里我们可以上传自己的图片,进行人像动漫化的操作。

请添加图片描述

细心的小伙伴会发现上面的页面右侧有一个重要的东西:软件操作人像动漫化的接口。这是一个Post请求,发送该请求的网址并不全,需要你提供自己的access_token。同时呢,发送Post请求不仅需要携带Headers,还需要携带一个Params参数,其中Headers是固定的,image参数是图片的Base64编码格式。

这里,推出API文档网址(http://suo.im/64FNZ9),可以帮助我们怎么写代码。

从下图可以看到,API文档中不仅有人像动漫画的操作,还有黑白图像上色、图像风格转变、天空分割等一系列操作,都是很好玩的。

请添加图片描述

这样看来,技术方面实现动漫化需要两个步骤:

获取access_token参数

发送post请求

access_token参数的获取

获取access_token参数,需要使用百度的鉴权认证机制。下面就是鉴权认证机制的网址,在该网页上,详细介绍了我们怎么获取自己的access_token参数。

鉴权认证机制网址:http://suo.im/6rUoTr 。

请添加图片描述

​
1https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官网获取的AK】&client_secret=【官网获取的SK】
 

从中可以看到,为了发送Post请求,需要我们找到自己的API Key和Secret Key,下面我们继续👇

API Key和Secret Key的获取

首先,登陆百度智能云(https://login.bce.baidu.com/),这个网址需要我们扫码登陆,我们按照提示进行登陆即可。

接下来,按照下图的顺序进入人脸识别:

请添加图片描述

依次点击公有云API→应用列表→创建应用:

请添加图片描述

注:可以看到,这里已经有我创建好的应用(如果是第一次创建,直接点击创建应用)。在这里便可找到我们想要的API Key和Secret Key。

下面展示如何创建应用,首先你需要起一个名字(这里都可以,只需要你可以记住),然后在图像增强与特效中选中人像动漫化,如下:

请添加图片描述

创建成功后,直接查看应用列表即可,最终页面如下。

请添加图片描述

点击API列表右边的展开后,可以发现小惊喜,有许多有意思的内容,你都可以琢磨琢磨,甚至我们可以查看某个API的使用次数,有效次数使用完了以后,你就需要付费使用啦。下图也可以看到人像动漫画操作大致也就500次的免费使用次数。

请添加图片描述

二、代码展示

源码.资料.素材.工具(软件.模块)安装教程👉【点击领取】

下面,进入正题!贴心的百度已经将部分代码为大家展示出来了,我们来继续学习:

​
 1import requests
 2import base64
 3
 4# get_access_token()函数是为了获取access_token参数
 5def get_access_token():
 6    url = 'https://aip.baidubce.com/oauth/2.0/token'
 7    data = {
 8        'grant_type': 'client_credentials',  # 固定值   
 9        # client_id 为官网获取的APIKey, client_secret 为官网获取的SecretKey
10        'client_id': 'gIMB...PtqR0D11fz',  # 在开放平台注册后所建应用的API Key,这里属于私密,不做展示
11        'client_secret': '782...vGRKlmwS'  # 所建应用的Secret Key,同上
12    }
13    res = requests.post(url, data=data)
14    res = res.json()
15    access_token = res['access_token']
16    return access_token
17
18
19# 下面的代码就是百度API文档中展示的代码,直接搬过来使用即可
20request_url = "https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime"
21f = open('D:/yiyi.jpg', 'rb')      # 二进制方式打开图片文件
22img = base64.b64encode(f.read())   # 这里是将图像转为base64的格式,这是百度API文档中要求的
23
24# 单纯的人物动漫化,不戴口罩
25params = {"image":img}
26
27#调用函数获取 access_token 
28access_token = get_access_token()
29request_url = request_url + "?access_token=" + get_access_token()
30headers = {'content-type': 'application/x-www-form-urlencoded'}
31response = requests.post(request_url, data=params, headers=headers)
32res = response.json()
33
34# 将这个图像信息写入,得到最终的效果图。
35if response:
36    f = open("动漫图.jpg", 'wb')
37    after_img = res['image']
38    after_img = base64.b64decode(after_img)
39    f.write(after_img)
40    f.close()

请添加图片描述

细心的伙伴会发现,上面的代码进行动漫化时仅设置成普通动漫化,除此之外,在params参数设定这里,如果设置参数type为"anime_mask"和"mask_id",可以生成戴口罩的二次元动漫图。

请添加图片描述

代码片段展示如下:

​python学习交流Q群:770699889 ###
1#人物图像戴口罩,将上面代码params设定这里修改为下面样式
2params = {
3    "image":img,
4    "type":"anime_mask",
5    "mask_id":"5"            #id范围为1-8
6}
 

出图!下图依次展示了id为1-8的mask类型,实在是有趣!

请添加图片描述

好啦,今天的分享到这里就结束了 ~
对文章有问题的,或者有其他关于python的问题,可以在评论区留言或者私信我哦
觉得我分享的文章不错的话,可以关注一下我,或者给文章点赞(/≧▽≦)/

请添加图片描述

本文含有隐藏内容,请 开通VIP 后查看

网站公告


今日签到

点亮在社区的每一天
去签到