Если вы пытались автоматизировать генерацию контента на Python, то наверняка бились головой о ту же стену: генерация изображений с текстом.
Но, кажется, эту боль наконец-то вылечили. Alibaba выпустили Qwen-Image — 20B модель, которая доступна через библиотеку diffusers
и, что самое главное, умеет рендерить текст. Корректно. На разных языках. С учетом перспективы.
Потенциально это новый мощный инструмент для скриптов, ботов и приложений. Давайте разберем, как интегрировать Qwen-Image в Python-проект.
Большинство моделей для генерации изображений "не видят" буквы так, как мы. Для них текст — это просто набор сложных визуальных паттернов, похожих на узоры или текстуры. Модель может выучить, как выглядит "форма" буквы 'A', но не понимает ее как лингвистическую единицу.
Поэтому, когда вы просите надпись, она пытается воспроизвести знакомые ей "закорючки", но без понимания их смысла и последовательности. Результат — та самая "нейроглифика", которая стала мемом.
Qwen-Image подходит к задаче иначе. Разработчики уделили особое внимание именно связке "визуальный образ + текст как осмысленная структура". Судя по примерам, они обучили модель не просто копировать формы букв, а понимать их как часть единого целого, корректно вписывая в общую композицию, стиль и даже перспективу.
[!NOTE] Ключ к успеху для нас — это нативная поддержка в библиотеке Diffusers. Это значит, что мы можем забыть про кривые API, ботов в Discord и прочие костыли. Мы можем импортировать пайплайн и генерировать изображения прямо в нашем Python-коде, как мы привыкли это делать с другими моделями.
Это открывает массу сценариев автоматизации, которые раньше были головной болью:
По сути, Qwen-Image превращает diffusers
из инструмента для генерации абстрактных картинок в полноценный программный дизайн-комплекс.
Перейдем к практике. Модель доступна на Hugging Face и работает через библиотеку diffusers
. Вот что нужно сделать, чтобы запустить ее локально.
[!WARNING] Требования к железу: Модель весит 20B параметров. Для комфортной работы потребуется видеокарта NVIDIA с как минимум 16 ГБ VRAM. На картах с меньшим объемом памяти запуск возможен, но может быть медленным или потребовать дополнительных оптимизаций.
Сначала убедитесь, что у вас установлен Python (версии 3.8 и выше) и pip
. Затем ставим необходимые библиотеки. Разработчики рекомендуют устанавливать diffusers
прямо из репозитория git
, чтобы получить свежие обновления.
Откройте терминал и выполните:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install git+https://github.com/huggingface/diffusers
pip install transformers>=4.51.3 accelerate
torch
: Основная библиотека для глубокого обучения. Убедитесь, что устанавливаете версию с поддержкой CUDA.diffusers
& transformers
: Библиотеки от Hugging Face для работы с диффузионными моделями.accelerate
: Утилита для эффективного использования GPU.Теперь создадим простой Python-скрипт для генерации нашего первого изображения.
# main.py
import torch
from diffusers import DiffusionPipeline
# Определяем устройство и тип данных
if torch.cuda.is_available():
device = "cuda"
torch_dtype = torch.bfloat16
else:
device = "cpu"
torch_dtype = torch.float32
# Загружаем модель
# Этот шаг может занять время при первом запуске, т.к. модель будет скачиваться
print("Загрузка модели... Это может занять несколько минут.")
pipe = DiffusionPipeline.from_pretrained(
"Qwen/Qwen-Image",
torch_dtype=torch_dtype
)
pipe = pipe.to(device)
print("Модель загружена.")
# Промпт с текстом
prompt = "A movie poster. The first row is the movie title, which reads 'Imagination Unleashed'. The second row is the movie subtitle, which reads 'Enter a world beyond your imagination'. The central visual features a sleek, futuristic computer."
# Магическая добавка для улучшения качества
positive_magic = " Ultra HD, 4K, cinematic composition."
full_prompt = prompt + positive_magic
# Негативный промпт (рекомендуется использовать, даже если пустой)
negative_prompt = " "
# Настройки генерации
seed = 42 # Можете поменять для получения разных результатов
width, height = 1664, 928 # Соотношение 16:9
generator = torch.Generator(device=device).manual_seed(seed)
print("Начало генерации изображения...")
# Запускаем генерацию
image = pipe(
prompt=full_prompt,
negative_prompt=negative_prompt,
width=width,
height=height,
num_inference_steps=50,
true_cfg_scale=4.0, # аналог guidance_scale
generator=generator
).images[0]
print("Генерация завершена.")
# Сохраняем результат
image.save("example_poster.png")
print("Изображение сохранено в example_poster.png")
Сохраните этот код в файл main.py
и запустите его из терминала командой python main.py
. После скачивания модели и выполнения скрипта в той же папке появится файл example_poster.png
.
Одна из крутых фишек, которую предлагают разработчики Qwen, — это инструмент для "улучшения" промптов. По сути, это еще одна нейросеть (Qwen-Plus), которая берет ваш короткий запрос и превращает его в детализированный, богатый промпт, лучше понятный для Qwen-Image.
Чтобы этим воспользоваться, нужен API-ключ от DashScope (сервис Alibaba Cloud). Его можно получить в их личном кабинете.
Вот как модифицировать код, чтобы он сначала улучшал промпт, а потом генерировал картинку.
pip install dashscope
prompt_utils.py
(код взят из официального репозитория):# prompt_utils.py
import os
import dashscope
def api(prompt, model, kwargs={}):
api_key = os.environ.get('DASHSCOPE_API_KEY')
if not api_key:
raise EnvironmentError("Переменная окружения DASHSCOPE_API_KEY не установлена")
messages = [{'role': 'user', 'content': prompt}]
response = dashscope.Generation.call(
api_key=api_key, model=model, messages=messages, result_format='message'
)
if response.status_code == 200:
return response.output.choices[0].message.content
else:
raise Exception(f'Ошибка API: {response}')
def rewrite(input_prompt):
# Здесь должен быть системный промпт для улучшения, он довольно большой.
# Для краткости, представим, что он уже здесь.
# Полный код можно найти в репозитории Qwen-Image.
system_prompt = "You are a Prompt optimizer..." # и так далее
prompt = f"{system_prompt}\n\nUser Input: {input_prompt}\n\n Rewritten Prompt:"
try:
polished_prompt = api(prompt, model='qwen-plus')
return polished_prompt.strip().replace("\n", " ")
except Exception as e:
print(f"Ошибка при улучшении промпта: {e}")
return input_prompt # В случае ошибки возвращаем исходный промпт
main.py
:# ... (импорты и загрузка модели как раньше) ...
from prompt_utils import rewrite
# Устанавливаем API-ключ как переменную окружения
# export DASHSCOPE_API_KEY='ваш_ключ' (в терминале)
prompt = "Милый котик сидит в саду"
print("Улучшение промпта...")
enhanced_prompt = rewrite(prompt)
print(f"Улучшенный промпт: {enhanced_prompt}")
# ... (далее генерация с enhanced_prompt) ...
Такой подход позволяет строить приложения, где пользователь вводит простую идею, а ваш Python-скрипт сам обогащает ее деталями перед отправкой в diffusers
.
Ваша поддержка — это энергия для новых статей и проектов. Спасибо, что читаете!
Сильные стороны Qwen-Image:
Слабые стороны и нюансы:
[!TIP] Итоговый вывод: Qwen-Image — это хороший инструмент в арсенале Python-разработчика, занимающегося AI-генерацией. Она не заменяет SDXL для задач, где нужна экосистема LoRA, но становится стандартом де-факто для всего, что связано с текстом на изображениях.
Но если же текст для вас не важен, и вы цените скорость и разнообразие готовых моделей, то привычные инструменты пока останутся более удобным выбором.
Но факт остается фактом: Alibaba сделали большой шаг вперед.