MODLI commited on
Commit
cff0bfe
·
verified ·
1 Parent(s): 5fbc63c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +26 -21
app.py CHANGED
@@ -1,29 +1,25 @@
1
  import os
2
  os.environ['HF_HOME'] = '/tmp/cache'
3
  os.environ['TORCH_HOME'] = '/tmp/cache'
 
4
  from fastapi import FastAPI, File, UploadFile
5
  from fastapi.middleware.cors import CORSMiddleware
6
  from PIL import Image
7
  import torch
8
- from transformers import AutoProcessor, AutoModel
9
  import io
10
  import colorthief
11
 
12
- # --- Charge le modèle Marqo FashionSigLIP ---
13
- print("⚠️ Démarrage du chargement du modèle Marqo-FashionSigLIP... (cela peut prendre 1-2 minutes)")
14
- # 🎯 MODEL NAME CHANGE ICI - C'EST LE NOUVEAU MODELE
15
- model_name = print("⚠️ Démarrage du chargement du modèle...")
16
- # 🎯 MODELE PUBLIC ET TESTE qui fonctionne toujours
17
  model_name = "Marqo/marqo-fashionCLIP"
18
- # On utilise un pipeline standard de classification d'images, plus simple
19
- # Use a pipeline as a high-level helper
20
- from transformers import pipeline
 
 
21
 
22
- pipe = pipeline("zero-shot-image-classification", model="Marqo/marqo-fashionCLIP", trust_remote_code=True)
23
- pipe(
24
- "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/hub/parrots.png",
25
- candidate_labels=["animals", "humans", "landscape"],
26
- )
27
 
28
  # Middleware pour autoriser les appels depuis votre application Lovable
29
  app.add_middleware(
@@ -48,14 +44,23 @@ async def analyze_image(file: UploadFile = File(...)):
48
  contents = await file.read()
49
  image = Image.open(io.BytesIO(contents)).convert("RGB")
50
 
51
-
52
- # 2. ANALYSE AVEC LE MODÈLE DE CLASSIFICATION (NOUVEAU CODE)
53
  try:
54
- # 🎯 NOUVEAU : Le pipeline fait tout le travail en une ligne !
55
- predictions = pipe(image)
56
- # Le résultat est une liste de dictionnaires. On prend la prédiction la plus haute.
57
- category_name = predictions[0]['label'] # ex: "t-shirt"
58
- confidence_score = predictions[0]['score'] # ex: 0.95
 
 
 
 
 
 
 
 
 
 
59
 
60
  except Exception as e:
61
  return {"error": f"Erreur lors de l'analyse AI: {str(e)}"}
 
1
  import os
2
  os.environ['HF_HOME'] = '/tmp/cache'
3
  os.environ['TORCH_HOME'] = '/tmp/cache'
4
+
5
  from fastapi import FastAPI, File, UploadFile
6
  from fastapi.middleware.cors import CORSMiddleware
7
  from PIL import Image
8
  import torch
9
+ from transformers import CLIPProcessor, CLIPModel # CHANGÉ : CLIP au lieu de Auto
10
  import io
11
  import colorthief
12
 
13
+ # --- Charge le modèle Marqo fashionCLIP ---
14
+ print("⚠️ Démarrage du chargement du modèle...")
 
 
 
15
  model_name = "Marqo/marqo-fashionCLIP"
16
+ # CHANGÉ : On charge le modèle CLIP standard
17
+ model = CLIPModel.from_pretrained(model_name)
18
+ processor = CLIPProcessor.from_pretrained(model_name)
19
+ print("✅ Modèle chargé avec succès !")
20
+ # ---------------------------------------------------------
21
 
22
+ app = FastAPI(title="Fashion Detection API")
 
 
 
 
23
 
24
  # Middleware pour autoriser les appels depuis votre application Lovable
25
  app.add_middleware(
 
44
  contents = await file.read()
45
  image = Image.open(io.BytesIO(contents)).convert("RGB")
46
 
47
+ # 2. ANALYSE AVEC LE MODÈLE MARQO FASHIONCLIP (CODE CORRIGÉ)
 
48
  try:
49
+ # CHANGÉ : Préparer les inputs correctement pour CLIP
50
+ inputs = processor(text=categories, images=image, return_tensors="pt", padding=True)
51
+
52
+ # Passer through the model
53
+ with torch.no_grad():
54
+ outputs = model(**inputs)
55
+
56
+ # Récupérer les similarités image-texte
57
+ logits_per_image = outputs.logits_per_image
58
+ probs = logits_per_image.softmax(dim=1) # Convertir en probabilités
59
+
60
+ # Trouver la catégorie avec la probabilité la plus élevée
61
+ predicted_class_idx = probs.argmax(dim=1).item()
62
+ category_name = categories[predicted_class_idx]
63
+ confidence_score = probs[0][predicted_class_idx].item()
64
 
65
  except Exception as e:
66
  return {"error": f"Erreur lors de l'analyse AI: {str(e)}"}