Python llama a la API de Baidu para la animación de retratos

1. Sobre el autor

Wu Yanzi , mujer, Escuela de Información Electrónica, Universidad Politécnica de Xi'an, estudiante de posgrado de 2021, Grupo
de Investigación de Inteligencia Artificial de Zhang Hongwei Dirección de investigación: Reconocimiento de patrones e inteligencia artificial
Correo electrónico: [email protected]

2. Llame a la API de Baidu para realizar la introducción de la animación de retratos

2.1 Descripción de la interfaz API

Usando la red de generación de confrontación líder en el mundo, combinada con detección de rostros, segmentación de cabello, segmentación de retratos y otras tecnologías, imágenes de animación bidimensionales hechas a medida de miles de personas y miles de rostros para usuarios, y puede generar retratos de animación bidimensional usando máscaras a través de la configuración de parámetros.

2.2 Descripción de la solicitud

Método HTTP: POST. HTTP es la abreviatura de Hyper Text Transfer Protocol, que es un protocolo de transferencia utilizado para transferir hipertexto desde el servidor al navegador local. Este experimento adopta el método de solicitud POST.
URL de solicitud: https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime

2.3 Descripción de parámetros

inserte la descripción de la imagen aquí

3. Procedimiento experimental

3.1 Paquetes instalados

Instale los siguientes dos comandos en la terminal e importe las bibliotecas requeridas para el experimento:
solicitudes: una biblioteca HTTP fácil de usar implementada por python.

pip install requests

base64: un método de codificación que convierte los caracteres invisibles en caracteres visibles. Es un método de codificación de imágenes requerido por la API de Baidu.

pip install pybase64

3.2 Proceso experimental

1. Cómo obtener la API de Baidu de forma gratuita
Puede obtener su propia clave de API y clave secreta siguiendo los pasos a continuación. inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

3.3 Código experimental

Primero importe la biblioteca requerida para el experimento, y luego use la clave API obtenida para acceder a la dirección de animación de retrato proporcionada por la API de Baidu para obtener un token de acceso.Después de obtener el token de acceso, puede llamar al módulo de animación de retrato, leer la imagen de entrada y convertirlo en una imagen después de la animación.

import requests
import base64

# 这个函数的操作是为了获取access_token参数
def get_access_token():
    url = 'https://aip.baidubce.com/oauth/2.0/token'       #访问人像动画漫画地址,以得到访问令牌
    data = {
    
    
        'grant_type': 'client_credentials',  # 固定值
        'client_id': '***',  # 在开放平台注册后所建应用的API Key
        'client_secret': '***'  # 所建应用的Secret Key
    }
    res = requests.post(url, data=data)
    res = res.json()

    access_token = res['access_token']        #获取访问令牌
    return access_token                       #百度返回的读取令牌


# 下面的代码就是API文档中的代码,直接搬过来使用即可。
request_url = "https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime"
f = open('输入图片.jpg', 'rb')  # 二进制方式打开图片文件

img = base64.b64encode(f.read())  # 图像转为base64的格式,这是百度API文档中要求的

params = {
    
    "image": img}
access_token = '24.11731cd1f0...9f9b3a930f917f3681b.2592000.1596894747.282335-21221990'        #令牌地址
request_url = request_url + "?access_token=" + get_access_token()
headers = {
    
    'content-type': 'application/x-www-form-urlencoded'}      #返回的类型
response = requests.post(request_url, data=params, headers=headers)
res = response.json()          #返回的处理后的数据
# 前面我们讲述了这个请求返回的是一个字典,其中一个键就是image,代表的是处理后的图像信息。
# 将这个图像信息写入,得到最终的效果图。
if res:
    f = open("生成的动漫图.jpg", 'wb')
    after_img = res['image']                         
    after_img = base64.b64decode(after_img)        #将返回的图像数据解码回图片形式
    f.write(after_img)           
    f.close()

En el código anterior, solo se usa un parámetro: imagen En este momento, el programa no tiene otros requisitos, excepto convertir la imagen de entrada en la imagen de animación correspondiente. Como se puede ver en los parámetros proporcionados en la Tabla 2.3, se puede configurar si la imagen de salida lleva una máscara y el tipo de máscara que se lleva, y es necesario cambiar el programa de parámetros correspondiente:

params = {
    
    "image": img, "type": 'anime_mask', "mask_id": "6"}
# 注意:这里就是多了type参数和mask_id参数,都是在源文档中可以查看的参数。
# type的值为anime或者anime_mask。前者生成二次元动漫图,后者生成戴口罩的二次元动漫人像。
# 18之间的整数,用于指定所使用的口罩的编码。大家可以自行下去尝试。

3.4 Resultados de ejecución

Se puede observar que los resultados de ejecución de llamar a la API de Baidu para realizar la animación de retratos en imágenes de una sola persona y de varias personas son relativamente buenos.
inserte la descripción de la imagen aquí
Se puede observar que cuanto mayor sea el ángulo de inclinación, peor será el resultado de la animación.
inserte la descripción de la imagen aquí

Referirse a

1. Usando Python para realizar el efecto especial de "animación de retrato" en Douyin, resulta que es muy simple .

Supongo que te gusta

Origin blog.csdn.net/m0_37758063/article/details/123645864
Recomendado
Clasificación