Tutoriels de Pythonia

Guides, IA, tutos et newsletter pour devenir une bête en programmation

Télécharger Apprendre-la-programmation-avec-python

Rejoignez notre communauté de professionnels et de passionnés, pour rester à la pointe des dernières actualités.

Stable diffusion le guide ultime partie 3

Mis à jour le March 7, 2023, 12:10 p.m.

Niveau: Expert

Dans cet article, nous allons voir comment intégrer notre modèle d'IA pour la génération d'images créé avec Stable Diffusion et PyTorch dans la bibliothèque Tkinter pour ajouter de l'interactivité avec un utilsateur.


1- Premier script de stable diffusion
2- Input de l'utilisateur


 

1- Créer sa GUI avec Tkinter

Si vous n'avez pas customtkinter entrez la ligne de commande suivante pour l'installer ds votre env virtuel:pip install customtkinter==0.3

pip install customtkinter==0.3

 

# Importer les modules
import tkinter as tk
import customtkinter as ctk
from diffusers import StableDiffusionPipeline 
from torch import autocast
import torch 
import os

# Initialisation et definition de la taille de la fenetre
app = tk.Tk() 
app.geometry("400x240")

# Notre précedent code mis comme une fonction
def create():
    pipe = StableDiffusionPipeline.from_pretrained("./stable-diffusion-v1-4",
        revision="fp16", 
        torch_dtype=torch.float16,)
    pipe = pipe.to("cuda")
    pipe.enable_attention_slicing()


    with autocast("cuda"):
        image = pipe(input1).images[0]  
        
    image.save(f"{input1}.png")
    print(f"Votre image est sauvegardée ici: {os.getcwd()}")

 

Notre appli prendra une phrase que rentrera l'utilisateur et la recuperera quand on cliquera sur le bouton "Génerer". On reprend notre code précédent et on en fait une fonction. On pourra intégrer cette fonction a un bouton.

# Créons le bouton en question
button = ctk.CTkButton(master=app, text="Générer", command=create)
button.place(relx=0.5, rely=0.5, anchor=tk.CENTER)

 

Vous devriez obtenir le résultat suivant:

 

 

 

 

 

Si vous cliquer sur le bouton vous devriez obtenir une nouvelle image:

 

 

j'ai obtenu ceci:

 

 

 

2- Input de l'utilisateur

 

Maintenant, nous aimerions pouvoir créer une image à partir de n'importe quelle phrase que l'utilisateur rentrera, il nous faut donc un champ de texte pour commencer.

Le voici:

# input qui acceptera la phrase
prompt = ctk.CTkEntry(height= 40, width=380, 
    text_color="black", 
    fg_color='white')
prompt.place(x=10,y=10)

 

Voyons ce que ça donne:

 

 

 

 

Super!!!!

Maintenant on veut récupérer ce qui est écrit et le passer dans la fonction. On recupère notre phrase grace à get().

def create():
    pipe = StableDiffusionPipeline.from_pretrained("./stable-diffusion-v1-4",
        revision="fp16", 
        torch_dtype=torch.float16,)
    pipe = pipe.to("cuda")
    pipe.enable_attention_slicing()

    # on recupere la phrase de l'utilisateur ici
    phrase_utilisateur=prompt.get()
    with autocast("cuda"):
        image = pipe(phrase_utilisateur).images[0]  
        
    image.save(f"{phrase_utilisateur}.png")
    print(f"Votre image est sauvegardée ici: {os.getcwd()}")

 

Le code complet donne:

import tkinter as tk
import customtkinter as ctk
from diffusers import StableDiffusionPipeline 
from torch import autocast
import torch 
import os


app = tk.Tk()  
app.geometry("400x240")
app.title('De Texte à Image')

# input qui acceptera la phrase de l'utilisateur
prompt = ctk.CTkEntry(height= 40, width=380, 
    text_color="black", 
    fg_color='white')
prompt.place(x=10,y=10)

def create():
    pipe = StableDiffusionPipeline.from_pretrained("./stable-diffusion-v1-4",
        revision="fp16", 
        torch_dtype=torch.float16,)
    pipe = pipe.to("cuda")
    pipe.enable_attention_slicing()

    # on recupere la phrase de l'utilisateur ici
    phrase_utilisateur=prompt.get()
    with autocast("cuda"):
        image = pipe(phrase_utilisateur).images[0]  
        
    image.save(f"{phrase_utilisateur}.png")
    print(f"Votre image est sauvegardée ici: {os.getcwd()}")

# Bouton pour la génération de l'image
button = ctk.CTkButton(master=app, text="Générer", command=create)
button.place(relx=0.5, rely=0.5, anchor=tk.CENTER)


# loop pour lancer l'application
app.mainloop()

 

 

 

 

 

Et voilà, nous arrivons à la fin de ce tutoriel captivant ! J'espère que vous avez trouvé ces informations utiles et qu'elles vous ont aidé à approfondir vos connaissances sur stable diffusion!

 




Stable diffusion le guide ultime partie 1


Stable diffusion le guide ultime partie 2


Stable diffusion le guide ultime partie 3

Vous êtes sur ce tutoriel

Commentaires

Aucun commentaire pour ce tutoriel.

Soyez le premier à réagir !

Télécharger Apprendre-la-programmation-avec-python

Rejoignez notre communauté de professionnels et de passionnés, pour rester à la pointe des dernières actualités.

Laissez un commentaire