Создавайте потрясающие изображения с помощью ИИ: пошаговое руководство по созданию приложения Test-to-Image

В нашем быстро меняющемся мире ИИ занимает центральное место. Неудивительно, что ИИ привлек наше внимание, потому что он может повысить эффективность в различных отраслях. Возможно, вы экспериментировали с инструментами преобразования текста в изображение, такими как Midjourney и Dream Studio, но в этой статье я покажу вам пошаговое руководство по созданию вашего собственного приложения для преобразования текста в изображение с нуля с использованием стабильной диффузии. Это около 30 строк кода. Поскольку стабильная диффузия имеет открытый исходный код, модель бесплатна.

Предпосылки

Давайте удостоверимся, что у вас есть все необходимое, прежде чем погрузиться в создание собственного приложения для преобразования текста в изображение.

  • Вам нужен ноутбук с графическим процессором. Не беспокойтесь, если на вашем компьютере нет графического процессора, вы можете использовать Google Colab для доступа к бесплатному графическому процессору, но использование ноутбука с графическим процессором более оптимально.
  • Настройте интегрированную среду разработки (IDE) со средой Python.

С этими жизненно важными условиями все готово.

Введение

Давайте кратко разберемся в мире моделей диффузии, которые используются для создания изображений из текста. Диффузионная модель использует цепь Маркова для постепенного введения шума в данные, затем обращает процесс вспять и создает желаемую выборку данных из шума. Известные примеры моделей диффузии включают DALE 2 от OpenAI, Imagen от Google и стабильную диффузию, разработанную StabilityAI. В этой статье мы сосредоточимся на использовании Stable Diffusion от Stability AI для создания нашего приложения. Несмотря на то, что генеративные модели, такие как генеративно-состязательные сети (GAN), вариационные автоэнкодеры (VAE) и модели на основе потоков, хорошо известны, диффузионные модели являются более новыми, эффективными и дают лучшие результаты.

Настройка и установка

Мы можем получить доступ к модели стабильной диффузии через Hugging face. Hugging face — это сообщество и платформа, предоставляющая доступ к моделям машинного обучения и набору данных с открытым исходным кодом. Поскольку модели с открытым исходным кодом, обнять лицо можно бесплатно, хотя есть и платный уровень. Необходимо создать профиль на обнимающемся лице, если у вас его еще нет. После создания профиля вам понадобится «Токен доступа».

  • Нажмите на значок своего профиля
  • Нажмите «Настройки»
  • Перейдите к пункту «Токены доступа» на левой вкладке.
  • Вы можете создать новый токен или использовать существующий.
  • Скопируйте токен

Токен, необходимый для доступа к стабильной диффузионной модели, предоставляется бесплатно, что делает объятие лица мощным ресурсом.

Создайте файл «authtoken.py». Этот файл будет содержать ваш токен доступа к обнимающемуся лицу

# authtoken.py

# How to get one: https://huggingface.co/docs/hub/security-tokens
auth_token = "{COPY ACCESS TOKEN FROM HUGGING FACE}"

Установить все требования

Создайте файл «requirements.txt». Если вы знакомы с программированием на Python, вы уже должны знать, для чего используется этот файл. Файл requirements.txt содержит все необходимые библиотеки, которые необходимо установить для проекта Python.

# requirements.txt

customtkinter==4.6.1
darkdetect==0.7.1
diffusers==0.3.0
filelock==3.8.0
huggingface-hub==0.9.1
idna==3.4
importlib-metadata==4.12.0
numpy==1.23.3
packaging==21.3
Pillow==9.2.0
pyparsing==3.0.9
PyYAML==6.0
regex==2022.9.13
requests==2.28.1
tk==0.1.0
tokenizers==0.12.1 
torch==1.12.1+cu113
torchaudio==0.12.1+cu113
torchvision==0.13.1+cu113
tqdm==4.64.1
transformers==4.22.1
typing_extensions==4.3.0
urllib3==1.26.12
zipp==3.8.1

Запустите команду ниже, чтобы установить библиотеки в файле requirements.txt.

требования к установке pip.txt

Создание приложения

Чтобы обеспечить четкое понимание процесса, давайте наметим пошаговый подход, которым мы будем следовать при создании приложения.

  • Реализовать функцию «generate_image» Импортировать все необходимые библиотеки
  • Создайте пользовательский интерфейс с помощью Tkinter и Customtkinter.
  • Загрузите модель стабильной диффузии с сайта Hugging Face.
  • Реализовать функцию «generate_image»
  • Создайте кнопку для запуска функции «generate_image».

Импорт всех необходимых библиотек. Мы начинаем с включения необходимых библиотек в наш код, это даст нашему приложению доступ ко всем необходимым функциям приложения.

# Libraries for building GUI 
import tkinter as tk
import customtkinter as ctk 

# Machine Learning libraries 
import torch
from torch import autocast
from diffusers import StableDiffusionPipeline

# Libraries for processing image 
from PIL import ImageTk

# private modules 
from authtoken import auth_token

Создание пользовательского интерфейса с помощью Tkinter и Customtkinter. Tkinter — это хорошо известная библиотека Python, которую можно использовать для создания графического пользовательского интерфейса (GUI) для приложения. Пользователь будет иметь визуальный интерфейс для взаимодействия с моделью стабильной диффузии и просмотра результатов, сгенерированных моделью.

