Интеллектуальные системы вывода AI становятся всё более популярными на периферии. Мы видим, как алгоритмы машинного обучения и даже крупные языковые модели переносятся на встроенные системы в сфере хобби и коммерции. В этом проекте мы будем строить детектор лиц в реальном времени на базе Orange Pi 5, работающего на процессоре Rockchip 3588. Это означает, что мы будем в реальном времени обнаруживать человеческие лица из видеопотока нашей веб-камеры.
Для начала нам понадобится Orange Pi 5, USB-веб-камера и код из моего публичного репозитория. Вы можете обратиться к Начало работы с Orange Pi 5 и процессором Rockchip RK3588, чтобы настроить ваш Orange Pi 5. Прекрасно то, что этот пример также может работать на ПК или любом другом мощном встроенном устройстве под управлением Linux (например, Raspberry Pi 5). После того как вы настроите и запустите ваш Orange Pi 5 (или другое устройство), нам нужно будет установить несколько библиотек. Этот пример разработан для Linux (конкретно для Ubuntu), поэтому мы предполагаем, что у вас есть доступ к менеджеру пакетов Debian. В терминале выполните следующую команду:
sudo apt update -y && sudo apt install -y python3 python3-pip libopencv-dev python3-opencv v4l-utils
Это установит все необходимые пакеты для запуска демонстрации. Также установите пакет Python для OpenCV с помощью pip:
pip3 install opencv-python
Вы также можете проконсультироваться с README для получения дополнительных шагов по проверке вашей настройки.
В AI Vision с Kria KV260 Vision AI Starter Kit, мы показали, как построить движок AI для обнаружения лиц с использованием FPGA, но уровень сложности был чрезвычайно высок. В этом примере мы собираемся исследовать значительно более простой способ сделать то же самое. Это проще, потому что мы перекладываем сложность на CPU или GPU, которые мы исследуем в этой статье. Настоящая красота заключается в том, насколько хорошо OpenCV оптимизирован для наших компьютеров. Использование библиотеки полностью абстрагирует все сложности машинного обучения, с которыми мы столкнулись, пытаясь построить собственную нейронную сеть на FPGA.
Код довольно прост. Мы можем разбить его на несколько шагов:
Настоящая магия здесь заключается в "каскадном классификаторе", который мы используем с OpenCV. Это инструмент для обнаружения объектов на основе машинного обучения, который работает через серию постепенно усложняющихся этапов (похоже на концепцию нейронной сети). Подумайте об этом как о хорошо налаженной сборочной линии, где каждый этап имеет одну задачу: обнаружить определенные особенности, такие как края, углы или формы. Если регион изображения проходит все эти контрольные пункты, то он помечается как обнаруженный объект. Если нет, он отбрасывается на раннем этапе, чтобы сэкономить время и вычислительную мощность.
Каскадный классификатор ориентирован на скорость и эффективность. Он использует предопределенные признаки (например, узоры, такие как края или контрасты) и обрабатывает их поэтапно, что делает его идеальным для задач в реальном времени на устройствах с ограниченными вычислительными возможностями. Нейронные сети, с другой стороны, играют в другой лиге. Они автоматически изучают признаки непосредственно из данных, поэтому могут справляться с более сложными и разнообразными сценариями. Однако эта мощь имеет свою цену: нейронные сети требуют гораздо больше вычислительных ресурсов и времени. Каскадные классификаторы быстры и легковесны, но менее гибки, в то время как нейронные сети надежны, но требуют много ресурсов. Все зависит от выбора правильного инструмента для работы.
В нашем случае мы используем предварительно обученную модель, детектор лиц Haar Frontal (в форме XML-файла), который точно знает, что искать в лице и что отфильтровывать. На практике это достаточно хорошо для простого примера, который мы рассматриваем. Как упоминалось выше, это не будет так точно, но все же достаточно хорошо для большинства простых примеров обнаружения лиц.
Чтобы запустить код, все, что вам нужно сделать, это:
python3 face_detection.py --use-gpu
Или пропустите флаг --use-gpu, если у вас нет GPU на вашем устройстве (например, вы не используете Orange Pi 5). На этом этапе должно появиться маленькое окно, и синий прямоугольник должен появиться вокруг вашего лица. В моем случае один появился сразу:
Этот проект демонстрирует, насколько доступным стало обнаружение лиц в реальном времени с помощью инструментов вроде OpenCV и устройств вроде Orange Pi 5. Используя легковесный и эффективный каскадный классификатор (через загрузку предварительно обученного XML-файла), мы создали функциональный пример без сложностей, связанных с нейронными сетями или программированием FPGA. Хотя этот подход имеет свои ограничения, такие как работа с различным освещением или углами, это идеальная отправная точка для экспериментов с edge AI.
С всего лишь несколькими библиотеками и минимальной настройкой вы можете воспроизвести этот проект на встроенном устройстве или даже на стандартном ПК. По мере того как движки AI-инференсинга продолжают совершенствоваться, ожидайте увидеть более сложные модели, работающие на устройствах с ограниченными ресурсами, делая продвинутый ИИ более доступным для всех. Чтобы просмотреть репозиторий со всем кодом для начала работы, посетите https://gitlab.com/ai-examples/orange-pi-face-detection.