Какое же счастье, что теперь можно не просить вечно отказывающего знакомого дизайнера нарисовать какую-то нужную картинку, а воспользоваться нейросетями.
Но заходить на сайт и подготавливать изображения, которые будут использоваться в каких либо материалах - это одно, а вот интегрировать генерацию изображений в какие-то свои сервисы путем одного скрипта - это совсем другой подход.
Представляем вашему вниманию API от нейросети Кандински (Kandinsky).
Собственно её документация достаточно подробно описана и предоставляет готовый код.
Но в этом коде есть несколько незавершенных моментов, которые в данной статье я решу и отдам вам в пользование.
Регистрация и получение ключа
Давайте начнем с того, что в первую очередь вам необходимо зарегистрироваться на платформе Fusion Brain.
Регистрация достаточно простая, её описывать нет смысла.
После того как зарегистрируйтесь и войдете в учетную запись перед вами откроется редактор.
Здесь можно сгенерировать много разных картинок, но мы сюда зашли не для этого.
Нам необходимо сделать так, чтобы наш код мог генерировать картинки. Для этого нам необходимо получить ключ.
Нажав на соответствующую кнопку, ты попадешь в раздел по созданию секретных ключей.
Нажав на кнопку “Добавить ключ” ты получишь следующее окно:
Скопировав секретный ключ сразу вставь его в тот файл, где далее будешь писать код, т.к. больше его будет получить нельзя, придется генерировать новый.
В данной статье реализация будет на языке Python. Если хотите узнать, как реализовать на JavaScript, то читайте статью до конца.
А API ключ можно получить в любой момент.
Программный код
Теперь переходите на страницу документации и пролистайте до конца страницы, где представлен полный код.
Документация
Копируйте его и вставьте в свой файл.
import json
import time
import requests
class Text2ImageAPI:
def __init__(self, url, api_key, secret_key):
self.URL = url
self.AUTH_HEADERS = {
'X-Key': f'Key {api_key}',
'X-Secret': f'Secret {secret_key}',
}
def get_model(self):
response = requests.get(self.URL + 'key/api/v1/models',
headers=self.AUTH_HEADERS)
data = response.json()
return data[0]['id']
def generate(self, prompt, model, images=1, width=1024, height=1024):
params = {
"type": "GENERATE",
"numImages": images,
"width": width,
"height": height,
"generateParams": {
"query": f"{prompt}"
}
}
data = {
'model_id': (None, model),
'params': (None, json.dumps(params), 'application/json')
}
response = requests.post(self.URL + 'key/api/v1/text2image/run',
headers=self.AUTH_HEADERS, files=data)
data = response.json()
return data['uuid']
def check_generation(self, request_id, attempts=10, delay=10):
while attempts > 0:
response = requests.get(self.URL + 'key/api/v1/text2image/status/' +
request_id, headers=self.AUTH_HEADERS)
data = response.json()
if data['status'] == 'DONE':
return data['images']
attempts -= 1
time.sleep(delay)
if __name__ == '__main__':
api = Text2ImageAPI('https://api-key.fusionbrain.ai/', 'YOUR_API_KEY', 'YOUR_SECRET_KEY')
model_id = api.get_model()
uuid = api.generate("Sun in sky", model_id)
images = api.check_generation(uuid)
print(images)
Теперь переходи в эту строчку кода Text2ImageAPI('https://api-key.fusionbrain.ai/', 'YOUR_API_KEY', 'YOUR_SECRET_KEY') и вставь свой секретный ключ и API ключ, который ты можешь скопировать с той страницы, где создавал ключ.
Можешь запустить и увидеть, что в консоли ты получаешь набор символов, это картинка, но только не так ты её представлял.
Это первый нюанс, про который я говорил вначале статьи.
Преобразования из base64
Все дело в том, что сервис возвращает изображение закодированное в base64.
Наша задача его раскодировать, привести в бинарный вид и сохранить в файл.
Благо в Python есть библиотека, которая так и называется base64.
Подключим её вначале файла.
Теперь прокручиваемся в ту строчку, где это текст выводится, а за это отвечает команда print в конце кода.
print(images)
Давай вместо этого print напишем код, который будет преобразовывать код и сохранять в файл.
# Здесь image_base64 - это строка с данными изображения в формате base64
image_base64 = images[0] # Вставьте вашу строку base64 сюда
# Декодируем строку base64 в бинарные данные
image_data = base64.b64decode(image_base64)
# Открываем файл для записи бинарных данных изображения
with open("image.jpg", "wb") as file:
file.write(image_data)
Теперь запускай и смотри результат. У тебя рядом с программным файлом появился файл image.jpg.
Вот и результат.
Кстати, а ты не забудешь в итоге поставить лайк и написать комментарий к этой статье?
Вот и результат.
Работа с параметрами
А что же он нарисовал?
Нарисовал он солнце в небе.
Это можно понять из запроса, который доступен в этой строке.
Именно здесь необходимо писать текст, который будет генерироваться в изображение.
Можешь поэксперементировать разные варианты.
Но теперь мы подходим ко второму нюансу - это стиль изображений, в котором происходит генерация.
Он стоит по умолчанию, а API предоставляет 4 разных стиля.
Давайте это исправим. Сделаем так, чтобы мы могли указывать порядковый номер стиля, а он в свою очередь передавался в запросе.
В первую очередь определим список с названиями стилей и вставим его в метод generate, который отвечает за формирование запроса.
styles = [“KANDINSKY”, “UHD”, “ANIME”, “DEFAULT”]
Поместим код в метод generate и пропишем в методе дополнительный аргумент style, в который будет передаваться номер при вызове, но установим значение по умолчанию 3, т.е. стиль DEFAULT.
А также добавим этот параметр в запросы.
Теперь остается при вызове данного метода указывать номер стиля. Давай попробуем тот же запрос только в стиле аниме - это номер 2 в нашем списке стилей.
Запускай и проверяй результат.
Вот и анимешное солнце сгенерировано. Теперь ты можешь экспериментировать со стилями.
Можно еще добавить негативные запросы, которые не должны появляться, но я думаю ты уже понял принцип, здесь все просто.
Присоединяйся к моему каналу в Дзене, чтобы быть в курсе всех интересных нейросетей и работы с ними!
Статья, как сделать это на JavaScript. Там есть свои особенности решения: