MODLI commited on
Commit
8aa706b
·
verified ·
1 Parent(s): fbaf2a1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -47
app.py CHANGED
@@ -67,48 +67,30 @@ FASHION_LABELS = {
67
  # Divers
68
  57: "Uniforme", 58: "Costume", 59: "Smoking",
69
  60: "Robe de mariée", 61: "Accessoire mode",
70
-
71
- # Matières et textures (si le modèle les détecte)
72
- 100: "Coton", 101: "Denim", 102: "Laine", 103: "Soie", 104: "Cuir",
73
- 105: "Synthétique", 106: "Jean", 107: "Velours", 108: "Laine polaire",
74
-
75
- # Couleurs dominantes (approximatives)
76
- 200: "Vêtement noir", 201: "Vêtement blanc", 202: "Vêtement bleu",
77
- 203: "Vêtement rouge", 204: "Vêtement vert", 205: "Vêtement jaune",
78
- 206: "Vêtement rose", 207: "Vêtement violet", 208: "Vêtement orange",
79
- 209: "Vêtement marron", 210: "Vêtement gris", 211: "Vêtement multicolore",
80
- }
81
-
82
- # 🎨 CATÉGORIES GÉNÉRIQUES POUR LES NUMÉROS INCONNUS
83
- GENERIC_CATEGORIES = {
84
- range(600, 700): "Vêtement casual",
85
- range(700, 800): "Vêtement formel",
86
- range(800, 900): "Vêtement décontracté",
87
- range(900, 1000): "Article mode",
88
  }
89
 
90
  def get_human_readable_label(label_idx):
91
  """Convertit un numéro de catégorie en nom français"""
92
- # D'abord chercher dans le mapping précis
93
  if label_idx in FASHION_LABELS:
94
  return FASHION_LABELS[label_idx]
95
 
96
- # Ensuite chercher dans les catégories génériques
97
- for range_obj, category_name in GENERIC_CATEGORIES.items():
98
- if label_idx in range_obj:
99
- return category_name
100
-
101
- # En dernier recours, catégorie générale
102
- if label_idx < 100:
103
  return "Vêtement supérieur"
104
- elif label_idx < 200:
105
  return "Vêtement inférieur"
106
- elif label_idx < 300:
107
  return "Accessoire mode"
108
- elif label_idx < 400:
109
  return "Chaussure"
110
- elif label_idx < 500:
111
  return "Vêtement sport"
 
 
 
 
 
 
112
  else:
113
  return "Article vestimentaire"
114
 
@@ -177,23 +159,22 @@ def classify_fashion(image):
177
  output += "• Prenez la photo sur fond uni\n"
178
  output += "• Assurez-vous d'un bon éclairage\n"
179
  output += "• Cadrez uniquement le vêtement\n"
180
- output += "• Évitez les angles complexes\n"
181
 
182
  return output
183
 
184
  except Exception as e:
185
  return f"❌ Erreur de traitement: {str(e)}"
186
 
187
- # 🖼️ EXEMPLES DE TEST
188
  EXAMPLE_URLS = [
189
- "https://images.unsplash.com/photo-1558769132-cb1aea458c5e?w=400", # T-shirt
190
- "https://images.unsplash.com/photo-1594633312681-425c7b97ccd1?w=400", # Robe
191
- "https://images.unsplash.com/photo-1529111290557-82f6d5c6cf85?w=400", # Chemise
192
- "https://images.unsplash.com/photo-1543163521-1bf539c55dd2?w=400", # Veste
193
- "https://images.unsplash.com/photo-1582142306909-195724d3a58c?w=400", # Jean
194
  ]
195
 
196
- # 🎨 INTERFACE AMÉLIORÉE
197
  with gr.Blocks(title="Classificateur de Vêtements Expert", theme=gr.themes.Soft()) as demo:
198
 
