2) Keras et TensorFlow
Nous allons exploiter le modèle d'IA au format Keras dans un programme TensorFlow (Python).

Utiliser un modèle d'IA avec TensorFlow
Dans le tutoriel précédent "Teachable Machine", nous avons vu comment entraîner un modèle avec Teachable Machine et exporter le modèle au format Keras.
Voici maintenant les principales étapes nécessaires pour utiliser ce modèle dans un programme TensorFlow (Python).
Importation des bibliothèques
Pour utiliser un modèle Keras dans un programme Python avec TensorFlow, nous devons importer les bibliothèques nécessaires.
from tensorflow.keras.models import load_model
from PIL import Image, ImageOps
import numpy as np
Explication des bibliothèques importées :
load_model: pour charger le modèle KerasPIL(Pillow) : pour ouvrir et manipuler les imagesnumpy: pour manipuler les tableaux de données numériques
Chargement du modèle – load_model
Voici le code Python qui charge le modèle Keras exporté depuis Teachable Machine, dans la variable model :
from tensorflow.keras.models import load_model
model = load_model('keras_model.h5', compile=False)
compile=Falseest obligatoire avec les modèles exportés par Teachable Machine
Ouverture d'une image
Voyons comment ouvrir une image, la redimensionner et la préparer pour le modèle, en utilisant la bibliothèque Pillow (PIL).
Voici le code Python qui importe les bibliothèques nécessaires :
from PIL import Image, ImageOps
Méthodes les plus utilisées :
Image.open(chemin)→ ouvre une image.convert("RGB")→ force le mode RGB (3 canaux)ImageOps.fit(image, size, method)→ redimensionne + rogne pour obtenir exactement 224x224 tout en gardant le ratio
Méthodes de resampling recommandées :
| Méthode | Qualité | Vitesse | Usage recommandé |
|---|---|---|---|
Image.Resampling.NEAREST | basse | très rapide | aperçu rapide |
Image.Resampling.BILINEAR | moyenne | rapide | usage général |
Image.Resampling.BICUBIC | bonne | moyen | photos classiques |
Image.Resampling.LANCZOS | très bonne | lent | recommandé pour Teachable Machine |
Conversion d'une image
Pour faire une prédiction, le modèle attend une image sous forme de tableau numpy.
Il nous faut donc convertir l’image en un tableau numpy.
Voici le code Python qui convertit le contenu de la variable image en un tableau numpy, dans la variable image_array :
import numpy as np
image_array = np.asarray(image)
→ transforme l’image PIL en tableau numpy de forme (hauteur, largeur, 3) avec des valeurs 0–255
Notre variable image_array contient un tableau 3D de forme (224, 224, 3) c'est à dire un vecteur représentant une image :
- 224 pixels de hauteur
- 224 pixels de largeur
- 3 canaux de couleur (RGB) qui contiennent un entier entre 0 et 255 pour chaque pixel
Normalisation des pixels
Pour obtenir une prédiction, il faut normaliser les valeurs des pixels (0–255) dans l’intervalle [-1 ; +1].
Normaliser signifie mettre à l’échelle les valeurs pour qu’elles soient comprises dans une plage spécifique.
Voici le code Python qui normalise le tableau image_array et le stocke dans la variable image_array_normalized :
image_array_normalized = (image_array.astype(np.float32) / 127.5) - 1.0
Notre variable image_array_normalized contient un tableau 3D de forme (224, 224, 3) c'est à dire un vecteur représentant une image :
- 224 pixels de hauteur
- 224 pixels de largeur
- 3 canaux de couleur (RGB) qui contiennent (maintenant que nous avons normalisé) un nombre flottant entre -1 et +1 pour chaque pixel
Ajout du nombre d’images
Notre variable image_array_normalized contient un tableau 3D de forme (224, 224, 3),
mais, pour faire une prédiction, le modèle a besoin de connaître le nombre d’images en entrée (appelé « batch size »).
La méthode model.predict() attend un paramètre sous la forme (nombre_d’images, 224, 224, 3).
Et notre variable image_array_normalized ne contient qu’une seule image.
Voici le code Python qui ajoute cette dimension supplémentaire :
batch = np.expand_dims(image_array_normalized, axis=0)
Explication :
np.expand_dimsajoute une nouvelle dimension au tableauaxis=0signifie que la nouvelle dimension sera ajoutée au début (avant les dimensions existantes)- Résultat :
batcha maintenant la forme(1, 224, 224, 3)(1 image de 224x224 pixels avec 3 canaux)
Si on avait 5 images à prédire en même temps, la forme serait (5, 224, 224, 3).
Prédiction – model.predict
Voici le code Python qui donne au modèle, le lot d'images préparées (dans la variable batch), pour obtenir une prédiction.
prediction = model.predict(batch, verbose=0)
Explication :
model.predict(batch)→ fait une prédiction sur les données d’entréebatchverbose=0→ désactive les messages de progression pendant la prédiction- Résultat :
predictionest un tableau numpy contenant les probabilités pour chaque classe- Exemple :
prediction=[[0.942, 0.031, 0.027]]pour 3 classes (Pierre, Feuille, Ciseaux)
Lecture des labels
Voici le code Python qui lit le fichier labels.txt et lit chaque ligne pour créer une liste appelée class_names :
with open("labels.txt", "r", encoding="utf-8") as f:
class_names = [line.strip() for line in f.readlines() if line.strip()]
Explication :
open("labels.txt", "r", encoding="utf-8")→ ouvre le fichier en mode lecture avec encodage UTF-8f.readlines()→ lit toutes les lignes du fichierline.strip()→ enlève les espaces et sauts de ligne inutiles- La liste
class_namescontient les noms des classes dans l’ordre (indice 0, 1, 2, ...) - Exemple :
class_names=["Pierre", "Feuille", "Ciseaux"]
Interprétation du résultat
Voici le code Python qui interprète la prédiction pour obtenir la classe la plus probable et sa confiance associ ée :
index = np.argmax(prediction[0])
confidence = prediction[0][index]
label = class_names[index]
Explication :
prediction[0]→ accède aux probabilités de la première (et unique) imagenp.argmax(prediction[0])→ trouve l’indice de la classe avec la probabilité la plus élevéeconfidence = prediction[0][index]→ récupère la probabilité associée à cette classelabel = class_names[index]→ récupère le nom de la classe correspondante
- Exemple : si
index = 0, alorslabel = "Pierre"etconfidence = 0.942(94.2 %)
Exemple pratique
Il est possible de créer un petit programme Python qui permet de tester le modèle entraîné avec Teachable Machine sur des photos réelles prises par vous-mêmes.
Concrètement, le programme fera les choses suivantes :
-
Demander à l’utilisateur de choisir une photo (fichier .jpg ou .png)
→ les photos auront été prises avec votre smartphone et transférées par mail sur votre ordinateur -
Charger cette image depuis le disque
-
La transformer pour qu’elle soit exactement dans le format attendu par le modèle :
- passer en mode RGB (trois couleurs)
- redimensionner / rogner pour obtenir précisément 224 x 224 pixels
- normaliser les valeurs des pixels dans l’intervalle [-1 ; +1]
-
Donner cette image transformée au modèle pour obtenir une prédiction
-
Récupérer les probabilités renvoyées par le modèle
-
Identifier la classe la plus probable (celle avec la plus haute probabilité)
-
Afficher un résultat clair et lisible, par exemple :
════════════════════════════════════════════════════
Image analysée : pierre_2025.jpg
Geste reconnu : Pierre
Confiance : 94.2 %
Probabilités détaillées :
• Pierre → 94.2%
• Feuille → 3.1%
• Ciseaux → 2.7%
════════════════════════════════════════════════════
Plus la photo est proche des conditions dans lesquelles le modèle a été entraîné (bon éclairage, fond simple, main bien centrée), meilleure sera la prédiction.