OCR на Arduino UNO Q с Edge Impulse с использованием Model Cascade

1770151442
2026-02-03 20:34:00

Оптическое распознавание символов (OCR) — один из моих любимых вариантов использования компьютерного зрения. Есть что-то, что меня завораживает в машине, «читающей» физический мир. Как только я увидел проект Edge Impulse, использующий каскадирование моделей для включения оптического распознавания символов в приложении Python, я не смог удержаться и портировал его на Arduino UNO Q.

В Arduino UNO Q уникальная модель OCR может быть медленной и ресурсоемкой. Но используя каскадирование моделей, мы можем оптимизировать процесс. Мы используем облегченную модель «детектора», чтобы сначала найти текст, и вызываем «тяжелую» модель чтения только для его распознавания, когда это необходимо. Это не просто демонстрация; это образец эффективного Edge AI, который можно использовать в большем количестве случаев.

Объяснение каскадирования моделей

Логика следует простому условному потоку выполнения:

  • Вывод А (Детектор): Работает с высоким FPS. Выходные данные представляют собой ограничивающую рамку.
  • Если уверенность достаточно высока, переходите к выводу Б.
  • Вывод Б (Распознаватель): работает только на изображении обрезанной области ограничивающей рамки.

Уменьшая размер входных данных для второй модели, мы значительно уменьшаем количество операций (FLOP), делая этап распознавания намного быстрее, чем если бы мы сканировали все изображение с высоким разрешением.

При этом, вероятно, Arduino UNO Q с процессором Qualcomm Dragonwing QRB2210 слишком медленный, чтобы справиться с этим тяжелым процессом вывода в реальном времени.

Построение моделей с помощью Edge ImpulseПримечание: Готовые модели для Apple-silicon macOS, плат aarch64 Linux и плат aarch64 Linux с оптимизацией Qualcomm QNN (например, Rubik Pi, RB3 Gen 2 Vision Kit) находятся в файлах models/.

Если вы хотите создать свои собственные модели для этого проекта и не использовать модели из репозитория, следуйте инструкциям ниже.

Read more:  «Не удалось завершить работу»: Microsoft выдает предупреждение Центра обновления Windows

Мы использовали Эдж Импульс Студия развернуть Обнимающее Лицо ВеслоOCR ONNX модели для Arduino UNO Q.

Мы вытащили Модель детектора PaddleOCR с предварительно обученными весами из Hugging Face и импортировали их в Edge Impulse с помощью «Принеси свою собственную модель» (BYOM).

Получив файл onnx на своем компьютере, перейдите в Edge Impulse Studio и создайте новый проект — проект детектора PaddleOCR. Затем нажмите на панели инструментов «Загрузить свою модель».

Создайте новый проект Edge Impulse и используйте свою собственную модель.

На экране «Шаг 1. Загрузите предварительно обученную модель» выберите загруженную модель обнаружения «onnx».

В разделе «Установить форму ввода для файла ONNX» установите значения 1, 3, 480, 640. Вы можете изменить высоту и ширину, если хотите более высокое/меньшее разрешение. Я тестировал 320х240.

Необязательно (для квантования модели): в разделе «Загрузить репрезентативные функции» выберите source_models/repr_dataset_480_640.npy (из этого репозитория). Если вам нужно другое разрешение, вам нужно будет запустить:

# 1) создайте новый venv и установите зависимости в source_models/requirements.txt
# например, в macOS/Linux через ‘cd source_models && python3 -m venv .venv && source .venv/bin/activate && pip3 install -r require.txt && cd ..’

# 2) загрузить подмножество OpenImages
oi_download_images –base_dir=source_models/openimages –labels Автомобиль –limit 200

# 2) создать репрезентативный набор данных из класса «автомобиль» OpenImages в масштабе -1..1.
python3 source_models/create_representative_dataset.py –height 480 –width 640 –limit 30

Загрузите свою предварительно обученную модель в Edge Impulse.

На экране «Шаг 2: Обработка «det.onnx» выберите ввод модели «Изображение» и масштаб «Диапазон пикселей -1..1 (не нормализованный)».

В разделе «Вывод модели» выберите «Обнаружение объектов».

В разделе «Выходной слой» выберите «Детектор PaddleOCR».

