import numpy as np import pandas as pd from tensorflow.keras.models import load_model from sklearn.preprocessing import LabelEncoder from tensorflow.keras.utils import to_categorical # === Liste fixe des classes utilisées pendant l'entraînement === LABELS = ['get_down', 'get_up', 'lying', 'no_person', 'sitting', 'standing', 'walking'] label_encoder = LabelEncoder() label_encoder.fit(LABELS) def load_and_predict(csv_path: str, model_path: str): """ Charge un fichier CSV contenant un seul échantillon et effectue une prédiction avec un modèle CNN. Args: csv_path (str): Chemin vers le fichier CSV avec une ligne (features + label) model_path (str): Chemin vers le fichier .h5 du modèle CNN Returns: tuple: (true_label: str, predicted_label: str, y_pred_probs: np.ndarray) """ # === Charger le fichier utilisateur === df = pd.read_csv(csv_path) X = df.drop(columns=['label']).values y = df['label'].values true_label = y[0] # === Encodage label réel === true_label_encoded = label_encoder.transform([true_label])[0] y_encoded = to_categorical([true_label_encoded], num_classes=len(LABELS)) # === Reshape pour Conv1D === X = X.reshape((1, X.shape[1], 1)) # === Charger le modèle === model = load_model(model_path) # === Prédiction === y_pred_probs = model.predict(X) y_pred_encoded = np.argmax(y_pred_probs, axis=1)[0] y_pred_label = label_encoder.inverse_transform([y_pred_encoded])[0] return true_label, y_pred_label, y_pred_probs[0] ,LABELS,y_pred_probs