其他
“人像动漫化”—Python实现抖音特效
本文作者:王子一,中南财经政法大学金融学院
本文编辑:石 艳
技术总编:陈 鼎
爬虫俱乐部云端课程
新年新气象,一键动漫化玩转你的微信头像,放图!
大家肯定想,“这有什么难的,抖音特效一键实现”。但是技术工种的我们怎么能屈服于此,当然要刨根问底,追求溯源。虽然作为技术小白还不能开发这样一个超赞👍的程序,但百度有,我们还是可以先学习一下的嘛。下面我们就开始吧!
一、原理分析
这里,推出百度AI开放平台关于人像动漫化特效的网址:http://suo.im/64FNvD 。
获取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 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",可以生成戴口罩的二次元动漫图。
代码片段展示如下:
1#人物图像戴口罩,将上面代码params设定这里修改为下面样式
2params = {
3 "image":img,
4 "type":"anime_mask",
5 "mask_id":"5" #id范围为1-8
6}
出图!下图依次展示了id为1-8的mask类型,实在是有趣!各位亲,上图这么多款mask,你pick哪一类型呢?
以上就是本期的全部内容,动动你的手指,你的微信头像也可以换起来啦。如果你喜欢,麻烦点赞转发关注,一键三连噢~
《唐探3》做错了什么?|来自150万字影评的证据
爬虫俱乐部年度总结|《请回答2020》
模糊匹配我只用这一招!
利用tushare获取财务数据
爬虫实战|Selenium爬取微信公众号标题与链接
强大的正则表达式
自动群发邮件(二)——附带附件
自动群发邮件--email和smtplib基本模块的使用
计算工作日的小能手——workdays
Seminar | 企业错报与银行贷款合同
小贴士:Markdown的基本语法
听说相貌也能量化 | 调用百度人脸检测API实现颜值打分
列出指定属性的变量|findname命令比ds命令
Json文件好帮手——JsonPath
pyecharts绘图——河流图展示
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。