查看原文
其他

“人像动漫化”—Python实现抖音特效

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:王子一,中南财经政法大学金融学院

本文编辑:石  艳

技术总编:陈  鼎

爬虫俱乐部云端课程

  爬虫俱乐部于2020年暑期在线上举办的Stata与Python编程技术训练营和Stata数据分析法律与制度专题训练营已经圆满结束啦~应广大学员需求,我们的课程现已在腾讯课堂全面上线,且继续提供答疑服务。现在关注公众号并在朋友圈转发推文《来腾讯课堂学Stata和Python啦》或《8月Stata数据分析法律与制度专场来啦!》,即可获得600元课程优惠券,集赞50个再领200元课程优惠券!(截图发至本公众号后台领取)原价2400元的课程,现在只要1600元!

新年新气象,一键动漫化玩转你的微信头像,放图!


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





一、原理分析



这里,推出百度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",可以生成戴口罩的二次元动漫图。



代码片段展示如下:


1#人物图像戴口罩,将上面代码params设定这里修改为下面样式
2params = {
3    "image":img,
4    "type":"anime_mask",
5    "mask_id":"5"            #id范围为1-8
6}
出图!下图依次展示了id为1-8的mask类型,实在是有趣!

位亲,上图这么多款mask,你pick哪一类型呢?

以上就是本期的全部内容,动动你的手指,你的微信头像也可以换起来啦。如果你喜欢,麻烦点赞转发关注,一键三连噢~





对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
跨框架合并数据|frlink的用法,你get到了吗

《唐探3》做错了什么?|来自150万字影评的证据

爬虫俱乐部年度总结|《请回答2020》

春节假期临近,来爬爬豆瓣看看有什么好剧
putdocx生成Word文档so easy!

模糊匹配我只用这一招!

利用tushare获取财务数据

爬虫实战|Selenium爬取微信公众号标题与链接

轻轻一点,就知有没有|rqrs命令介绍

强大的正则表达式

自动群发邮件(二)——附带附件

自动群发邮件--email和smtplib基本模块的使用

批量处理变量名和标签的小方法

计算工作日的小能手——workdays

Seminar | 企业错报与银行贷款合同

Seminar | 共同基金行业的性别歧视
Seminar | 来自女儿的塑造:高管、女性社会化与企业社会责任

小贴士:Markdown的基本语法

听说相貌也能量化 | 调用百度人脸检测API实现颜值打分

列出指定属性的变量|findname命令比ds命令

新一代的标签转码小能手
【爬虫实战】亚马逊网站Top100畅销书爬取

Json文件好帮手——JsonPath

数据转置pro之sxpose2
文件"搬家"小助手:mvfiles

pyecharts绘图——河流图展示

关于我们


微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存