Hlavní obsah

Generovaní obrázků na základě textových popisů na vašem PC.

Foto: Karel Chramosil - AI

Text na obrázek

Model CompVis/stable-diffusion-v1-4 je pokročilý generativní model založený na latentní difuzi, který dokáže vytvářet fotorealistické obrázky na základě textových zadání.

Článek

Generovaní obrázků na základě textových popisů na vašem PC.

Obsah

Generovaní obrázků na základě textových popisů na vašem PC. 1

Úvod: 1

Klíčové vlastnosti: 1

Použití: 2

Instalace: 2

Nakopírování zdrojového kódu v pythonu: 2

Spuštění programu: 8

Vytvoření zástupce na ploše: 8

Závěr: 8

Úvod:

Model CompVis/stable-diffusion-v1-4 je pokročilý generativní model založený na latentní difuzi, který dokáže vytvářet fotorealistické obrázky na základě textových zadání. Tento model byl vyvinut týmem vedeným Robinem Rombachem a Patrickem Esserem a je trénován na rozsáhlé datové sadě LAION-5B.

Obrázky vytvořené modelem CompVis/stable-diffusion-v1-4.

Klíčové vlastnosti:

• Text-to-Image generace: Model dokáže generovat obrázky na základě textových popisů.

• Rozlišení: Obrázky jsou generovány v rozlišení až 512×512 pixelů.

• Technologie: Používá předtrénovaný textový enkodér CLIP ViT-L/14.

• Zadání: Je třeba zadávat co nejpřesnější pokyny pro kresbu obrázku. Např. „A running white horse perfectly centered in the middle of the image.“

• Omezení: Model může mít problémy s vykreslováním složitých scén, čitelného textu nebo realistických lidských obličejů. Navíc je optimalizován hlavně pro anglické popisy, což může způsobit kulturní zkreslení (částečně vyřešeno překladačem).

Použití:

• Vytváření uměleckých děl a designů.

• Výzkum generativních modelů a jejich limitací.

• Vzdělávací a kreativní nástroje.

Model je licencován pod licencí CreativeML OpenRAIL M, která podporuje odpovědné využívání AI technologií. Pokud tě zajímá více, můžete se podívat na Hugging Face.

Instalace:

Model můžete instalovat na PC s Windows 11 nebo s Linuxem. Přiložený program načte model z internetu a uloží na váš disk, poté pracuje s modelem na disku. Instalce je poměrně jednoduchá.

1. Stáhněte a nainstalujte miniconda3, (poznámka Conda navigátor není vhodný, dochází částo ke kolizi knihoven)

2. Vytvořte adresář C:\Users\tvoje_pc\cisla_pix2pix

3. Otevřete Windows PowerShell

4. Zadejte postupně příkazi:

5. cd cisla_pix2pix

6. conda create -n cisla_pix2pix python=3.9

7. conda activate cisla_pix2pix

8. pip install transformers torch

9. pip install diffusers transformers

10. pip install accelerate

11. pip install transformers torch sentencepiece

12. pip install matplotlib

13. pip install numpy<2

14. pip install sacremosesend

Nyní máte připravené a aktivované vývojové prostředí.

Nakopírování zdrojového kódu v pythonu:

Nyní nakopírujeme dále uvedený kód do souboru s názvem Test_modelu.py do adresáře \cisla_pix2pix:

# Generování obrázku na základě argumentu např. python Test_instalace.py

from diffusers import StableDiffusionPipeline

import torch

import os

import sys

from transformers import pipeline, MarianTokenizer # Přidáno MarianTokenizer

import matplotlib.pyplot as plt # Import matplotlib

from datetime import datetime

# Konstanty pro konfiguraci

MODEL_NAME = „CompVis/stable-diffusion-v1-4“

NEW_MODEL_DIR = “./complete_model"

TRANSLATOR_MODEL_PATH = “./prekladac_model"

INFERENCE_STEPS = 50

GUIDANCE_SCALE = 7.5

OUTPUT_DIR = “./vystupni_obrazky"

# Vytvoření výstupní složky, pokud neexistuje

if not os.path.exists(OUTPUT_DIR):

os.makedirs(OUTPUT_DIR)

print(f"Vytvořena složka pro výstupní obrázky: {OUTPUT_DIR}")

# Stažení modelu a uložení do nového adresáře

model_name = MODEL_NAME

new_model_dir = NEW_MODEL_DIR

def configure_parameters():

„"“

Umožní uživateli změnit parametry generování obrázků.

Returns:

tuple: (inference_steps, guidance_scale) - nové hodnoty parametrů

„"“

global INFERENCE_STEPS, GUIDANCE_SCALE

print("\nAktuální nastavení:")

print(f"1. Počet kroků (INFERENCE_STEPS): {INFERENCE_STEPS}")

print(f" - Více kroků = lepší kvalita, ale delší čas")

print(f" - Doporučený rozsah: 20-100")

print(f"2. Guidance scale: {GUIDANCE_SCALE}")

print(f" - Vyšší = více podle zadání, nižší = více kreativní")

