Mariam-anglais / app.py
Docfile's picture
Update app.py
d7c690a verified
raw
history blame
5.99 kB
import streamlit as st
import PIL.Image
import os
import google.generativeai as genai
# Configuration de la page
st.set_page_config(
page_title="Mariam Anglais",
page_icon="🇬🇧",
layout="wide",
initial_sidebar_state="expanded"
)
# CSS personnalisé pour un design plus esthétique
st.markdown(
"""
<style>
body {
background-color: #f4f4f4;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; /* Police plus moderne */
}
.stButton>button {
background-color: #4CAF50;
color: white;
padding: 0.75rem 1.5rem;
border-radius: 0.5rem;
font-weight: bold;
transition: all 0.2s ease-in-out; /* Animation au survol */
}
.stButton>button:hover {
background-color: #3e8e41; /* Couleur plus foncée au survol */
box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.2); /* Ombre au survol */
transform: translateY(-2px); /* Légère élévation au survol */
}
.stFileUploader {
padding: 1rem;
border: 2px dashed #4CAF50;
border-radius: 0.5rem;
}
.stRadio>div>label {
font-weight: bold;
}
.st-bb {
border-bottom: 2px solid #4CAF50;
}
.st-el { /* Pour les messages d'avertissement et de succès */
border-radius: 0.5rem;
padding: 0.75rem;
}
.st-ek { /* Zone de texte */
border-radius: 0.5rem;
}
.st-ef { /* Titres */
font-weight: bold;
color: #267629;
}
.stProgress>div>div>div>div {
background-color: #4CAF50;
}
</style>
""",
unsafe_allow_html=True
)
# Configuration de l'API Google Generative AI
GOOGLE_API_KEY = st.secrets["GOOGLE_API_KEY"] # Définir le chemin d'accès dans les secrets de l'application
genai.configure(api_key=GOOGLE_API_KEY)
# Titre et introduction avec effet d'animation
st.markdown(
"""
<h1 style='text-align: center; color: #267629; font-size: 3em; font-weight: bold;'>
<span style='opacity: 0; animation: fadeIn 1s ease-in-out forwards;'>✨ Mariam Anglais ✨</span>
</h1>
<style>
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
""",
unsafe_allow_html=True
)
st.markdown("<br>", unsafe_allow_html=True) # Espace
st.write("Bienvenue sur votre plateforme d'analyse d'images intelligente! Téléchargez vos images, choisissez votre type d'analyse, et laissez la magie opérer.")
# Colonnes pour une meilleure disposition
col1, col2 = st.columns(2, gap="large") # Ajout d'un gap plus grand
with col1:
# Section de téléchargement d'images
st.subheader("📷 Téléchargement d'images")
uploaded_files = st.file_uploader("", type=["jpg", "jpeg", "png"], accept_multiple_files=True, label_visibility="collapsed") # Label caché
# Aperçu des images téléchargées avec possibilité de les supprimer individuellement
if uploaded_files:
st.write("Aperçu des images :")
for i, uploaded_file in enumerate(uploaded_files):
col_img, col_del = st.columns([4, 1]) # Colonnes pour l'image et le bouton de suppression
with col_img:
st.image(uploaded_file, width=200, caption=f"Image {i+1}")
with col_del:
if st.button(f"🗑️", key=f"del_{i}"):
del uploaded_files[i]
st.experimental_rerun()
with col2:
# Section de choix du type d'analyse
st.subheader("🎛️ Choix du type d'analyse")
analysis_type = st.radio("",
("🔍 Type 1: Analyse de base", "🧠 Type 2: Analyse approfondie"), label_visibility="collapsed")
# Description des types d'analyse (cachée par défaut, visible en cliquant)
with st.expander("ℹ️ En savoir plus sur les types d'analyse"):
if analysis_type == "🔍 Type 1: Analyse de base":
st.write("L'analyse de base effectue une reconnaissance d'objets simple et rapide.")
else:
st.write("L'analyse approfondie utilise des algorithmes d'intelligence artificielle avancés pour une analyse plus précise et détaillée.")
# Bouton de soumission
if st.button("🚀 Soumettre", key="submit"):
if uploaded_files:
st.write("Type d'analyse sélectionné :", analysis_type)
# Préparation des images pour l'API
image_parts = []
for uploaded_file in uploaded_files:
try:
image = PIL.Image.open(uploaded_file)
image_parts.append(image)
except Exception as e:
st.error(f"Erreur lors du chargement de l'image : {e}")
st.stop()
# Définir le prompt en fonction du type d'analyse
if analysis_type == "🔍 Type 1: Analyse de base":
prompt = "Décris les objets présents dans ces images."
else:
prompt = "Effectue une analyse détaillée de ces images, en te concentrant sur les détails et les relations entre les différents éléments."
# Appel de l'API Google Generative AI
try:
model = genai.GenerativeModel(model_name="gemini-2.0-flash-exp")
with st.spinner("Analyse en cours..."):
progress_bar = st.progress(0)
response = model.generate_content([prompt] + image_parts, stream=True)
response.resolve()
progress_bar.progress(100)
# Affichage de la réponse
st.subheader("📝 Résultat de l'analyse :")
st.write(response.text)
except Exception as e:
st.error(f"Erreur lors de l'analyse : {e}")
else:
st.warning("⚠️ Veuillez télécharger au moins une image.")
# Pied de page
st.markdown("---")
st.write("© 2024 Mariam Anglais - Tous droits réservés.")