Python调用百度智能云API实现人像动漫化实战

沈亦白
沈亦白
发布时间:2026-10-12| 3人浏览过
原创

本文详细介绍如何利用Python调用百度智能云的人像动漫化接口,实现照片转动漫风格的效果。内容涵盖从注册账号、创建应用到获取Access Token的完整鉴权流程,以及通过Base64编码处理图片并保存结果的代码实现。此外,还演示了如何添加口罩特效,为开发者提供清晰的实战参考。

一、目标

此前偶然看到有博主分享过将人像转换为动漫风格的教程,觉得十分有趣,因此决定亲自尝试一下。

本项目的核心目标是利用百度智能云提供的人工智能服务,对上传的图片进行处理,从而实现人像的动漫化效果。

二、准备工作

1. 创建百度智能云账号

2. 配置图像特效应用

3. 开发环境:Python 3.7 及 PyCharm

首先,需要注册一个百度智能云账号,并在控制台创建对应的图像特效应用,以获取必要的API凭证。

三、操作流程

3.1 阅读官方文档

在使用任何不熟悉的技术或工具时,阅读官方文档是至关重要的一步。官方文档通常内容详尽,对每个功能点的描述都非常细致。我们首先来查看相关文档内容。


文档中提供了示例代码,本文选用Python语言进行实现。

3.2 开始实现鉴权

调用该API接口需要进行身份鉴权,即根据官方文档说明获取access_token。那么具体如何进行鉴权操作呢?


import requests
import pprint
def get_access_token(id,secret):
    get_access_token_url='https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id='+id+'&client_secret='+secret
    response=requests.get(get_access_token_url)
    pprint.pprint(response.json())
id='*******************'
secret='******************'
get_access_token(id,secret)

代码中的id和secret对应创建应用时生成的appkey和secretkey。

运行上述代码后,控制台会打印出大量返回结果。查阅官网文档可知,我们实际上只需要提取其中的access_token即可满足后续调用需求。

因此,对前述代码进行修改,以便直接获取access_token。

import requests
def get_access_token(id,secret):
    get_access_token_url='https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id='+id+'&client_secret='+secret
    response=requests.get(get_access_token_url)
    content=response.json()
    access_token=content['access_token']
    print(access_token)
id='*******************'
secret='******************'
get_access_token(id,secret)

3.3 人像动漫化实现

接下来进入核心功能实现阶段。

对代码进行相应修改。

import requests
import pprint
import base64
def get_access_token(id,secret):
    get_access_token_url='https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id='+id+'&client_secret='+secret
    response=requests.get(get_access_token_url)
    content=response.json()
    access_token=content['access_token']
    return access_token

def Animation(img_file,access_token):
    request_url='https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime'
    f=open(img_file,'rb')
    image=base64.b64encode(f.read())
    params = {"image":image}
    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)
    pprint.pprint(response.json())
def main():
    img_file = '1.jpg'#图片地址
    id = '**************************'
    secret = '**************************'
    access_token = get_access_token(id, secret)
    Animation(img_file, access_token)
if __name__ == '__main__':
    main()

执行修改后的代码,可以得到一系列接口返回值。

在这些返回值中,我们主要关注image字段。

提取image字段的值。

再次修改代码以处理该值。

import requests
import pprint
import base64
def get_access_token(id,secret):
    get_access_token_url='https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id='+id+'&client_secret='+secret
    response=requests.get(get_access_token_url)
    content=response.json()
    access_token=content['access_token']
    return access_token

def Animation(img_file,access_token):
    request_url='https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime'
    f=open(img_file,'rb')
    image=base64.b64encode(f.read())
    params = {"image":image}
    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)
    image_content=response.json()
    image=image_content['image']
    print(image)
def main():
    img_file = '1.jpg'#图片地址
    id = '**************************'
    secret = '**************************'
    access_token = get_access_token(id, secret)
    Animation(img_file, access_token)
if __name__ == '__main__':
    main()

此时获取到了一串Base64编码的图片数据,这离得到我们想要的动漫化图片结果已经很近了。

 with open('result.jpg','wb') as f:
        f.write(base64.b64decode(image))

将处理后的图片保存到本地文件。

查看处理前后的图片对比效果。

嗯……效果看起来还可以,虽然不算完美,但作为尝试已经不错,哈哈。

四、完整代码如下

import requests
import pprint
import base64
def get_access_token(id,secret):
    get_access_token_url='https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id='+id+'&client_secret='+secret
    response=requests.get(get_access_token_url)
    content=response.json()
    access_token=content['access_token']
    return access_token

def Animation(img_file,access_token):
    request_url='https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime'
    f=open(img_file,'rb')
    image=base64.b64encode(f.read())
    params = {"image":image}
    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)
    image_content=response.json()
    image=image_content['image']
    with open('result.jpg','wb') as f:
        f.write(base64.b64decode(image))  
def main():
    img_file = '1.jpg'#图片地址
    id = '**************************'
    secret = '**************************'
    access_token = get_access_token(id, secret)
    Animation(img_file, access_token)
if __name__ == '__main__':
    main()

五、还能这么玩?

功能很强大,甚至支持添加口罩特效,我们来试一下。

修改代码以支持口罩特效参数。

params = 
{
"image":image,"type":'anime_mask',"mask_id":1
}
#mask_id 1-8的整数,就用个1吧

查看添加口罩后的最终效果。

效果相当不错。

至此,关于Python调用百度智能云实现人像动漫化的实战教程就介绍到这里。更多关于Python人像动漫化的内容,欢迎搜索本站历史文章或继续浏览后续相关文章,希望大家今后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。