Mariam-anglais / app.py
Docfile's picture
Update app.py
725d2cb verified
raw
history blame
6.22 kB
import streamlit as st
from PIL import Image
import time
# Configuration de la page
st.set_page_config(
page_title="Mariam Anglais",
page_icon="🇬🇧",
layout="wide",
initial_sidebar_state="expanded"
)
# --- Fonctions de simulation d'analyse ---
def simulate_analysis_type_1(image):
"""Simule une analyse de type 1."""
time.sleep(2) # Simule un traitement
# Ici, vous ajouteriez le code pour traiter l'image avec le type 1
st.write("Résultats de l'analyse de type 1 (simulation) :")
# Exemple : détection d'objets (simulation)
st.image(image, caption="Image avec détection d'objets (simulation)")
st.write("Objets détectés : voiture (80%), personne (70%), route (90%)")
def simulate_analysis_type_2(image):
"""Simule une analyse de type 2."""
time.sleep(3) # Simule un traitement plus long
# Ici, vous ajouteriez le code pour traiter l'image avec le type 2
st.write("Résultats de l'analyse de type 2 (simulation) :")
# Exemple : analyse de texte (simulation)
st.image(image, caption="Image avec analyse de texte (simulation)")
st.write("Texte détecté : 'Welcome to London' (95%)")
# --- CSS Personnalisé ---
st.markdown(
"""
<style>
body {
background-color: #f8f8f8; /* Fond légèrement plus clair */
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; /* Police plus moderne */
}
/* Titre principal */
.title {
color: #2c3e50; /* Bleu foncé */
text-align: center;
font-size: 3.5em;
font-weight: 800;
padding: 0.5em;
margin-bottom: 0.5em;
background-color: #ecf0f1; /* Fond gris clair */
border-radius: 10px; /* Coins arrondis */
box-shadow: 3px 3px 5px #888888; /* Ombre légère */
}
/* Introduction */
.intro {
text-align: center;
font-size: 1.3em;
margin-bottom: 2em;
color: #34495e; /* Gris bleu */
}
/* Conteneurs */
.container {
background-color: white;
border-radius: 10px;
padding: 1.5em;
margin-bottom: 1em;
box-shadow: 2px 2px 4px #888888;
}
/* Bouton */
.stButton>button {
background-color: #007bff; /* Bleu vif */
color: white;
padding: 0.8em 1.8em;
border-radius: 25px; /* Coins très arrondis */
font-weight: 600;
font-size: 1.1em;
transition: all 0.3s ease; /* Transition douce */
}
.stButton>button:hover {
background-color: #0056b3; /* Bleu plus foncé au survol */
transform: translateY(-2px); /* Léger déplacement vers le haut */
box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2); /* Ombre plus prononcée au survol */
}
/* Uploader de fichiers */
.stFileUploader {
padding: 1.5em;
border: 2px dashed #007bff;
border-radius: 10px;
}
/* Radio buttons */
.stRadio>div>label {
font-weight: 600;
color: #2c3e50;
font-size: 1.1em;
padding: 0.5em 0;
}
.stRadio>div>label>div>p {
font-size: 1em; /* Texte descriptif plus petit */
font-weight: 400;
color: #34495e;
}
/* Spinner */
.stSpinner {
text-align: center;
color: #007bff;
}
/* Messages */
.stSuccess, .stWarning, .stError {
border-radius: 10px;
padding: 1em;
font-weight: 600;
}
.stSuccess {
background-color: #d4edda;
border-color: #c3e6cb;
color: #155724;
}
.stWarning {
background-color: #fff3cd;
border-color: #ffeeba;
color: #856404;
}
/* Pied de page */
footer {
text-align: center;
margin-top: 2em;
color: #666;
}
</style>
""",
unsafe_allow_html=True
)
# --- Titre et introduction ---
st.markdown("<div class='title'>✨ Mariam Anglais ✨</div>", unsafe_allow_html=True)
st.markdown("<div class='intro'>Votre plateforme d'analyse d'images intelligente et ultra-réaliste !</div>", unsafe_allow_html=True)
# --- Conteneurs pour une meilleure disposition ---
col1, col2 = st.columns(2)
with col1:
st.markdown("<div class='container'>", unsafe_allow_html=True)
# Téléchargement d'images
uploaded_files = st.file_uploader("Choisissez des images", type=["jpg", "jpeg", "png"], accept_multiple_files=True)
st.markdown("</div>", unsafe_allow_html=True)
# Aperçu des images téléchargées
if uploaded_files:
st.markdown("<div class='container'>", unsafe_allow_html=True)
st.write("Aperçu des images :")
for uploaded_file in uploaded_files:
st.image(uploaded_file, width=200)
st.markdown("</div>", unsafe_allow_html=True)
with col2:
st.markdown("<div class='container'>", unsafe_allow_html=True)
# Choix du type d'analyse
analysis_type = st.radio(
"Choisissez le type d'analyse :",
(
"🔍 Type 1: Détection d'objets",
"🧠 Type 2: Analyse de texte"
),
format_func=lambda x: x.split(":")[1] # Affiche uniquement la description
)
st.markdown("</div>", unsafe_allow_html=True)
# Bouton de soumission
st.markdown("<div class='container'>", unsafe_allow_html=True)
if st.button("🚀 Lancer l'analyse"):
if uploaded_files:
st.write("Type d'analyse sélectionné :", analysis_type.split(":")[1])
with st.spinner(f"Analyse de type {analysis_type.split(':')[0]} en cours..."):
# Traitement des images
for uploaded_file in uploaded_files:
image = Image.open(uploaded_file)
if "Type 1" in analysis_type:
simulate_analysis_type_1(image)
elif "Type 2" in analysis_type:
simulate_analysis_type_2(image)
st.success("✅ Analyse terminée !")
else:
st.warning("⚠️ Veuillez télécharger au moins une image.")
st.markdown("</div>", unsafe_allow_html=True)
# --- Pied de page ---
st.markdown("<footer>© 2023 Mariam Anglais - Tous droits réservés.</footer>", unsafe_allow_html=True)