Tomjedo/SAEBUT3
0
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}")