Convertir le texte en image avec une appli partie 3



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: