Créer un Reconnaissance de Chiffres sur Raspberry Pi avec TensorFlow et OpenCV
Découvrez comment entraîner un réseau de neurones convolutif profond pour transcrire des chiffres manuscrits et le déployer sur un Raspberry Pi en utilisant la caméra Pi, OpenCV et TensorFlow.
Vue d'ensemble
Dans ce projet, nous parcourons l'ensemble du pipeline d'IA : de la préparation des données et l'entraînement du modèle sur un ordinateur portable, à la reconnaissance de chiffres en temps réel sur la caméra du Pi. La solution repose sur Scikit-Learn et OpenCV 3.3 pour la manipulation d'images, et Keras (avec backend TensorFlow) pour la composante d'apprentissage profond.
Nous utilisons le jeu de données MNIST — 60 000 images d'entraînement et 10 000 images de test de chiffres en niveaux de gris de 28×28 pixels. Les images capturées par la caméra du Pi sont prétraitées pour correspondre à ce format avant d'être injectées dans le réseau entraîné.
L'architecture du réseau est une pile convolutionnelle standard suivie d'une couche de sortie entièrement connectée avec dix neurones, chacun représentant un chiffre (0-9).
Une fois le modèle entraîné, les poids sont transférés sur le Raspberry Pi. Un script Python léger capture une image, applique la conversion en niveaux de gris, le seuillage, le redimensionnement, l'inversion, puis effectue l'inférence.
Configuration Matérielle
Pour la démonstration, j'ai monté la caméra Pi sur un support improvisé — un simple rig tenu à la main qui maintenait la caméra focalisée sur un seul chiffre. En pratique, un support fixe ou un petit boîtier peut améliorer la stabilité.
Installation Logicielle
Créez un environnement virtuel Python sur le Pi et installez les bibliothèques requises. Les commandes ci-dessous supposent que vous disposez d'un Raspberry Pi OS fonctionnel et de Python 3.7+.
source ~/.profile
workon cv
python PiCameraApp.py --picamera 1
Installer TensorFlow
pip install tensorflow
Installer Keras
pip install keras
Installer OpenCV 3.3
OpenCV doit être compilé depuis les sources pour activer les optimisations complètes sur le Pi. Un guide étape par étape est disponible sur PyImageSearch.
https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/
Enfin, installez la bibliothèque PiCamera avec les optimisations NumPy :
pip install "picamera[array]"
Entraînement du Modèle
Exécutez le script d'entraînement sur un ordinateur portable (de préférence avec un GPU). Le script définit le CNN dans Keras, le compile, l'entraîne sur les données MNIST, valide les performances, puis sauvegarde les poids dans model_weights.h5.
python Train_MNIST.py
Si vous disposez d'un GPU NVIDIA, installez TensorFlow avec support GPU et les pilotes CUDA pour accélérer l'entraînement. Sans GPU, le processus se terminera tout de même, mais prendra plus de temps.
Après l'entraînement, transférez model_weights.h5 sur le Pi via scp ou WinSCP.
Reconnaissance de Chiffres en Temps Réel
Lancez le script de reconnaissance sur le Pi. Le programme capture une image quand vous appuyez sur t et se termine avec q. La précision dépend largement de l'éclairage, de l'angle et de la netteté de l'écriture. Les résultats typiques atteignent plus de 95 % de précision sur des chiffres nets et à fort contraste.
Pipeline de Prétraitement d'Image
- Capture d'une image RVB sous forme de tableau NumPy.
- Conversion en niveaux de gris (suppression de deux canaux de couleur).
- Mise à l'échelle des valeurs de pixels en entiers non signés 8 bits (0-255).
- Application du seuillage d'Otsu pour obtenir une image noir-et-blanc propre.
- Redimensionnement à 28×28 pixels — la forme d'entrée de MNIST.
- Inversion des couleurs pour que les chiffres soient blancs sur fond noir, comme les données d'entraînement.
- Aplatissement de l'image et injection dans le modèle chargé.
Le modèle génère un vecteur de probabilité de longueur dix. L'indice avec la probabilité la plus élevée est le chiffre prédit.
Points Clés
Cet exemple démontre un flux de travail complet de bout en bout : préparation des données, entraînement du modèle, déploiement et inférence sur un ordinateur monocarte. Le code est disponible sur GitHub pour quiconque souhaite expérimenter ou étendre le système.
Références
Source : AI Digit Recognition with PiCamera
Processus de fabrication
- Acceed IGS-9822DGP : switch industriel 12 ports Gigabit avec 4 ports SFP – solution réseau haute performance
- AAEON et Intel livrent le FWS-8600 : appliance réseau 2U 40 cœurs, débit 400 Gbps
- Lanner améliore ses appliances réseau avec les processeurs Intel Xeon Scalable de 2e génération
- Comment lire la température avec un DS18B20 sur Raspberry Pi 2
- Mesure de température sur Raspberry Pi avec capteurs 1‑Wire Maxim et pont I2C DS2482
- Surveillance précise de la température dans un placard serveur avec Raspberry Pi
- Posture Pal avec Walabot – Surveillance de distance en temps réel pour arrêter douleurs cou et dos
- Démarrage avec TJBot : Construire, Configurer et Contrôler par la Voix Votre Propre Robot IA
- Construire un Segway auto‑équilibré avec Raspberry Pi