diff --git a/app/streamlit_app.py b/app/streamlit_app.py
index 14a3a95..6f9a090 100644
--- a/app/streamlit_app.py
+++ b/app/streamlit_app.py
@@ -385,6 +385,27 @@ def display_class_legend(model_info):
""", unsafe_allow_html=True)
+# # Sidebar avec informations du modèle
+# with st.sidebar:
+# st.markdown("## 🔧 Informations du Modèle")
+
+# model_info = get_model_info()
+# if model_info:
+# st.success("✅ Modèle chargé")
+# st.write(f"**Nom:** {model_info.get('model_name', 'N/A')}")
+# st.write(f"**Encoder:** {model_info.get('encoder', 'N/A')}")
+# st.write(f"**Classes:** {model_info.get('num_classes', 'N/A')}")
+# st.write(f"**Taille d'entrée:** {model_info.get('input_size', 'N/A')}")
+# st.write(f"**Run ID:** {model_info.get('run_id', 'N/A')[:8]}...")
+# else:
+# st.error("❌ Modèle non disponible")
+
+# st.markdown("---")
+# st.markdown("## 🎯 Classes Segmentées")
+# if model_info and 'class_names' in model_info:
+# for i, class_name in enumerate(model_info['class_names']):
+# st.write(f"{i}. {class_name}")
+
# Sidebar avec informations du modèle
with st.sidebar:
st.markdown("## 🔧 Informations du Modèle")
@@ -402,9 +423,43 @@ with st.sidebar:
st.markdown("---")
st.markdown("## 🎯 Classes Segmentées")
- if model_info and 'class_names' in model_info:
- for i, class_name in enumerate(model_info['class_names']):
- st.write(f"{i}. {class_name}")
+
+ # ✨ NOUVEAU: Affichage avec carrés colorés
+ if model_info and 'class_names' in model_info and 'class_colors' in model_info:
+ class_names = model_info['class_names']
+ class_colors = model_info['class_colors']
+
+ for i, (class_name, color) in enumerate(zip(class_names, class_colors)):
+ # Convertir RGB en hex
+ color_hex = f"#{color[0]:02x}{color[1]:02x}{color[2]:02x}"
+
+ # Affichage avec carré coloré
+ st.markdown(f"""
+
+ """, unsafe_allow_html=True)
+ else:
+ # Fallback si pas d'info couleur
+ if model_info and 'class_names' in model_info:
+ for i, class_name in enumerate(model_info['class_names']):
+ st.write(f"{i}. {class_name}")
+ else:
+ st.write("Informations des classes non disponibles")
# Initialisation des états - MODIFIÉE pour séparer les résultats par onglet
diff --git a/docker-compose.yml.example b/docker-compose.yml.example
index ce907d0..0e66a27 100644
--- a/docker-compose.yml.example
+++ b/docker-compose.yml.example
@@ -1,38 +1,48 @@
+version: '3.8'
+
services:
- multiseg-api:
+ street-vision-api:
+ # Pour développement local (build)
build:
context: .
dockerfile: Dockerfile
- container_name: multisegmentation_api
+
+ # Pour production (image Docker Hub)
+ # image: docker.io/VOTRE-USERNAME/street-vision_api:latest
+
+ container_name: street_vision_api
+
ports:
- - "${NGINX_PORT:-8080}:${NGINX_PORT:-8080}" # Port configurable, défaut 8080
+ - "${NGINX_PORT:-8080}:${NGINX_PORT:-8080}" # Port nginx configurable
+
environment:
# Configuration du port nginx
NGINX_PORT: "${NGINX_PORT:-8080}"
# Configuration MLflow pour le suivi des modèles
- MLFLOW_TRACKING_URI: "${MLFLOW_TRACKING_URI}" # ex: http://mlflow:5000
- MLFLOW_S3_ENDPOINT_URL: "${MLFLOW_S3_ENDPOINT_URL}" # ex: http://minio:9000 ou https://s3.amazonaws.com
- AWS_ACCESS_KEY_ID: "${AWS_ACCESS_KEY_ID}" # clé d'accès S3/MinIO
- AWS_SECRET_ACCESS_KEY: "${AWS_SECRET_ACCESS_KEY}" # clé secrète S3/MinIO
+ MLFLOW_TRACKING_URI: "${MLFLOW_TRACKING_URI}" # ex: https://mlflow.domain.com
+ MLFLOW_S3_ENDPOINT_URL: "${MLFLOW_S3_ENDPOINT_URL}" # ex: url MinIO ou S3
+ AWS_ACCESS_KEY_ID: "${AWS_ACCESS_KEY_ID}" # clé ID S3
+ AWS_SECRET_ACCESS_KEY: "${AWS_SECRET_ACCESS_KEY}" # clé secrète S3
# Configuration email pour notifications (optionnel)
- SMTP_SERVER: "${SMTP_SERVER}" # ex: smtp.gmail.com
- SMTP_PORT: "${SMTP_PORT}" # ex: 587
- SMTP_EMAIL: "${SMTP_EMAIL}" # ex: noreply@company.com
- SMTP_PASSWORD: "${SMTP_PASSWORD}" # mot de passe d'application SMTP
- SMTP_FROM_ALIAS: "${SMTP_FROM_ALIAS}" # ex: "Multi-Segmentation API"
- ADMIN_EMAIL: "${ADMIN_EMAIL}" # ex: admin@company.com
+ SMTP_SERVER: "${SMTP_SERVER}" # serveur SMTP
+ SMTP_PORT: "${SMTP_PORT}" # port SMTP (ex: 587)
+ SMTP_EMAIL: "${SMTP_EMAIL}" # email expéditeur
+ SMTP_PASSWORD: "${SMTP_PASSWORD}" # mot de passe SMTP
+ SMTP_FROM_ALIAS: "${SMTP_FROM_ALIAS}" # alias (optionnel)
+ ADMIN_EMAIL: "${ADMIN_EMAIL}" # email admin destinataire
- # URL de base de l'API (utilisée par Streamlit pour les appels API)
- MULTISEG_API_BASE_URL: "${MULTISEG_API_BASE_URL}" # ex: http://localhost:8080/api ou https://your-domain.com/api
+ # URL de base de l'API (utilisée par Streamlit pour rediriger vers FastAPI)
+ MULTISEG_API_BASE_URL: "${MULTISEG_API_BASE_URL}" # ex: https://vision.domain.com/api
+
+ # Seulement si vous avez un reverse proxy server
+ # networks:
+ # - swag
-# only if you have a reverse proxy server (like nginx-proxy or Traefik)
-# networks:
-# - proxy
restart: always
-# only if you have a reverse proxy server
+# Seulement si vous avez un reverse proxy server
# networks:
-# proxy:
+# swag:
# external: true