Č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