L’objectif de cet exemple est de créer un modèle de contrôle qualité des fruits dans le domaine agroalimentaire à l'aide de TensorFlow et de l'apprentissage profond (Deep Learning). Ce modèle sera capable de classer les fruits en fonction de leur qualité (par exemple : "Bon" ou "Défectueux") en utilisant des images prises lors du processus de production.
Lors de la production de fruits transformés (jus, conserves, etc.), le contrôle qualité est crucial. Des défauts visibles, tels que des meurtrissures, des taches, ou des imperfections, peuvent nuire à la qualité du produit final. L’objectif est de créer un modèle capable d’analyser des images de fruits et de prédire leur qualité.
Le premier objectif est de préparer un ensemble de données comprenant des images de fruits étiquetées, qui seront utilisées pour entraîner le modèle.
- Images de fruits (par exemple, pommes, oranges, bananes, etc.).
- Étiquettes de qualité : Les images doivent être étiquetées comme "Bon" ou "Défectueux".
Ces images peuvent être prises sur la chaîne de production avec une caméra. Chaque image doit être accompagnée d’une étiquette décrivant la qualité du fruit.
markdownCopier le codedataset/ bon/ apple_01.jpg apple_02.jpg banana_01.jpg defecueux/ apple_03.jpg banana_02.jpg
Avant d'utiliser ces données pour entraîner un modèle, nous devons prétraiter les images :
- Redimensionnement : Redimensionner toutes les images à une taille uniforme.
- Normalisation : Convertir les valeurs de pixels des images (généralement entre 0 et 255) en valeurs comprises entre 0 et 1 pour améliorer la convergence du modèle.
pythonCopier le codeimport tensorflow as tf from tensorflow.keras.preprocessing.image import ImageDataGenerator# Prétraitement des images : Redimensionnement et normalisation train_datagen = ImageDataGenerator( rescale=1./255, # Normalisation rotation_range=20, width_shift_range=0.2, height_shift_range=0.2, shear_range=0.2, zoom_range=0.2, horizontal_flip=True, fill_mode='nearest' )
train_generator = train_datagen.flow_from_directory( 'dataset/', target_size=(150, 150), # Redimensionner les images batch_size=32, class_mode='binary' # Les labels sont binaires : Bon ou Défectueux )
Un réseau de neurones convolutif (CNN) est très adapté aux tâches de classification d'images. Nous allons utiliser TensorFlow et l'API Keras pour définir un modèle de CNN. Le modèle apprendra à extraire des caractéristiques importantes des images (par exemple, les formes, les couleurs, etc.) et à prédire la qualité du fruit.
- Convolution 2D : Apprendre des motifs dans les images.
- MaxPooling : Réduire les dimensions des cartes de caractéristiques.
- Dense : Couches entièrement connectées pour la classification.
pythonCopier le codefrom tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout# Création du modèle model = Sequential([ Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)), MaxPooling2D(pool_size=(2, 2)), Conv2D(64, (3, 3), activation='relu'), MaxPooling2D(pool_size=(2, 2)), Conv2D(128, (3, 3), activation='relu'), MaxPooling2D(pool_size=(2, 2)), Flatten(), Dense(512, activation='relu'), Dropout(0.5), # Pour éviter le sur-apprentissage Dense(1, activation='sigmoid') # Sortie binaire : Bon ou Défectueux ])
# Compilation du modèle model.compile(optimizer='adam', loss='binary_crossentropy', # Perte binaire pour classification binaire metrics=['accuracy'])
Maintenant que nous avons défini le modèle, nous allons l'entraîner avec les images étiquetées. Nous utiliserons une validation croisée pour évaluer la performance du modèle.
pythonCopier le code# Entraînement du modèle history = model.fit( train_generator, steps_per_epoch=100, # Nombre d'itérations par époque epochs=10, # Nombre d'époques verbose=1 )
Une fois le modèle entraîné, nous devons évaluer sa performance sur un ensemble de test. Si nous avons un ensemble de données séparé pour les tests, nous pouvons l’utiliser pour obtenir des métriques comme l’exactitude et la perte.
pythonCopier le code# Évaluation sur les données de test test_datagen = ImageDataGenerator(rescale=1./255) test_generator = test_datagen.flow_from_directory( 'dataset/test/', target_size=(150, 150), batch_size=32, class_mode='binary' )
# Évaluer le modèle score = model.evaluate(test_generator, verbose=1) print(f"Perte : {score[0]}, Précision : {score[1]}")
Une fois le modèle entraîné et évalué, nous pouvons l’utiliser pour faire des prédictions sur de nouvelles images de fruits. Cela permet de classer les fruits comme "Bon" ou "Défectueux" en fonction des critères appris pendant l'entraînement.
pythonCopier le codefrom tensorflow.keras.preprocessing import image import numpy as np# Charger une image à prédire img_path = 'path_to_new_image.jpg' img = image.load_img(img_path, target_size=(150, 150))
# Convertir l'image en un tableau numpy et normaliser img_array = image.img_to_array(img) / 255.0 img_array = np.expand_dims(img_array, axis=0)
# Prédiction prediction = model.predict(img_array) if prediction[0] > 0.5: print("Le fruit est défectueux.") else: print("Le fruit est bon.")
Ce modèle de contrôle qualité des fruits, basé sur TensorFlow, permet de classifier efficacement les fruits en fonction de leur qualité à partir d'images. L'utilisation d'un réseau neuronal convolutif (CNN) permet d'extraire des caractéristiques importantes des images (comme des défauts visibles) et de prédire la qualité des fruits en temps réel sur la chaîne de production.
Avantages :
- Automatisation du contrôle qualité.
- Réduction des erreurs humaines dans le tri des fruits.
- Optimisation des coûts : Les fruits défectueux sont identifiés tôt, ce qui permet de réduire le gaspillage.
En utilisant TensorFlow, les producteurs de fruits peuvent améliorer la consistance et la qualité de leurs produits, tout en réduisant les coûts associés à la gestion des défauts.