199
  gr.Markdown("""
@@ -227,18 +208,25 @@ with gr.Blocks(title="Classificateur de Vêtements Expert", theme=gr.themes.Soft
227
  value="⬅️ Uploader une image pour commencer l'analyse"
228
  )
229
 
230
- # 🎯 EXEMPLES
231
- gr.Markdown("### 🖼️ GARDIEN-ROBE DE TEST")
232
- gr.Examples(
233
- examples=EXAMPLE_URLS,
234
- inputs=image_input,
235
- outputs=output_text,
 
 
 
 
 
 
236
  fn=classify_fashion,
237
- label="Cliquez sur un vêtement pour tester"
 
238
  )
239
 
240
- # 🎮 INTERACTION
241
- classify_btn.click(
242
  fn=classify_fashion,
243
  inputs=[image_input],
244
  outputs=output_text
 
67
  # Divers
68
  57: "Uniforme", 58: "Costume", 59: "Smoking",
69
  60: "Robe de mariée", 61: "Accessoire mode",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  }
71
 
72
  def get_human_readable_label(label_idx):
73
  """Convertit un numéro de catégorie en nom français"""
 
74
  if label_idx in FASHION_LABELS:
75
  return FASHION_LABELS[label_idx]
76
 
77
+ # Catégories génériques basées sur les plages
78
+ if 100 <= label_idx < 200:
 
 
 
 
 
79
  return "Vêtement supérieur"
80
+ elif 200 <= label_idx < 300:
81
  return "Vêtement inférieur"
82
+ elif 300 <= label_idx < 400:
83
  return "Accessoire mode"
84
+ elif 400 <= label_idx < 500:
85
  return "Chaussure"
86
+ elif 500 <= label_idx < 600:
87
  return "Vêtement sport"
88
+ elif 600 <= label_idx < 700:
89
+ return "Vêtement casual"
90
+ elif 700 <= label_idx < 800:
91
+ return "Vêtement formel"
92
+ elif 800 <= label_idx < 900:
93
+ return "Vêtement décontracté"
94
  else:
95
  return "Article vestimentaire"
96
 
 
159
  output += "• Prenez la photo sur fond uni\n"
160
  output += "• Assurez-vous d'un bon éclairage\n"
161
  output += "• Cadrez uniquement le vêtement\n"
 
162
 
163
  return output
164
 
165
  except Exception as e:
166
  return f"❌ Erreur de traitement: {str(e)}"
167
 
168
+ # 🖼️ EXEMPLES DE TEST AVEC URLs FIABLES
169
  EXAMPLE_URLS = [
170
+ "https://i.imgur.com/7QqRj7Z.jpeg", # T-shirt simple
171
+ "https://i.imgur.com/9Z8ZQ2W.jpeg", # Robe élégante
172
+ "https://i.imgur.com/3QqRj7Z.jpeg", # Chemise classique
173
+ "https://i.imgur.com/5Z8ZQ2W.jpeg", # Veste moderne
174
+ "https://i.imgur.com/1QqRj7Z.jpeg", # Jean décontracté
175
  ]
176
 
177
+ # 🎨 INTERFACE SIMPLIFIÉE SANS EXEMPLES PROBLÉMATIQUES
178
  with gr.Blocks(title="Classificateur de Vêtements Expert", theme=gr.themes.Soft()) as demo:
179
 
180
  gr.Markdown("""
 
208
  value="⬅️ Uploader une image pour commencer l'analyse"
209
  )
210
 
211
+ # 🎯 BOUTONS EXEMPLES SIMPLES (optionnel - commenté pour éviter les erreurs)
212
+ # gr.Markdown("### 🖼️ EXEMPLES DE TEST")
213
+ # with gr.Row():
214
+ # for i, url in enumerate(EXAMPLE_URLS):
215
+ # gr.Button(f"Exemple {i+1}", variant="secondary").click(
216
+ # fn=lambda u=url: Image.open(BytesIO(requests.get(u).content)),
217
+ # inputs=[],
218
+ # outputs=image_input
219
+ # )
220
+
221
+ # 🎮 INTERACTION PRINCIPALE
222
+ classify_btn.click(
223
  fn=classify_fashion,
224
+ inputs=[image_input],
225
+ outputs=output_text
226
  )
227
 
228
+ # 🔄 AUTO-CLASSIFICATION À L'UPLOAD
229
+ image_input.upload(
230
  fn=classify_fashion,
231
  inputs=[image_input],
232
  outputs=output_text