print(f" - Doporučený rozsah: 5.0-15.0")

try:

steps = int(input(f"Zadejte nový počet kroků (současná hodnota: {INFERENCE_STEPS}): "))

if 1 <= steps <= 150:

INFERENCE_STEPS = steps

print(f"Počet kroků změněn na: {INFERENCE_STEPS}")

else:

print("Neplatná hodnota, používám původní nastavení")

except ValueError:

print("Neplatný vstup, používám původní nastavení")

try:

scale = float(input(f"Zadejte novou hodnotu přesnosti popisu (současná hodnota: {GUIDANCE_SCALE}): "))

if 1.0 <= scale <= 20.0:

GUIDANCE_SCALE = scale

print(f"Guidance scale změněna na: {GUIDANCE_SCALE}")

else:

print("Neplatná hodnota, používám původní nastavení")

except ValueError:

print("Neplatný vstup, používám původní nastavení")

return INFERENCE_STEPS, GUIDANCE_SCALE

def download_model():

„"“

Stáhne model Stable Diffusion a uloží jej do lokálního adresáře.

Model je stažen z předem definovaného zdroje a uložen do specifikovaného adresáře.

„"“

model = StableDiffusionPipeline.from_pretrained(model_name)

model.save_pretrained(new_model_dir)

print(f"Model stažen a uložen do adresáře '{new_model_dir}'")

# Načtení modelu z lokálního adresáře

model_dir = “./complete_model"

# Kontrola existence modelu

if not os.path.exists(model_dir):

print(f"Adresář s modelem ‚{model_dir}‘ neexistuje. Stahuji model…")

download_model()

def translate_text(text: str) -> str:

„"“

Přeloží zadaný text z češtiny do angličtiny.

Args:

text (str): Text k přeložení

Returns:

str: Přeložený text

„"“

try:

translation = translator(text)

result = translation[0]['translation_text']

return result

except Exception as e:

print(f"Chyba při překladu: {e}")

sys.exit(1)

def generate_image(prompt: str) -> any:

„"“

Vygeneruje obrázek podle zadaného promptu.

Args:

prompt (str): Textový popis obrázku v angličtině

Returns:

Image: Vygenerovaný obrázek

„"“

try:

# Vytvoření progress baru

result = model(prompt,

num_inference_steps=INFERENCE_STEPS,

guidance_scale=GUIDANCE_SCALE)

print("Model úspěšně vygeneroval výsledek")

return result.images[0]

except Exception as e:

print(f"Chyba při generování obrázku: {e}")

sys.exit(1)

def save_image(image: any) -> str:

„"“

Uloží a zobrazí vygenerovaný obrázek.

Args:

image: Vygenerovaný obrázek k uložení

Returns:

str: Cesta k uloženému souboru

„"“

try:

plt.imshow(image)

plt.axis('off')

plt.show()

timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")

filename = f"obrazek_{timestamp}.png"

filepath = os.path.join(OUTPUT_DIR, filename)

image.save(filepath)

print(f"Obrázek uložen jako '{filepath}'")

return filename

except Exception as e:

print(f"Chyba při ukládání obrázku: {e}")

sys.exit(1)

# Načtení modelu

try:

model = StableDiffusionPipeline.from_pretrained(model_dir)

print("Model načten úspěšně")

except Exception as e:

print(f"Chyba při načítání modelu: {e}")

sys.exit(1)

# Přesun na dostupné zařízení (GPU/CPU)

device = „cuda“ if torch.cuda.is_available() else „cpu“

model.to(device)

print(f"Model přesunut na zařízení: {device}")

# Cesta k uloženému modelu překladače

model_path = TRANSLATOR_MODEL_PATH

# Kontrola, zda model překladače již existuje

if os.path.exists(model_path) and os.path.isdir(model_path): # Kontrola existence adresáře

try:

# Zkusíme nejdřív načíst tokenizer a model z adresáře

tokenizer = MarianTokenizer.from_pretrained(model_path)

translator = pipeline("translation_cs_to_en", model=model_path, tokenizer=tokenizer)

print("Model pro překlad načten z disku úspěšně")

except Exception as e:

print(f"Chyba při načítání modelu z disku: {e}")

# Pokud to selže (např. chybí soubory), smažeme adresář a zkusíme to znovu

import shutil

shutil.rmtree(model_path) # Smažeme adresář s nekompletními soubory

print(f"Adresář ‚{model_path}‘ byl smazán. Zkusíme stažení znovu.")

# A spuštíme else větev kódu

try:

# 1. Stáhneme model a tokenizer zvlášť

tokenizer = MarianTokenizer.from_pretrained("Helsinki-NLP/opus-mt-cs-en")

translator = pipeline("translation_cs_to_en", model="Helsinki-NLP/opus-mt-cs-en",

tokenizer=tokenizer) # Předáme tokenizer rovnou do pipeline

print("Model pro překlad stažen a načten úspěšně")

# 2. Uložíme model a tokenizer dohromady

translator.model.save_pretrained(model_path)

tokenizer.save_pretrained(model_path) # Uložíme i tokenizer

