Mis à jour le Sept. 20, 2022, 9:12 p.m.
Bien, construisons notre application:
Si vous n'avez pas customtkinter entrez la lgine de commande suivante pour l'installer ds votre env virtuel: pip install customtkinter==0.3
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()}")
On pourra intégrer cette fonction a un bouton. Notre appli prendra une phrase que rentrera l'utilisateur et la recuperera quand on cliquera sur le bouton "Génerer".
# 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:
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()
Résultat: