import os import numpy as np from PIL import Image # Étape 1 : Télécharger des données data_dir = 'donnees' emotion_classes = ['happy', 'sad', 'angry'] num_images_per_class = 100 for emotion in emotion_classes: for i in range(num_images_per_class): filename = f'{emotion}_{i}.jpg' image_path = os.path.join(data_dir, emotion, filename) img = Image.open(image_path) img_array = np.array(img) # Prétraitement des données img_array = img_array / 255.0 # Stocker les images prêtes à être utilisées par le modèle img_array = np.reshape(img_array, (1, 224, 224, 3)) # Étape 2 : Prétraitement des données img_array = np.concatenate((img_array, np.zeros((100, 224, 224, 3)))) print(f'Données pour {emotion} téléchargées avec succès.') # Étape 3 : Formation du modèle from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense model = Sequential() model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3))) model.add(MaxPooling2D((2, 2))) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(MaxPooling2D((2, 2))) model.add(Conv2D(128, (3, 3), activation='relu')) model.add(MaxPooling2D((2, 2))) model.add(Flatten()) model.add(Dense(128, activation='relu')) model.add(Dense(len(emotion_classes), activation='softmax')) # Compilation du modèle model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # Entraînement du modèle from sklearn.model_selection import train_test_split X_train, X_val, y_train, y_val = train_test_split(img_array, np.zeros((num_images_per_class * len(emotion_classes), 3)), test_size=0.2) model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_val, y_val))