Теперь вы можете загрузить изображение в разделе «Проверить поведение модели» и при необходимости настроить пороговые значения так, чтобы они идеально соответствовали вашему тексту (значения по умолчанию должны быть довольно хорошими). И нажмите Сохранить модель.

Read more:  Треть создателей бизнеса начинают без опыта работы в своей отрасли

Шаг 2 по BYOM в Edge Impulse Studio

Затем перейдите в раздел «Развертывание» и разверните модель, выбрав там целевое оборудование. В моем случае я выбрал «Arduino UNO Q».

Запуск проекта OCR на Arduino UNO Q

Клонировать этот репозиторий в вашем Arduino UNO Q (или вашем устройстве Linux/Mac).

Зайдите в папку, в которую вы клонировали проект, и приготовьтесь к развертыванию. Я рекомендую настроить виртуальную среду для ее развертывания. Вам понадобится как минимум Python версии 3.10.

python -m венв .venv
источник .venv/bin/activate

И теперь устанавливаем зависимости:

pip install –upgrade pip pyaudio Six
pip install -r требования.txt

Запустите приложение, которое будет доступно через браузер на локальном IP-адресе устройства в порту 5000.

python web_inference.py
–detect-file ./models/arduino-uno-q/detector-linux-aarch64.eim
–predict-file ./models/arduino-uno-q/recouncer-linux-aarch64.eim
–dict-file source_models/rec_en_dict.txt

Вы должны увидеть что-то вроде:

(.venv) arduino@Arduino:~/ocr-linux-python$ python3 web_inference.py –detect-file ./models/arduino-uno-q/detector-linux-aarch64.eim –predict-file ./models/arduino-uno-q/recouncer-linux-aarch64.eim –dict-file source_models/rec_en_dict.txt
Загрузка словаря символов…
Словарь загружен: 437 символов.
Инициализация модели детектора…
Инициализация модели прогнозирования…
Загруженные модели:
Детектор: Марк использует детектор Arduino UNO Q/PaddleOCR — предварительно обученный (v2)
Предсказатель: Марк использует распознаватель Arduino UNO Q/PaddleOCR — предварительно обученный (v2)

=========================================================
Веб-интерфейс Edge Impulse OCR
=========================================================
Веб-интерфейс доступен по адресу:

– http://:5000

Откройте веб-интерфейс, выберите камеру и нажмите «Начать вывод».
Нажмите Ctrl+C, чтобы остановить сервер.
=========================================================

* Обслуживание приложения Flask «web_inference».
* Режим отладки: выключено
ВНИМАНИЕ: это сервер разработки. Не используйте его в производственном развертывании. Вместо этого используйте производственный сервер WSGI.
* Запуск на всех адресах (0.0.0.0)
* Бег дальше
* Работает по адресу http://192.168.1.131:5000.
Нажмите CTRL+C, чтобы выйти.

Откройте вкладку браузера с локальным IP-адресом Arduino UNO Q и портом 5000. Выберите камеру (в моем случае `/dev/video2`, и вы сможете увидеть:

Read more:  Брайс Джеймс открывает совет Леброна, Бронни дал ему

Запуск демо-версии OCR в моем браузере

Выводы

Оглядываясь назад на результаты, можно сказать, что скорость обнаружения очень низкая, однако каскадирование моделей улучшает процесс оптического распознавания символов, если оно работает с монолитной моделью оптического распознавания символов.

Возьмите этот проект в качестве примера каскадного конвейера модели, который можно применить к любому проекту компьютерного зрения.

И это только отправная точка для Arduino UNO Q. Представьте себе добавление мостового соединения между ЦП и MCU, чтобы записывать на дисплей распознанные сообщения на изображении или другие инновационные идеи, которые могут у вас возникнуть.

Если у вас есть какие-либо вопросы, не стесняйтесь задавать их в Форумы Edge Impulse или в Edge Impulse Discord сервер.

Отказ от ответственности

Этот проект предназначен только для образовательных и экспериментальных целей. Он не закален для производственного использования. Не развертывайте в промышленных или критически важных для безопасности средах без надлежащей безопасности, тестирования и проверки.

Атрибуция

Этот проект базируется в г. Двухэтапное распознавание текста для Linux (Edge Impulse) проект, который представляет собой приложение Python.

Огромный респект Ивану!

#OCR #на #Arduino #UNO #Edge #Impulse #использованием #Model #Cascade

По теме

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.