CoolFace
Apppublic

Tomjedo/SAEBUT3

sourceHugging Faceapache-2.0updated 2y agoView on Hugging Face
0likes
app.py78 linesDownload Raw Back to root
1import streamlit as st2import numpy as np3import tensorflow as tf4from PIL import Image5from tensorflow.keras.losses import MeanSquaredError6import tensorflow as tf7import streamlit as st8 9st.write(f"✅ TensorFlow version: {tf.__version__}")10 11 12# Charger les modèles une seule fois avec les bons noms de fichiers13@st.cache_resource14def load_models():15    """Charge tous les modèles de prédiction avec les bons fichiers."""16    import tensorflow as tf17	# Charger le modèle compatible avec TF 2.1318    model_age = tf.keras.models.load_model("modelAge_fixed.h5", compile=False)19 20    model_gender = tf.keras.models.load_model("modelGenreA100.keras") 21    model_age_gender = tf.keras.models.load_model("best_age_genre_model.h5", compile=False)22    23    return model_age, model_gender, model_age_gender24 25# Charger les modèles26model_age, model_gender, model_age_gender = load_models()27 28def preprocess_image(image, target_size=(224, 224), grayscale=True):29    """Prépare l'image pour les prédictions."""30    image = image.resize(target_size)31    if grayscale:32        image = image.convert("L")  # Grayscale33        img_array = np.array(image) / 255.034        img_array = img_array.reshape(1, target_size[0], target_size[1], 1)  # Ajouter batch et canal35    else:36        image = image.convert("RGB")  # Pour d'autres modèles utilisant RGB37        img_array = np.array(image) / 255.038        img_array = img_array.reshape(1, target_size[0], target_size[1], 3)39    return img_array40 41# Interface Streamlit42st.title("Prédiction d'âge et de genre par IA")43st.write("Chargez une image de visage pour obtenir les prédictions.")44 45# Upload d'image46uploaded_image = st.file_uploader("Téléchargez une image", type=["jpg", "png", "jpeg"])47 48if uploaded_image is not None:49    image = Image.open(uploaded_image)50    st.image(image, caption="Image chargée", use_column_width=True)51 52    # Choix du modèle53    option = st.radio("Choisissez le modèle :", ("Âge", "Genre", "Âge et Genre"))54 55    if st.button("Prédire"):56        if option == "Âge":57            img_gray = preprocess_image(image, target_size=(224,224), grayscale=True)58            age_pred = model_age.predict(img_gray)[0][0]59            st.success(f"📌 **Âge prédit** : {int(age_pred)} ans")60 61        elif option == "Genre":62            img_gray = preprocess_image(image, target_size=(224,224), grayscale=True)63            gender_pred = model_gender.predict(img_gray)[0][0]64            gender_text = "Homme" if gender_pred < 0.5 else "Femme"65            st.success(f"📌 **Genre prédit** : {gender_text}")66 67        elif option == "Âge et Genre":68            img_gray = preprocess_image(image, target_size=(96,96), grayscale=True)69            70            age_pred, gender_pred = model_age_gender.predict(img_gray)71            # Convertir les valeurs en scalaires72            age_pred = age_pred[0][0]  # Âge73            gender_pred = gender_pred[0][0]  # Genre74            # Déterminer le genre (seuil de 0.5)75            gender_text = "Homme" if gender_pred < 0.5 else "Femme"76            # Afficher les résultats77            st.success(f"📌 **Âge prédit** : {int(age_pred)} ans")78            st.success(f"📌 **Genre prédit** : {gender_text}")