Анимация аватара Python, приходите и создавайте свой собственный анимационный аватар

задняя часть

Это первый день моего участия в ноябрьском испытании обновлений, подробности о мероприятии:Вызов последнего обновления 2021 г.

Введение

Много раз мы беспокоимся об аватарах, и у такой соленой рыбы, как я, которая не меняла аватары десять тысяч лет, никогда не было таких неприятностей. Тем не менее, очень интересно иметь персонализированный аватар, потому что этот аватар для выбора козявки соответствует моему темпераменту, за исключением пункта выбора козявки, так что этого достаточно. Но я все же намерен поделиться с вами этой маленькой хитростью.

2. Отображение эффекта

После многих тестов я обнаружил, что генерация аватарок девушек неплохая, и лучше всего иметь фронтальные фото. Генерация аниме-аватаров мальчиков немного неудовлетворительна. Вы можете попробовать сами. Давайте посмотрим на две картинки, которые я сгенерировал с большой девочкой в ​​деревне. Давайте посмотрим на первую:在这里插入图片描述Далее идет второй, я использовал изображение из Spice Girls снизу:在这里插入图片描述С двумя эффектами все в порядке, главное, что голова персонажа анимирована, а остальные части просто тяготеют к стилю аниме. Но я думаю, что все еще хорошо.

3. Реализация

Для таких людей, как я, которые не обладают базовыми навыками, единственный способ добиться этого — вызвать API. Я использую API Baidu, мы можем ввестиОткрытая платформа AI BaiduРегистрация учетной записи, конкретный процесс обсуждаться не будет. После авторизации мы видим следующий интерфейс:在这里插入图片描述Мы нажимаем Open Capability > Image Technology > Portrait Animation, затем нажимаем Use Now и создаем приложение. В приложении видим три параметраAppID,API KeyиSecret KeyТри параметра, мы можем начать программирование, запомнив эти три параметра.

Для реализации портретной анимации необходимо два интерфейса, один используется для получения access_token, а другой — для получения анимационного аватара.Давайте получим access_token:

import requests
def get_access_token():
	# 获取token的API
	url = 'https://aip.baidubce.com/oauth/2.0/token'
	# 获取access_token需要的参数
	params = {
		# 固定参数
        'grant_type':'client_credentials',
        # 必选参数,传入你的API Key
        'client_id':'你的API Key',
        # 必选参数,传入你的Secret Key
        'client_secret':'你的Secret Key'
    }
    # 发送请求,获取响应数据
    response = requests.post(url, params)
    # 将响应的数据转成字典类型,然后取出access_token
    access_token = eval(response.text)['access_token']
    # 将access_token返回
    return access_token

Здесь мы используем модуль запросов, Если он не установлен, вы можете выполнить следующий оператор в командной строке:

pip install requests

Далее наша анимация аватара:

import base64
import requests
def img2Cartoon(img):
	# 头像动漫化的API
    url = 'https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime'
    # 以二进制的方式读取原始图片
    origin_im = open(img, 'rb')
    # 将图片进行base64编码
    img = base64.b64encode(origin_im .read())
    # 关闭原图片
    origin_im.close()

	# 请求的headers信息,固定写法
    headers = {'content-type':'application/x-www-form-urlencoded'}
	
	# 请求的参数
    params = {
    	# 开始获取的access_token
        'access_token':get_access_token(),
        # 图片的base64编码
        'image':img,
    }
    # 发送请求
    response = requests.post(url, data=params, headers=headers)
    # 对响应结果进行处理
    if response:
    	# 打开一个文件
        f = open('result.jpg', 'wb')
        # 获取动漫头像
        anime = response.json()['image']
        # 对返回的头像进行解码
        anime = base64.b64decode(anime)
        # 将头像写入文件当中
        f.write(anime)
        f.close()

Нам нужно только вызвать функцию img2Cartoon в main, чтобы завершить генерацию аниме-аватара.Полный код выглядит следующим образом:

import base64
import requests

def get_access_token():
	# 获取token的API
	url = 'https://aip.baidubce.com/oauth/2.0/token'
	# 获取access_token需要的参数
	params = {
		# 固定参数
        'grant_type':'client_credentials',
        # 必选参数,传入你的API Key
        'client_id':'你的API Key',
        # 必选参数,传入你的Secret Key
        'client_secret':'你的Secret Key'
    }
    # 发送请求,获取响应数据
    response = requests.post(url, params)
    # 将响应的数据转成字典类型,然后取出access_token
    access_token = eval(response.text)['access_token']
    # 将access_token返回
    return access_token

def img2Cartoon(img):
	# 头像动漫化的API
    url = 'https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime'
    # 以二进制的方式读取原始图片
    origin_im = open(img, 'rb')
    # 将图片进行base64编码
    img = base64.b64encode(origin_im .read())
    # 关闭原图片
    origin_im.close()

	# 请求的headers信息,固定写法
    headers = {'content-type':'application/x-www-form-urlencoded'}
	
	# 请求的参数
    params = {
    	# 开始获取的access_token
        'access_token':get_access_token(),
        # 图片的base64编码
        'image':img,
    }
    # 发送请求
    response = requests.post(url, data=params, headers=headers)
    # 对响应结果进行处理
    if response:
    	# 打开一个文件
        f = open('result.jpg', 'wb')
        # 获取动漫头像
        anime = response.json()['image']
        # 对返回的头像进行解码
        anime = base64.b64decode(anime)
        # 将头像写入文件当中
        f.write(anime)
        f.close()
        
if __name__ == '__main__':
    img2Cartoon('origin.jpg')

Таким образом, мы реализовали операцию анимации аватаров, которая очень проста, потому что основная работа выполняется программистами Baidu, и вы можете использовать свои собственные фотографии для создания персонализированных аватаров. Если это слишком уродливо, не возвращайся и не ругай меня.