Batwilf commited on
Commit
9df7ee3
·
verified ·
1 Parent(s): 379af61

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +102 -22
app.py CHANGED
@@ -1,17 +1,23 @@
1
  import tkinter as tk
2
- from tkinter import ttk, scrolledtext
3
  from PIL import Image, ImageTk
4
  import os
5
  from datetime import datetime
6
  import json
7
  import requests
8
  from io import BytesIO
 
 
9
 
10
  class DrawingTutorialApp:
11
  def __init__(self, root):
12
  self.root = root
13
  self.root.title("Générateur de Tutoriel de Dessin")
14
 
 
 
 
 
15
  # Configuration des styles
16
  self.setup_styles()
17
 
@@ -65,43 +71,117 @@ class DrawingTutorialApp:
65
  text="Aucune étape générée",
66
  wraplength=400)
67
  self.step_description.pack(padx=5, pady=5)
68
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  def generate_steps(self):
70
  description = self.description_text.get("1.0", "end-1c")
71
  if not description:
 
72
  return
73
 
74
- # Définition des étapes standard de dessin
75
- base_steps = [
76
- "Esquisse de base et formes géométriques",
77
- "Ajout des détails principaux",
78
- "Affinement des lignes",
79
- "Ajout des ombres de base",
80
- "Colorisation de base",
81
- "Ajout des détails de couleur",
82
- "Finalisation et mise en valeur"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  ]
84
 
85
- # Ici, vous intégreriez votre API de génération d'images
86
- # Pour l'exemple, nous simulons la génération
87
  self.generated_images = []
88
  self.steps_description = []
89
 
90
- for step in base_steps:
91
- # Simuler la génération d'image
92
- # Dans une vraie implémentation, appelez votre API ici
93
- blank_image = Image.new('RGB', (400, 400), 'white')
94
- self.generated_images.append(blank_image)
95
- self.steps_description.append(f"{step}\n{description}")
96
-
97
- self.current_step = 0
98
- self.update_display()
 
 
 
 
 
 
 
 
 
 
 
99
 
100
  def update_display(self):
101
  if not self.generated_images:
102
  return
103
 
104
  image = self.generated_images[self.current_step]
 
 
105
  photo = ImageTk.PhotoImage(image)
106
  self.image_label.configure(image=photo)
107
  self.image_label.image = photo
 
1
  import tkinter as tk
2
+ from tkinter import ttk, scrolledtext, messagebox
3
  from PIL import Image, ImageTk
4
  import os
5
  from datetime import datetime
6
  import json
7
  import requests
8
  from io import BytesIO
9
+ import base64
10
+ import time
11
 
12
  class DrawingTutorialApp:
13
  def __init__(self, root):
14
  self.root = root
15
  self.root.title("Générateur de Tutoriel de Dessin")
16
 
17
+ # Configuration de l'API Hugging Face
18
+ self.API_URL = "https://api-inference.huggingface.co/models/stabilityai/sdxl-turbo"
19
+ # Remplacez par votre token
20
+
21
  # Configuration des styles
22
  self.setup_styles()
23
 
 
71
  text="Aucune étape générée",
72
  wraplength=400)
73
  self.step_description.pack(padx=5, pady=5)
74
+
75
+ # Indicateur de progression
76
+ self.progress_label = ttk.Label(main_frame, text="")
77
+ self.progress_label.pack(pady=5)
78
+
79
+ def query_image(self, prompt):
80
+ """Génère une image via l'API Hugging Face"""
81
+ try:
82
+ response = requests.post(
83
+ self.API_URL,
84
+ headers=self.headers,
85
+ json={
86
+ "inputs": prompt,
87
+ "parameters": {
88
+ "num_inference_steps": 1,
89
+ "guidance_scale": 0.0,
90
+ }
91
+ }
92
+ )
93
+
94
+ # Vérifier si la requête a réussi
95
+ if response.status_code != 200:
96
+ raise Exception(f"Erreur API: {response.status_code}")
97
+
98
+ # Vérifier si le modèle est en cours de chargement
99
+ if response.status_code == 200 and "error" in response.json():
100
+ if "currently loading" in response.json()["error"]:
101
+ print("Modèle en cours de chargement, attente...")
102
+ time.sleep(20) # Attendre et réessayer
103
+ return self.query_image(prompt)
104
+
105
+ # Traiter la réponse
106
+ image_bytes = response.content
107
+ image = Image.open(BytesIO(image_bytes))
108
+ return image
109
+
110
+ except Exception as e:
111
+ print(f"Erreur lors de la génération d'image: {e}")
112
+ messagebox.showerror("Erreur", f"Erreur lors de la génération d'image: {e}")
113
+ return None
114
+
115
  def generate_steps(self):
116
  description = self.description_text.get("1.0", "end-1c")
117
  if not description:
118
+ messagebox.showwarning("Attention", "Veuillez entrer une description")
119
  return
120
 
121
+ # Définition des étapes et prompts associés
122
+ steps = [
123
+ {
124
+ "name": "Esquisse de base et formes géométriques",
125
+ "prompt": f"basic sketch with geometric shapes of {description}, lineart, sketch style, black and white"
126
+ },
127
+ {
128
+ "name": "Ajout des détails principaux",
129
+ "prompt": f"detailed sketch of {description}, more defined lines, black and white drawing"
130
+ },
131
+ {
132
+ "name": "Affinement des lignes",
133
+ "prompt": f"refined line drawing of {description}, clean lines, professional sketch"
134
+ },
135
+ {
136
+ "name": "Ajout des ombres de base",
137
+ "prompt": f"shaded sketch of {description}, basic shadows and values, grayscale"
138
+ },
139
+ {
140
+ "name": "Colorisation de base",
141
+ "prompt": f"basic colored version of {description}, flat colors, simple coloring"
142
+ },
143
+ {
144
+ "name": "Ajout des détails de couleur",
145
+ "prompt": f"detailed colored drawing of {description}, with shading and color details"
146
+ },
147
+ {
148
+ "name": "Finalisation et mise en valeur",
149
+ "prompt": f"final polished illustration of {description}, complete with details and professional finish"
150
+ }
151
  ]
152
 
153
+ # Réinitialisation des listes
 
154
  self.generated_images = []
155
  self.steps_description = []
156
 
157
+ # Génération des images pour chaque étape
158
+ for i, step in enumerate(steps):
159
+ self.progress_label.configure(
160
+ text=f"Génération de l'étape {i+1}/{len(steps)}: {step['name']}")
161
+ self.root.update()
162
+
163
+ image = self.query_image(step['prompt'])
164
+ if image:
165
+ self.generated_images.append(image)
166
+ self.steps_description.append(f"{step['name']}\n{step['prompt']}")
167
+ else:
168
+ messagebox.showerror("Erreur", f"Échec de la génération pour l'étape {i+1}")
169
+ continue
170
+
171
+ if self.generated_images:
172
+ self.progress_label.configure(text="Génération terminée!")
173
+ self.current_step = 0
174
+ self.update_display()
175
+ else:
176
+ self.progress_label.configure(text="Échec de la génération")
177
 
178
  def update_display(self):
179
  if not self.generated_images:
180
  return
181
 
182
  image = self.generated_images[self.current_step]
183
+ # Redimensionner l'image si nécessaire
184
+ image = image.resize((400, 400), Image.Resampling.LANCZOS)
185
  photo = ImageTk.PhotoImage(image)
186
  self.image_label.configure(image=photo)
187
  self.image_label.image = photo