print(f"Model a tokenizer pro překlad uloženy do adresáře '{model_path}'")

except Exception as e:

print(f"Chyba při stahování a ukládání modelu pro překlad: {e}")

sys.exit(1)

else: # Adresář neexistuje, stáhneme model a uložíme ho

try:

# 1. Stáhneme model a tokenizer zvlášť

tokenizer = MarianTokenizer.from_pretrained("Helsinki-NLP/opus-mt-cs-en")

translator = pipeline("translation_cs_to_en", model="Helsinki-NLP/opus-mt-cs-en",

tokenizer=tokenizer) # Předáme tokenizer rovnou do pipeline

print("Model pro překlad stažen a načten úspěšně")

# 2. Uložíme model a tokenizer dohromady

translator.model.save_pretrained(model_path)

tokenizer.save_pretrained(model_path) # Uložíme i tokenizer

print(f"Model a tokenizer pro překlad uloženy do adresáře '{model_path}'")

except Exception as e:

print(f"Chyba při stahování a ukládání modelu pro překlad: {e}")

sys.exit(1)

def main():

„"“

Hlavní funkce programu, která:

1. Přijímá textový popis obrázku v češtině nebo angličtině

2. Překládá český text do angličtiny pomocí překladového modelu

3. Generuje obrázek pomocí Stable Diffusion

4. Zobrazuje a ukládá vygenerovaný obrázek

Program běží v nekonečné smyčce, dokud uživatel nezadá ‚END‘.

„"“

while True:

# Získání promptu od uživatele

prompt_cz = input('\nZadejte popis obrázku česky, nebo anglicky\n(END pro ukončení, CONFIG pro změnu nastavení): ')

if prompt_cz.lower() == "end":

print("Program byl ukončen.")

break

if prompt_cz.lower() == "config":

configure_parameters()

continue

print(f"Zadaný popis: {prompt_cz}")

# Překlad promptu do angličtiny

try:

prompt_en = translate_text(prompt_cz)

print(f"Popis v angličtině: {prompt_en}")

except Exception as e:

print(f"Chyba při překladu: {e}")

sys.exit(1)

# Uložení výsledného obrázku

try:

image = generate_image(prompt_en)

save_image(image)

except Exception as e:

print(f"Chyba při ukládání obrázku: {e}")

sys.exit(1)

if __name__ == "__main__": # Spustí funkci main() pouze při spuštění skriptu

main()

Spuštění programu:

Zadejte v terminálu příkaz: python Test_modelu.py

Můžete zkusit vytvořit obrázek. Postupujte podle pokynů programu. Obrázky jsou docela pěkné.

Program využívá CPU, ale je možné ho spustit na GPU pokud máte nainastalovanou podporu GPU. Na CPU trvá vytvoření obrázku od 2 do 6 minut podle počtu jader procesoru. S GPU se výpočet 5× zrychlý.

Vytvoření zástupce na ploše:

Vytvořte v adresáři /cisla_pix2pix soubor spustit_model.bat s obsahem:

@echo off

%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -NoExit -Command „& ‚C:\Users\karel\miniconda3\shell\condabin\conda-hook.ps1‘ ; conda activate ‚C:\Users\karel\miniconda3\envs\cisla_pix2pix‘ ; python C:\Users\karel\cisla_pix2pix\Test_modelu.py“

(Poznámka: nezapomeňte nahradit text „karel“ názvem svého pc)

Na ploše otevřete nového zástupce a zadejte cestu k souboru spustit_model.bat

Vyberte obrázek pro zástupce.

Závěr:

Generování obrázků na základě textových popisů je fascinující a rychle se rozvíjející oblast umělé inteligence, která otevírá široké možnosti pro kreativní tvorbu, vzdělávání i vědecký výzkum. Model CompVis/stable-diffusion-v1-4 dokazuje, že technologie AI dokáže propojit text a vizuální svět způsobem, který byl dříve nepředstavitelný. Ať už jej využijete k vytváření originálních uměleckých děl, nebo k analýze možností generativních modelů, toto řešení nabízí jedinečný přístup k objevování nových kreativních obzorů.

Věříme, že pokyny pro instalaci a používání uvedené v tomto článku vám umožní plně využít potenciál této inovativní technologie. Při práci s generativními modely však nezapomínejme na důležitost etického využívání a respektování autorských práv.

Máte-li jakékoli dotazy nebo nápady na vylepšení, neváhejte mě kontaktovat na e-mailové adrese uvedené níže. Přeji mnoho úspěchů a inspirace při objevování fascinujícího světa generativních obrazových modelů!

karel.chramosil@gmail.com

Máte na tohle téma jiný názor? Napište o něm vlastní článek.

Texty jsou tvořeny uživateli a nepodléhají procesu korektury. Pokud najdete chybu nebo nepřesnost, prosíme, pošlete nám ji na medium.chyby@firma.seznam.cz.

Sdílejte s lidmi své příběhy

Stačí mít účet na Seznamu a můžete začít psát. Ty nejlepší články se mohou zobrazit i na hlavní stránce Seznam.cz

Doporučované

Načítám