Raspberry Pi Ziffernerkennung mit TensorFlow & OpenCV selbst bauen
Entdecken Sie, wie Sie ein tiefes Convolutional Neural Network trainieren, um handgeschriebene Ziffern zu erkennen, und es auf einem Raspberry Pi mit Pi Camera, OpenCV und TensorFlow einsetzen.
Überblick
In diesem Projekt durchlaufen wir die gesamte KI-Pipeline: von der Datenvorbereitung und dem Modelltraining auf dem Laptop bis zur Echtzeit-Ziffernerkennung mit der Pi-Kamera. Die Lösung basiert auf Scikit-Learn und OpenCV 3.3 für die Bildbearbeitung sowie Keras (mit TensorFlow-Backend) für das Deep Learning.
Wir verwenden den MNIST-Datensatz – 60.000 Trainings- und 10.000 Testbilder von 28×28-Pixel-Graustufenziffern. Von der Pi-Kamera aufgenommene Bilder werden vorverarbeitet, um dieses Format zu erreichen, bevor sie in das trainierte Netzwerk eingespeist werden.
Die Netzwerkarchitektur ist ein standardmäßiger Convolutional Stack, gefolgt von einer vollständig verbundenen Ausgabeschicht mit zehn Neuronen, die jeweils eine Ziffer (0–9) repräsentieren.
Nach dem Training werden die Gewichte auf den Raspberry Pi übertragen. Ein leichtes Python-Skript erfasst einen Frame, wendet Graustufenkonvertierung, Schwellenwertbildung, Skalierung, Inversion an und führt dann die Inferenz durch.
Hardware-Setup
Für die Demonstration montierte ich die Pi Camera auf einer improvisierten Halterung – einer einfachen, handgehaltenen Vorrichtung, die die Kamera auf eine einzelne Ziffer fokussierte. In der Praxis können eine feste Halterung oder ein kleines Gehäuse die Stabilität verbessern.
Software-Installation
Erstellen Sie eine Python-Virtual-Environment auf dem Pi und installieren Sie die erforderlichen Bibliotheken. Die folgenden Befehle setzen einen funktionierenden Raspberry Pi OS und Python 3.7+ voraus.
source ~/.profile workon cv python PiCameraApp.py --picamera 1
TensorFlow installieren
pip install tensorflow
Keras installieren
pip install keras
OpenCV 3.3 installieren
OpenCV muss aus dem Quellcode kompiliert werden, um volle Optimierungen auf dem Pi zu ermöglichen. Eine Schritt-für-Schritt-Anleitung finden Sie auf PyImageSearch.
https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/
Abschließend installieren Sie die PiCamera-Bibliothek mit NumPy-Optimierungen:
pip install "picamera[array]"
Modelltraining
Führen Sie das Trainingsskript auf einem Laptop aus (bevorzugt mit GPU). Das Skript definiert das CNN in Keras, kompiliert es, trainiert es mit den MNIST-Daten, validiert die Leistung und speichert die Gewichte in model_weights.h5.
python Train_MNIST.py
Wenn Sie eine NVIDIA-GPU besitzen, installieren Sie das GPU-fähige TensorFlow und die CUDA-Treiber, um das Training zu beschleunigen. Ohne GPU dauert der Prozess länger, wird aber trotzdem abgeschlossen.
Nach dem Training übertragen Sie model_weights.h5 via scp oder WinSCP auf den Pi.
Echtzeit-Ziffernerkennung
Starten Sie das Erkennungsskript auf dem Pi. Das Programm erfasst einen Frame, wenn Sie t drücken, und beendet sich mit q. Die Genauigkeit hängt stark von Beleuchtung, Winkel und Schriftklarheit ab. Typische Ergebnisse erreichen >95 % Genauigkeit bei sauberen, kontrastreichen Ziffern.
Bildvorverarbeitungs-Pipeline
- RGB-Frame als NumPy-Array aufnehmen.
- In Graustufen konvertieren (zwei Farbkanäle verwerfen).
- Pixelwerte auf 8-Bit-unsigned-Integers skalieren (0–255).
- Otsu-Schwellenwertverfahren anwenden für ein sauberes Schwarz-Weiß-Bild.
- Auf 28×28 Pixel skalieren – die MNIST-Eingabeform.
- Farben invertieren, sodass Ziffern weiß auf schwarz sind, passend zu den Trainingsdaten.
- Bild flachlegen und in das geladene Modell einspeisen.
Das Modell gibt einen Wahrscheinlichkeitsvektor der Länge zehn aus. Der Index mit der höchsten Wahrscheinlichkeit ist die vorhergesagte Ziffer.
Wichtige Erkenntnisse
Dieses Beispiel demonstriert einen vollständigen End-to-End-Workflow: Datenvorbereitung, Modelltraining, Deployment und Inferenz auf einem Single-Board-Computer. Der Code ist auf GitHub verfügbar für alle, die experimentieren oder das System erweitern möchten.
Referenzen
Quelle: AI Digit Recognition with PiCamera
Herstellungsprozess
- Acceed IGS-9822DGP: 12-Port Gigabit Switch mit 4 SFP Ports – High-Performance Industrielle Netzwerklösung
- AAEON & Intel liefern FWS-8600: 40-Core 2U Network Appliance mit 400 Gbps Throughput
- Lanner erweitert Network Appliances mit 2. Gen Intel Xeon Scalable Prozessoren
- Temperatur mit DS18B20 am Raspberry Pi 2 auslesen
- Temperaturmessung mit Maxim 1-Wire Sensoren und DS2482 I2C-Bridge am Raspberry Pi
- Präzise Temperaturüberwachung im Server-Schrank mit Raspberry Pi
- Posture Pal mit Walabot – Echtzeit-Entfernungsüberwachung gegen Nacken- und Rückenschmerzen
- TJBot starten: Bauen, konfigurieren und per Sprache steuern
- Selbstbalancierenden Segway mit Raspberry Pi bauen
- GoPiGo v2 auf Windows 10 IoT Core für Raspberry Pi 3 erweitern