# Create app user interface
app = tk.Tk()
app.geometry("532x632")
app.title("Text to Image app")
app.configure(bg='black')
ctk.set_appearance_mode("dark") 

# Create input box on the user interface 
prompt = ctk.CTkEntry(height=40, width=512, text_font=("Arial", 15), text_color="white", fg_color="black") 
prompt.place(x=10, y=10)

# Create a placeholder to show the generated image
img_placeholder = ctk.CTkLabel(height=512, width=512, text="")
img_placeholder.place(x=10, y=110)

Загрузить стабильную диффузионную модель с обнимающего лица — используйте платформу с обнимающим лицом, чтобы получить стабильную диффузионную модель. Эта модель послужит основой для создания изображений на основе текста или подсказок.

# Download stable diffusion model from hugging face 
modelid = "CompVis/stable-diffusion-v1-4"
device = "cuda"
stable_diffusion_model = StableDiffusionPipeline.from_pretrained(modelid, revision="fp16", torch_dtype=torch.float16, use_auth_token=auth_token) 
stable_diffusion_model.to(device) 

Реализовать функцию «generate_image». Разработайте функцию «generate_image», которая будет запускаться всякий раз, когда в пользовательском интерфейсе происходит событие клика. Эта функция отправит текст или приглашение в модель стабильной диффузии и получит изображение в качестве ответа. Затем изображение будет отображаться в пользовательском интерфейсе.

# Generate image from text 
def generate_image(): 
    """ This function generate image from a text with stable diffusion"""
    with autocast(device): 
        image = stable_diffusion_model(prompt.get(),guidance_scale=8.5)["sample"][0]
    
    # Save the generated image
    image.save('generatedimage.png')
    
    # Display the generated image on the user interface
    img = ImageTk.PhotoImage(image)
    img_placeholder.configure(image=img) 

Создайте кнопку для запуска «функции generate_image» — добавьте кнопку в пользовательский интерфейс, которую пользователи могут щелкнуть, чтобы запустить функцию «generate_image». С помощью кнопки у пользователей будет простой способ создавать изображения на основе введенного текста.

trigger = ctk.CTkButton(height=40, width=120, text_font=("Arial", 15), text_color="black", fg_color="white",
                         command=generate_image) 
trigger.configure(text="Generate")
trigger.place(x=206, y=60) 

app.mainloop()

Выполнить приложение

Чтобы выполнить код, давайте объединим весь необходимый код в скрипт Python с именем «app.py». Этот скрипт будет служить центральным репозиторием для нашего приложения. После того, как мы завершили написание кода и сохранили его как «app.py», вы можете запустить скрипт, используя следующую команду в интерфейсе командной строки или терминале.

приложение Python.py

Выполнение этой команды инициирует выполнение скрипта Python, запускает наше приложение и позволяет пользователю взаимодействовать с нашим приложением.

# app.py 

# Libraries for building GUI 
import tkinter as tk
import customtkinter as ctk 

# Machine Learning libraries 
import torch
from torch import autocast
from diffusers import StableDiffusionPipeline

# Libraries for processing image 
from PIL import ImageTk

# private modules 
from authtoken import auth_token


# Create app user interface
app = tk.Tk()
app.geometry("532x632")
app.title("Text to Image app")
app.configure(bg='black')
ctk.set_appearance_mode("dark") 

# Create input box on the user interface 
prompt = ctk.CTkEntry(height=40, width=512, text_font=("Arial", 15), text_color="white", fg_color="black") 
prompt.place(x=10, y=10)

# Create a placeholder to show the generated image
img_placeholder = ctk.CTkLabel(height=512, width=512, text="")
img_placeholder.place(x=10, y=110)

# Download stable diffusion model from hugging face 
modelid = "CompVis/stable-diffusion-v1-4"
device = "cuda"
stable_diffusion_model = StableDiffusionPipeline.from_pretrained(modelid, revision="fp16", torch_dtype=torch.float16, use_auth_token=auth_token) 
stable_diffusion_model.to(device) 

# Generate image from text 
def generate_image(): 
    """ This function generate image from a text with stable diffusion"""
    with autocast(device): 
        image = stable_diffusion_model(prompt.get(),guidance_scale=8.5)["sample"][0]
    
    # Save the generated image
    image.save('generatedimage.png')
    
    # Display the generated image on the user interface
    img = ImageTk.PhotoImage(image)
    img_placeholder.configure(image=img) 


trigger = ctk.CTkButton(height=40, width=120, text_font=("Arial", 15), text_color="black", fg_color="white",
                         command=generate_image) 
trigger.configure(text="Generate")
trigger.place(x=206, y=60) 

app.mainloop()

Вы также можете найти полный проект на моем github

Заключение

Мы изучили процесс создания приложения преобразования текста в изображение с использованием Tkinter для пользовательского интерфейса и модели Stable Diffusion из стабильного ИИ с помощью Hugging Face в 30 строках кода. Теперь вы можете создать свой собственный инструмент для преобразования текста в изображение с помощью ИИ.