Распознавание цифр AI с помощью PiCamera
Распознавание цифр с помощью Raspberry Pi, Pi Камера, OpenCV и TensorFlow.
История
В этом проекте мы собираемся обучить глубокую сверточную нейронную сеть расшифровке цифр. Затем мы собираемся использовать данные из этапа обучения, чтобы позволить Pi Camera читать и распознавать цифры. Конвейер AI будет реализован с использованием Scikit и OpenCV 3.3 для обработки изображений и Keras, который использует Tensorflow в качестве серверной части для части глубокого обучения.
Чтобы упростить задачу, этап локализации функций не выполняется. Вам нужно будет засунуть изображение перед объективом камеры, чтобы оно было единственным видимым элементом.
Будет использоваться набор данных MNIST. Он состоит из 60 000 обучающих примеров и 10 000 тестовых примеров рукописных цифр 0–9, отформатированных как монохромные изображения размером 28 × 28 пикселей. В основном мы преобразуем все полученные изображения с камеры в изображения, которые выглядят следующим образом:
Основную топологию сети можно описать следующим изображением:
Последний слой - это полностью связанный слой, который соответствует 10 категориям, представляющим 10 цифр.
Мы собираемся сделать две вещи. Сначала мы обучаем сеть распознаванию цифр. Затем мы использовали веса сети, которую мы обучили распознавать цифры прямой трансляции с камеры Raspberry Pi.
Я использовал третью руку, чтобы держать камеру Raspberry Pi, так как это было все, что у меня было. Механическую настройку можно описать на следующем рисунке:
Однако прежде чем мы начнем все это, давайте сначала установим все, что нам нужно. Я использовал виртуальные среды Python для настройки программы. Итак, если у вас есть все программы, перечисленные ниже, вы можете выполнить:
источник ~ / .profile workon cvpython PiCameraApp.py --picamera 1
Итак, перейдем к деталям. Для начала установим несколько программ.
Установить Tensorflow
pip install tenorflow
Установить Keras
pip install keras
Установить Open-CV 3.3
Установка OpenCV немного сложна, если вам нужны все оптимизации. Это означает, что мы должны скомпилировать его с нуля, поскольку пакет из диспетчера пакетов pip не имеет всех оптимизаций.
Лучшее руководство, которое я нашел, можно найти по этой ссылке:
https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/
Наконец, установите picamera с оптимизацией Numpy.
pip install "picamera [array]"
Теперь, когда весь программный стек установлен на RPI, нам нужно провести некоторое обучение. Сеть должна быть обучена на ноутбуке, предпочтительно с графическим процессором, если только вы не герой, который привык к низкой производительности ледника, и вы решили сделать это на RPI.
Обучение сети
Чтобы обучить сеть, запустите файл python на портативном компьютере, выполнив:
python Train_MNIST.py
Предполагается, что на вашем ноутбуке установлены Cuda (при использовании версии с графическим процессором), Tensorflow, Keras и matplotlib.
Программа в этом файле использует Keras для определения модели глубокой нейронной сети, компиляции ее и после выполнения этапов обучения и проверки сохраняет веса сети.
В конце программа сохраняет веса сети в виде файла .h5. Это файл с весами сети, который мы собираемся загрузить в скрипт распознавания, запущенный на RPI для распознавания живых цифровых изображений.
Скопируйте файл веса в свой RPI с помощью scp или WinSCP.
Если у вас графический процессор NVIDIA, обучение займет пару минут в зависимости от вычислительных возможностей вашей карты. Однако, чтобы использовать графический процессор, вам необходимо установить версию Tensorflow для графического процессора, а также исполняемый файл CUDA с веб-сайта NVIDIA. В противном случае это может занять немного больше времени, если вы используете только центральный процессор.
Распознавание живых изображений цифр
В итоге я протестировал как рукописные, так и напечатанные цифры. Точность прогноза в основном зависит от освещения и угла изображения . и насколько двусмысленно (читай дерьмово) ваше письмо. После запуска приложения нажмите t читать цифры и q бросить курить.
Распознавание цифры 4. Мне пришлось потратить много чернил, чтобы нарисовать эту цифру 4.
Иногда сеть выводит бесконечно малые вероятности для других чисел. Таким образом, вероятность того, что это будет семерка, составляет 0,0001%.
Инструменты торговли.Описание программы
Программа делает снимок с камеры при нажатии клавиши «t» и применяет к изображению несколько шагов преобразования, прежде чем пересылать его в DNN.
Первое, что нужно иметь в виду, это то, что цветные изображения приобретаются как большой массив чисел с плавающей запятой. Сначала изображение преобразуется из формата RGB в изображение в оттенках серого, поэтому мы эффективно выкидывая два канала.
Следующим шагом является преобразование формата изображения с плавающей запятой в 8-битное число в диапазоне 0–255.
Затем мы используем OpenCV для определения порога. Метод Оцу используется для автоматического порогового значения изображения, чтобы особенности числа были очевидны. Следующим шагом является изменение размера изображения до формата 28 × 28 пикселей. Это тот же формат, который принят MNIST DNN.
Для изменения масштаба можно использовать изображение scikit, open-cv или Keras.
После изменения масштаба изображения следующим шагом будет инвертирование цветов, поскольку MNIST ожидает, что числа будут на черном фоне, а не на черных линиях на белом фоне.
После постобработки изображение отправляется в DNN, который делает прогноз наблюдаемой цифры.
Выходной массив представляет вероятности того, что наблюдаемое изображение является этим числом. Таким образом, 1 в позиции 2 показывает 100% уверенность, поскольку это 1. Имейте в виду, что позиция 1 зарезервирована для 0.
Шаги алгоритма
1. Прочтите изображение
Первый шаг - явно поместить изображение перед камерой. Это будет масштабировано позже, поскольку CNN (сверточная нейронная сеть) ожидает изображения определенного размера.
2. Преобразовать в шкалу серого
Полученное изображение затем преобразуется в оттенки серого с помощью вызова функции scipy. По совпадению, вы можете использовать opencv только для манипуляций с изображениями, но вы должны помнить все имена функций. Еще один момент:есть очень тонкие различия между scipy и open-cv, когда дело доходит до определенных функций.
3. Масштабировать диапазон изображения
Здесь изображение преобразуется из формата с плавающей запятой в диапазон uint8 [0, 255]
4. Установление порога
Чтобы получить красивое черно-белое изображение, определение порога выполняется с помощью метода Otsu. Это волшебный шаг, поскольку при ручном установлении порогов каждый вводит значения одно за другим.
5. Измените размер изображения
Размер изображения изменяется до размера 28 на 28 пикселей. Затем он превращается в линейный массив размером (28 × 28)
6. Инвертировать изображение
MNIST DNN принимает изображения размером 28 × 28 пикселей, нарисованные белым на черном фоне. Итак, мы должны инвертировать изображение.
7. Подача информации в обученную нейронную сеть
Это последний шаг. Здесь мы загружаем веса глубокой нейронной сети и передаем изображение в сеть. Чтобы сделать прогноз, требуется 2–3 секунды.
8. Распечатать ответ
Наконец, мы получаем выходной массив с 10 классами, показывающий все цифры от 0 до 9. Положение массива представляет вероятность вывода, сделанного сетью. Перевод этого на человеческий язык означает выбор должности с наибольшей вероятностью.
Основная установка выглядит как медицинский прибор.
Фин!
Вот и все. Здесь показано, как реализовать нейронную сеть, которая может распознавать цифры.
Код, как всегда, загружен на GitHub.
Источник: Распознавание цифр AI с помощью PiCamera
Производственный процесс
- Acceed:12-портовый гигабитный коммутатор с 4-мя портами SFP
- AAEON сотрудничает с Intel, чтобы предоставить мощные сетевые решения
- Lanner для обновления сетевых устройств с помощью Intel Xeon 2-го поколения
- Считать температуру с помощью DS18B20 | Raspberry Pi 2
- Измерение температуры с помощью RASPBERRY PI
- Мониторинг температуры с помощью Raspberry Pi
- Приятель осанки с Walabot
- Начало работы с TJBot
- Создание сегвея с Raspberry Pi
- GoPiGo v2 с Windows IoT