Распознавание рукописных цифр на Raspberry Pi с TensorFlow и OpenCV
Обзор проекта
В этом проекте мы пройдем весь конвейер ИИ: от подготовки данных и обучения модели на ноутбуке до распознавания цифр в реальном времени с камеры Raspberry Pi. Решение использует Scikit-Learn и OpenCV 3.3 для обработки изображений, а Keras (с бэкендом TensorFlow) — для глубокого обучения.
В качестве датасета служит MNIST — 60 000 обучающих и 10 000 тестовых изображений рукописных цифр 28×28 пикселей в оттенках серого. Кадры с камеры Pi предварительно обрабатываются к этому формату перед подачей в обученную сеть.
Архитектура сети — стандартный сверточный блок, за которым следует полностью связанный выходной слой с 10 нейронами, каждый из которых соответствует одной цифре (0–9).
После обучения веса модели переносятся на Raspberry Pi. Легкий Python-скрипт захватывает кадр, применяет преобразование в оттенки серого, пороговое преобразование, изменение размера, инверсию и выполняет инференс.
Аппаратная настройка
Для демонстрации камера Pi была закреплена на простом ручном держателе, обеспечивающем фокус на одной цифре. На практике фиксированная установка или небольшой корпус повысят стабильность.
Установка программного обеспечения
Создайте виртуальное окружение Python на Pi и установите необходимые библиотеки. Команды ниже предполагают рабочую Raspberry Pi OS и Python 3.7+.
source ~/.profile
workon cv
python PiCameraApp.py --picamera 1
Установка TensorFlow
pip install tensorflow
Установка Keras
pip install keras
Установка OpenCV 3.3
OpenCV необходимо скомпилировать из исходников для полной оптимизации на Pi. Пошаговое руководство доступно на PyImageSearch.
https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/
Наконец, установите библиотеку PiCamera с оптимизациями NumPy:
pip install "picamera[array]"
Обучение модели
Запустите скрипт обучения на ноутбуке (желательно с GPU). Скрипт определяет CNN в Keras, компилирует, обучает на данных MNIST, проверяет качество и сохраняет веса в model_weights.h5.
python Train_MNIST.py
Если есть NVIDIA GPU, установите GPU-версию TensorFlow и драйверы CUDA для ускорения. Без GPU процесс займет больше времени, но завершится успешно.
После обучения перенесите model_weights.h5 на Pi через scp или WinSCP.
Распознавание цифр в реальном времени
Запустите скрипт распознавания на Pi. Программа захватывает кадр при нажатии t и завершается по q. Точность во многом зависит от освещения, угла и четкости почерка. Типичные результаты — более 95% на чистых, высококонтрастных цифрах.
Конвейер предобработки изображения
- Захват RGB-кадра как массива NumPy.
- Преобразование в оттенки серого (удаление двух цветовых каналов).
- Масштабирование значений пикселей в 8-битные целые числа (0–255).
- Пороговое преобразование по Оцу для получения чистого черно-белого изображения.
- Изменение размера до 28×28 пикселей — формат входа MNIST.
- Инверсия цветов: цифры становятся белыми на черном фоне, как в обучающей выборке.
- Выпрямление изображения и подача в загруженную модель.
Модель выдает вектор вероятностей длины 10. Индекс с максимальной вероятностью — предсказанная цифра.
Основные выводы
Пример демонстрирует полный end-to-end рабочий процесс: подготовка данных, обучение, развертывание и инференс на одноплатном компьютере. Код доступен на GitHub для экспериментов и расширений.
Ссылки
Источник: AI Digit Recognition with PiCamera
Производственный процесс
- Acceed IGS-9822DGP: 12-портовый гигабитный коммутатор с 4 SFP — высокопроизводительное промышленное сетевое решение
- AAEON и Intel доставляют FWS-8600: 40-ядерный 2U сетевой аппарат с 400 Гбит/с пропускной способностью
- Lanner усиливает сетевые аппараты процессорами Intel Xeon Scalable 2-го поколения
- Как считывать температуру с DS18B20 на Raspberry Pi 2
- Измерение температуры на Raspberry Pi с датчиками Maxim 1-Wire и мостом DS2482 I2C
- Точный мониторинг температуры в серверной на Raspberry Pi
- Posture Pal с Walabot — мониторинг расстояния в реальном времени для предотвращения боли в шее и спине
- Начало работы с TJBot: сборка, настройка и голосовое управление ИИ-роботом
- Сборка самобалансирующегося Segway на Raspberry Pi
- Расширение GoPiGo v2 на Windows 10 IoT Core для Raspberry Pi 3