MODLI commited on
Commit
e5ce411
·
verified ·
1 Parent(s): 6c9bd1f

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +100 -0
app.py ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import requests
3
+ import json
4
+ from PIL import Image
5
+ import io
6
+ import base64
7
+
8
+ class FashionClassifier:
9
+ def __init__(self):
10
+ self.api_url = "https://api.marqo.ai/classify"
11
+ # Vous devrez gérer les clés API via les secrets Hugging Face
12
+ self.api_key = "your_marqo_api_key" # À remplacer par les secrets
13
+
14
+ def classify_image(self, image, max_categories=5, confidence_threshold=0.3):
15
+ """Classifie une image uploadée"""
16
+ try:
17
+ # Convertir l'image en base64
18
+ buffered = io.BytesIO()
19
+ image.save(buffered, format="JPEG")
20
+ img_str = base64.b64encode(buffered.getvalue()).decode()
21
+
22
+ headers = {
23
+ "Content-Type": "application/json",
24
+ "Authorization": f"Bearer {self.api_key}"
25
+ }
26
+
27
+ payload = {
28
+ "model": "Marqo/Marqo-FashionSigLIP-Classification",
29
+ "image_data": img_str,
30
+ "parameters": {
31
+ "max_categories": max_categories,
32
+ "confidence_threshold": confidence_threshold
33
+ }
34
+ }
35
+
36
+ response = requests.post(self.api_url, headers=headers, json=payload)
37
+
38
+ if response.status_code == 200:
39
+ return response.json()
40
+ else:
41
+ return {"error": f"Erreur API: {response.status_code}", "details": response.text}
42
+
43
+ except Exception as e:
44
+ return {"error": f"Erreur: {str(e)}"}
45
+
46
+ # Initialiser le classifieur
47
+ classifier = FashionClassifier()
48
+
49
+ def process_image(image, max_categories=5, confidence=0.3):
50
+ """Fonction de traitement pour Gradio"""
51
+ result = classifier.classify_image(image, max_categories, confidence)
52
+
53
+ if "error" in result:
54
+ return result["error"]
55
+
56
+ # Formater les résultats
57
+ if "predictions" in result:
58
+ output = "## Résultats de classification:\n\n"
59
+ for i, pred in enumerate(result["predictions"]):
60
+ output += f"{i+1}. **{pred['label']}** - {pred['score']*100:.2f}%\n"
61
+
62
+ if "processing_time" in result:
63
+ output += f"\n⏱️ Temps de traitement: {result['processing_time']}s"
64
+
65
+ return output
66
+ else:
67
+ return "Aucune prédiction trouvée"
68
+
69
+ # Interface Gradio
70
+ with gr.Blocks(title="Classificateur de Mode Marqo") as demo:
71
+ gr.Markdown("# 🎨 Classificateur de Vêtements Marqo")
72
+ gr.Markdown("Uploadez une image de vêtement pour la classifier")
73
+
74
+ with gr.Row():
75
+ with gr.Column():
76
+ image_input = gr.Image(type="pil", label="Image à classifier")
77
+ max_categories = gr.Slider(1, 10, value=5, label="Nombre max de catégories")
78
+ confidence = gr.Slider(0.1, 1.0, value=0.3, label="Seuil de confiance")
79
+ submit_btn = gr.Button("Classifier l'image")
80
+
81
+ with gr.Column():
82
+ output_text = gr.Markdown(label="Résultats")
83
+
84
+ submit_btn.click(
85
+ fn=process_image,
86
+ inputs=[image_input, max_categories, confidence],
87
+ outputs=output_text
88
+ )
89
+
90
+ # Exemples
91
+ gr.Examples(
92
+ examples=[
93
+ ["https://example.com/image1.jpg", 5, 0.3],
94
+ ["https://example.com/image2.jpg", 3, 0.4]
95
+ ],
96
+ inputs=[image_input, max_categories, confidence]
97
+ )
98
+
99
+ if __name__ == "__main__":
100
+ demo.launch(share=True)