Создать картинку из текста с помощью нейросети
iOS-developer, ИТ-переводчица, пишу статьи и гайды. Из этой статьи вы узнаете, как внедрить OpenAI API в свои приложения на Python для создания изображений из текстовых подсказок. Данная статья является переводом. Автор: Martin Breuss. Ссылка на оригинал. Опишите любое изображение, а затем позвольте компьютеру создать его за вас. То, что еще несколько лет назад казалось футуристическим, стало реальностью благодаря достижениям в области нейронных сетей и моделям скрытой диффузии (LDM). DALL·E от OpenAI произвел фурор благодаря удивительной способности к генерации реалистичных изображений. OpenAI разрешил доступ к DALL·E через свой API, что означает, что вы можете использовать его функциональные возможности в своих приложениях на Python. В этом туториале вы: Вам понадобится небольшой опыт работы с Python, JSON и операциями с файлами, чтобы разобраться в этом туториале. Вы также можете изучить эти темы в процессе чтения – вы найдете соответствующие ссылки по всему тексту. Если вы еще не пользовались веб-интерфейсом пользователя (UI) DALL·E, то попробуйте поработать с ним, прежде чем вернуться к изучению того, как программно использовать его с Python. Исходный код Кликните здесь, чтобы загрузить бесплатный исходный код, который вы будете использовать для создания потрясающих изображений с помощью DALL·E 2 и OpenAI API. Если вы видели, на что способен DALL·E, и вам не терпится внедрить его функциональные возможности в ваши приложения на Python, то вы обратились по адресу! В первом разделе вы узнаете, что вам нужно сделать, чтобы начать использовать возможности создания образов DALL·E в вашем коде. Убедитесь, что вы используете Python версии 3.7.1 или выше, создайте и активируйте виртуальную среду и установите библиотеку OpenAI Python: Windows Linux + macOS Пакет openai дает вам доступ к полной версии API OpenAI. В этом туториале вы сосредоточитесь на классе Image, который можно использовать для взаимодействия с DALL·E при создании и редактировании изображений из текстовых подсказок. Вам нужен ключ API для совершения успешных вызовов. Зарегистрируйтесь в OpenAI API и создайте новый ключ API, щелкнув на раскрывающееся меню в своем профиле и выбрав View API keys: Данное изображение и все последующие взяты тут. На этой странице вы можете управлять своими ключами API, которые позволяют вам получить доступ к услуге, которую OpenAI предлагает через их API. Вы можете создавать и удалять секретные ключи. Нажмите на Create new secret key, чтобы создать новый ключ API, и скопируйте значение, показанное во всплывающем окне: Всегда держите этот ключ в секрете! Скопируйте значение этого ключа, чтобы позже использовать его в своем проекте. Вы увидите значение ключа только один раз. Быстрый способ сохранить ключ API и сделать его доступным для скриптов Python — сохранить его как переменную среды. Для своей операционной системы выполните следующую команду: Windows Linux + macOS С помощью этой команды вы делаете ключ API доступным в переменной среды Вы можете назвать свою переменную как угодно, но если вы используете имя OpenAI назначает использование вашего API через уникальные значения ключей, поэтому убедитесь, что ваш API-ключ доступен только для вас. Компания рассчитывает стоимость запросов к API изображений для каждого изображения в зависимости от разрешения выходного изображения: Если вы недавно зарегистрировались в API OpenAI, вы получите бесплатную пробную версию, которая позволит вам использовать бесплатный кредит на сумму 18 долларов США в течение первых трех месяцев. Это позволит вам сгенерировать множество изображений, если вы просто хотите поработать с данной темой! Однако имейте в виду, что это единый бюджет на бесплатную пробную версию для всех сервисов API OpenAI, поэтому вы можете не захотеть тратить все на создание потрясающих изображений. Также обратите внимание, что вы не можете использовать кредиты из веб-интерфейса DALL·E для вызовов API. Примечание. OpenAI API-сервисы быстро меняются. Вы должны проверить их веб-страницу для получения актуальной информации о ценах и предложениях. Теперь, когда вопросы с ценой и прочим решены, а ваш ключ API надежно сохранен, вы готовы создавать изображения из текстовых подсказок. Проверьте, что все настроено и корректно работает, используя библиотеку openai через интерфейс командной строки: Эта команда отправит запрос через API и создаст одно изображение из текстовой подсказки «компьютер вэйпорвэйв». В результате вы получите ответ JSON, содержащий URL-адрес, указывающий на только что созданное изображение: Нажмите на свой URL-адрес или скопируйте и вставьте его в браузер, чтобы просмотреть изображение. Вот изображение, которое DALL·E придумал по моему запросу: «компьютер вэйпорвэйв» Ваше изображение будет выглядеть иначе. Это связано с тем, что модель создает каждое из этих изображений только при отправке запроса. Примечание. URL-адрес с созданным вами изображением действителен только в течение одного часа, поэтому обязательно сохраните изображение на свой компьютер, если оно вам потребуется. API также следует той же политике контента, что и веб-интерфейс. Если вы отправляете текстовые подсказки, противоречащие политике контента, вы не получите результата и можете быть заблокированы после повторных нарушений. Теперь, когда вы убедились, что все настроено правильно, и получили представление о том, что можно делать с OpenAI API, мы перейдем к тому, как интегрировать его в скрипт Python. Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека data scientist’а» Интересно, перейти к каналу Замечательно, что вы можете создать изображение из интерфейса командной строки (CLI), но было бы еще лучше добавить эту функцию в ваши приложения на Python. Есть множество интересных вещей, которые вы могли бы создать! Примечание. Обратите внимание, что API изображений находится в общедоступной бета-версии. Это означает, что API все еще будет развиваться, может значительно измениться и, следовательно, может быть неидеальным для коммерческих приложений. В настоящее время также применяется ограничение скорости: десять изображений в минуту и двадцать пять изображений в пять минут. Откройте свой любимый редактор кода и напишите скрипт, который вы будете использовать для создания изображения из текстовой подсказки точно так же, как раньше вы использовали командную строку: Как и раньше, этот код отправляет аутентифицированный запрос через API, который генерирует одно изображение на основе текста в PROMPT. Обратите внимание, что этот код добавляет некоторые настройки, которые помогут вам расширить функциональные возможности скрипта: Вы также хотите получить URL-адрес для просмотра сгенерированного изображения в Интернете. Для этого вы просматриваете ответ JSON на ключ Когда вы запустите этот скрипт, вы получите вывод, аналогичный предыдущему, но теперь вы не увидите весь ответ JSON, а только URL-адрес: Кликните на ссылку или вставьте ее в адресную строку браузера, чтобы просмотреть сгенерированное изображение. Ваше изображение снова будет выглядеть по-другому, но вы должны увидеть изображение, похожее на текстовое описание, которое вы использовали в PROMPT: «Эко-френдли компьютер из 90-х в стиле вэйпорвэйв» Вы можете заметить, что это изображение намного меньше, чем то, которое вы создали с помощью вызова CLI. Это потому, что вы запросили у API изображение размером 256×256 пикселей с помощью параметра Если вы хотите продолжить работу с сгенерированным изображением в своем скрипте Python, вероятно, лучше пропустить URL-адрес и вместо этого получить прямой доступ к данным изображения: API позволяет переключать формат ответа с URL-адреса на данные изображения в кодировке Base64. В строке 15 вы устанавливаете значение response_format как Хотя ответ JSON, который вы получаете после применения этого изменения, выглядит так же, как и раньше, ключ словаря для доступа к данным изображения теперь Если вы запустите скрипт с этими настройками, то вы получите фактические данные сгенерированного изображения. Но пока не запускайте скрипт, потому что данные изображения будут потеряны сразу после запуска скрипта, и вы никогда не увидите изображение! Чтобы избежать потери идеального изображения, вы можете хранить ответы JSON в файле, а не выводить их на терминал: С помощью нескольких дополнительных строк кода вы добавили обработку файлов в свой скрипт Python, используя Благодаря этим дополнениям вы теперь можете запускать свой скрипт и создавать изображения, а данные изображения будут храниться в специальном файле в вашем каталоге данных. Вы запустили скрипт и проверили сгенерированный файл JSON? Итак, где та прекрасная картинка, которая является лучшим изображением, когда-либо созданным DALL·E? Прямо здесь, только в настоящее время изображение представлено в виде битов в кодировке Base64. В следующем разделе вы узнаете, как преобразовать данные изображения в кодировке Base64 в файл PNG. Вы только что сохранили изображение PNG в виде строки в кодировке Base64 в файле JSON. Это правильное решение, потому что это означает, что ваше изображение не потеряется в интернете через час, как если бы вы продолжали генерировать URL-адреса с помощью вызовов API. Однако вы не сможете просмотреть свое изображение, если не научитесь декодировать данные. К счастью, для этого не требуется большого количества кода на Python, поэтому создайте новый файл скрипта для выполнения этого преобразования: Скрипт convert.py будет читать файл JSON с именем файла, которое вы определили в Затем скрипт извлекает строку в кодировке Base64 из данных JSON, декодирует ее и сохраняет полученные данные изображения в виде файла PNG в каталоге. Python даже создаст для вас этот каталог, если это необходимо. Обратите внимание, что этот скрипт также будет работать, если вы загружаете более одного изображения за раз. Цикл for декодирует каждое изображение и сохраняет его как новый файл. Примечание. Вы можете создавать файлы JSON с данными нескольких изображений в кодировке Base64, запустив create.py после передачи значения больше, чем 1, для n-параметра. Большая часть кода в этом скрипте предназначена для чтения и записи файлов из нужных папок и в них. Настоящая звезда — это После запуска скрипта вы можете перейти во вновь созданную структуру папок и открыть файл PNG, чтобы наконец увидеть идеально сгенерированное изображение, которого вы так долго ждали: «Эко-френдли компьютер из 90-х в стиле вэйпорвэйв» Однако если полученное изображение похоже на то, что вы ищете, но не совсем – вы можете сделать еще один вызов API, где вы передадите свое изображение в качестве входных данных и создадите несколько его вариаций. Если у вас есть изображение — созданное машиной или нет — похожее на то, что вы ищете, но не совсем отвечающее требованиям, вы можете создать его дополнительные варианты, используя модель скрытой диффузии OpenAI DALL·E. На основе кода, который вы написали ранее в этом туториале, вы можете создать новый файл vary.py: В этом скрипте вы отправляете данные изображения в кодировке Base64 из предыдущего ответа JSON в API изображений и запрашиваете три варианта изображения. Вы сохраняете данные всех трех изображений в новом файле JSON в вашем каталоге данных: Если вы посмотрите в свой responses/каталог, то увидите новый файл JSON, имя которого начинается с Примечание. Вам не нужно использовать данные изображения в кодировке Base64 в качестве источника. Вместо этого вы можете открыть квадратный файл PNG размером не более четырех мегабайт в двоичном режиме и передать данные изображения следующим образом в image: Вы также можете ознакомиться с официальной документации API по вариантам изображений. Однако если вы планируете интегрировать эту функциональность в приложение на Python, то, возможно, вы захотите отказаться от сохранения PNG-файла только для того, чтобы позже загрузить его снова. Поэтому может быть полезно знать, как обрабатывать данные изображения, если они не получены непосредственно при чтении файла изображения. Как выглядят ваши варианты изображений? Возможно, один из них лучше всего подходит для того, что вы искали: Три вариации «Эко-френдли компьютер из 90-х в стиле вэйпорвэйв» Если вам нравится одно из изображений, но оно все еще не совсем то, что вы ищете, то вы можете адаптировать Мечтать об экологически чистых компьютерах с отличными AESTHETICS — это весело, но еще лучше создавать эти образы с помощью Python и OpenAI Images API! В этом уроке вы узнали, как: Самое главное, вы получили практический опыт включения API-вызовов DALL·E в свои скрипты Python, что позволяет вам привносить потрясающие возможности создания изображений в свои собственные приложения. API генерации изображений OpenAI имеет еще одну функцию, которую вы можете изучить далее. С помощью аналогичного вызова API вы можете редактировать части своего изображения, тем самым реализуя функции закрашивания и перекрашивания из ваших скриптов Python. Найдите скрипт, который вызывается edit.py в предоставленных примерах кода: Исходный код: щелкните здесь, чтобы загрузить бесплатный исходный код, который вы будете использовать для создания потрясающих изображений с помощью DALL·E 2 и OpenAI API. Возможно, вы захотите выполнить дальнейшую постобработку ваших изображений с помощью Python. Для этого вы можете прочитать об обработке изображений с помощью pillow . Чтобы улучшить обработку и организацию кода, который вы написали в этом руководстве, вы можете заменить константы скрипта записями в файле настроек TOML. В качестве альтернативы вы можете создать интерфейс командной строки с argparse, который позволит вам передавать переменные непосредственно из вашего CLI. Возможно, вам будет интересно углубиться в модели скрытой диффузии. В этом руководстве вы научились взаимодействовать с моделью через API, но, чтобы узнать больше о логике, обеспечивающей эту функциональность, вы можете попытаться настроить ее на своем компьютере. Однако если вы хотите запустить DALL·E на своем локальном компьютере, вам не повезло, поскольку OpenAI не сделала эту модель общедоступной. Но есть и другие модели скрытой диффузии, которые дают такие же ошеломляющие результаты. В качестве следующего шага вы можете установить проект под названием Stable Diffusion локально, изучить кодовую базу и использовать ее для создания изображений без каких-либо ограничений содержимого. Или вы можете просто продолжать создавать красивые и странные изображения с помощью скриптов Python, DALL·E и API OpenAI! Какую интересную текстовую подсказку вы пробовали? Какой странный или красивый образ создал для вас DALL·E? Поделитесь своим опытом в комментариях ниже и продолжайте мечтать! *** Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека питониста» Интересно, перейти к каналу Galina Iaroshenko
Требования к установке
Установите библиотеку OpenAI Python
PS> python --version Python 3.11.0 PS> python -m venv venv PS> .venvScriptsactivate (venv) PS> python -m pip install openai
$ python --version Python 3.11.0 $ python -m venv venv $ source venv/bin/activate (venv) $ python -m pip install openai
Получите ключ API OpenAI
Сохраните свой ключ API в качестве переменной среды
(venv) PS> $ENV:OPENAI_API_KEY = "<your-key-value-here>"
(venv) $ export OPENAI_API_KEY="<your-key-value-here>"
OPENAI_API_KEY
в текущем сеансе терминала. Имейте в виду, что вы потеряете его, если закроете терминал.OPENAI_API_KEY
, предложенное в документации OpenAI, вы сможете использовать предоставленные примеры кода без необходимости выполнять какую-либо дополнительную настройку. Ознакомьтесь с ценами на DALL·E и на другие продукты OpenAI API
Разрешение
Цена за изображение
256×256
0,016 доллара США
512×512
0,018 доллара США
1024×1024
0,020 доллара США
Создайте изображение из текстовой подсказки с помощью DALL·E от OpenAI
(venv) $ openai api image.create -p "a vaporwave computer"
{ "created": 1668073562, "data": [ { "url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org ⮑ -QANMxYn3BsMeuAbRT8X3iiu3/user-xSuQTJ0IIVj3dHM4DPymXTg4/img-5GqtVx ⮑ L86Retwi282RbE8HzA.png?st=2022-11-10T08%3A46%3A02Z&se=2022-11-10T1 ⮑ 0%3A46%3A02Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&sk ⮑ oid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e- ⮑ a814-9c849652bcb3&skt=2022-11-09T14%3A20%3A19Z&ske=2022-11-10T14%3 ⮑ A20%3A19Z&sks=b&skv=2021-08-06&sig=yorbHuIy/qHhWvGPmJrZ8apJptorzpI ⮑ 0/62VH2lmhcg%3D" } ] }
Вызов API из скрипта Python
# create.py import os import openai PROMPT = "An eco-friendly computer from the 90s in the style of vaporwave" openai.api_key = os.getenv("OPENAI_API_KEY") response = openai.Image.create( prompt=PROMPT, n=1, size="256x256", ) print(response["data"][0]["url"])
OPENAI_API_KEY
, вам даже не нужна эта строка кода. Библиотека openai автоматически получает доступ к значению ключа API из вашей среды, пока вы придерживаетесь предложенного имени. С помощью этой строки кода вы также можете загрузить ее из переменной среды с другим именем.openai.Image
и вызывает .create()
. Следующие несколько строк содержат некоторые параметры, которые вы можете передать методу.n
. Этот параметр позволяет определить, сколько новых изображений вы хотите создать. Значение n
должно быть от одного до десяти и по умолчанию равно 1.url
в строке 17 и печатаете его значение в своем терминале.
(venv) $ python create.py https://oaidalleapiprodscus.blob.core.windows.net/private/org-QANMxYn3BsMe ⮑ uAbRT8X3iiu3/user-xSuQTJ0IIVj3dHM4DPymXTg4/img-4AMS4wJJLFsu6ClQmGDppAeV ⮑ .png?st=2022-11-10T12%3A22%3A46Z&se=2022-11-10T14%3A22%3A46Z&sp=r&sv=20 ⮑ 21-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6- ⮑ 684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2022-11-10T ⮑ 10%3A55%3A29Z&ske=2022-11-11T10%3A55%3A29Z&sks=b&skv=2021-08-06&sig=xJW ⮑ imMiA1/nGmFMYKUTsJq7G1u4xSL652r/MrzTH0Nk%3D
size
. Чем меньше, тем дешевле, так что вы только что сэкономили немного денег! Возможно, вы хотели бы сохранить что-то еще — например, данные изображения.Сохраните данные изображения в файл
# create.py import os import openai PROMPT = "An eco-friendly computer from the 90s in the style of vaporwave" openai.api_key = os.getenv("OPENAI_API_KEY") response = openai.Image.create( prompt=PROMPT, n=1, size="256x256", response_format="b64_json", ) print(response["data"][0]["b64_json"][:50])
b64_json
. Значение этого параметра по умолчанию — url
, поэтому до сих пор вы получали URL-адреса в ответах JSON.b64_json
вместо url
. Вы применили это изменение в вызове print() в строке 18 и ограничили вывод первыми пятьюдесятью символами.
# create.py import json import os from pathlib import Path import openai PROMPT = "An eco-friendly computer from the 90s in the style of vaporwave" DATA_DIR = Path.cwd() / "responses" DATA_DIR.mkdir(exist_ok=True) openai.api_key = os.getenv("OPENAI_API_KEY") response = openai.Image.create( prompt=PROMPT, n=1, size="256x256", response_format="b64_json", ) file_name = DATA_DIR / f"{PROMPT[:5]}-{response['created']}.json" with open(file_name, mode="w", encoding="utf-8") as file: json.dump(response, file)
pathlib
и json
:responses/
, в котором будут храниться ответы API в виде файлов JSON.Декодировать ответ Base64 JSON
# convert.py import json from base64 import b64decode from pathlib import Path DATA_DIR = Path.cwd() / "responses" JSON_FILE = DATA_DIR / "An ec-1667994848.json" IMAGE_DIR = Path.cwd() / "images" / JSON_FILE.stem IMAGE_DIR.mkdir(parents=True, exist_ok=True) with open(JSON_FILE, mode="r", encoding="utf-8") as file: response = json.load(file) for index, image_dict in enumerate(response["data"]): image_data = b64decode(image_dict["b64_json"]) image_file = IMAGE_DIR / f"{JSON_FILE.stem}-{index}.png" with open(image_file, mode="wb") as png: png.write(image_data)
JSON_FILE
. Помните, что вам нужно будет адаптировать значение JSON_FILE
, чтобы оно соответствовало имени вашего файла JSON, которое будет другим.b64decode()
. Вы импортируете функцию в строке 4 и запускаете ее в работу в строке 17. Она декодирует строку в кодировке Base64, чтобы вы могли сохранить фактические данные изображения в виде файла PNG. Затем ваш компьютер сможет распознать его как изображение PNG и понять, как отобразить его для вас.Создание различных вариантов изображения
# vary.py import json import os from base64 import b64decode from pathlib import Path import openai DATA_DIR = Path.cwd() / "responses" SOURCE_FILE = DATA_DIR / "An ec-1667994848.json" openai.api_key = os.getenv("OPENAI_API_KEY") with open(SOURCE_FILE, mode="r", encoding="utf-8") as json_file: saved_response = json.load(json_file) image_data = b64decode(saved_response["data"][0]["b64_json"]) response = openai.Image.create_variation( image=image_data, n=3, size="256x256", response_format="b64_json", ) new_file_name = f"vary-{SOURCE_FILE.stem[:5]}-{response['created']}.json" with open(DATA_DIR / new_file_name, mode="w", encoding="utf-8") as file: json.dump(response, file)
b64decode()
тем же способом, что и в convert.py, и сохраняет их в image_data
. Обратите внимание, что код выбирает первое изображение из вашего файла JSON с расширением saved_response["data"][0]
. Если ваш сохраненный ответ содержит несколько изображений, и вы хотите, чтобы ваши варианты основывались на другом изображении, вам необходимо соответствующим образом адаптировать индекс.image_data
в качестве аргумента openai.Image.create_variation()
. Обратите внимание, что для image
, параметра метода, требуются допустимые данные изображения PNG, поэтому вам необходимо декодировать строку из ответа JSON, прежде чем передавать ее методу.vary-
. Этот файл содержит данные изображения из ваших новых вариантов изображения. Вы можете скопировать имя файла и установить его как JSON_FILE
в convert.py
, запустить скрипт преобразования и посмотреть на ваши варианты изображения.
IMAGE_PATH = "images/example.png" response = openai.Image.create_variation( image=open(IMAGE_PATH, mode="rb"), n=3, size="256x256", response_format="b64_json", )
vary.py
, изменив значение SOURCE_FILE
, и запустить его снова. Если вы хотите создавать различные варианты на базе изображения, отличного от первого, то вам также нужно будет изменить индекс данных изображения, которое вы хотите использовать для этих целей.Заключение
Следующие шаги
Материалы по теме
- 0 views
- 0 Comment