Практическое руководство: real-time панорамирование/наклон для отслеживания лиц на Raspberry Pi
С небольшими вложениями времени и $25 в запчастях вы можете превратить Raspberry Pi в легкий real-time панорамирующий/наклоняющийся веб-камера, следующая за лицами. Комбинируя детекцию лиц OpenCV, два хоббийных сервопривода и драйвер servoblaster, Pi может держать камеру центрированной на объекте со скоростью выше одного движения в секунду.
Шаг 1: Приобретение оборудования
Что понадобится:
- Raspberry Pi — Model A или B подойдут; более новая Model A (или Pi Zero) полностью достаточна.
- Панорамирующий/наклоняющийся кронштейн (много бесплатных дизайнов на Thingiverse)
- Два хоббийных сервопривода (например, SG90 или MG995)
- GPIO-ленточный кабель
- Pi-совместимая веб-камера (я использовал Logitech C210)
Предполагая, что у вас уже есть Pi и веб-камера, дополнительные детали обойдутся примерно в $25.
Шаг 2: Подготовка Raspberry Pi
Используйте официальный Raspbian OS (hard‑float) и держите его обновленным. Разгон до 800 МГц может дать дополнительный CPU-запас для real-time детекции, но имейте в виду, что это может снизить стабильность.
Установите OpenCV для Python:
sudo apt-get install python-opencv
Скачайте и установите servoblaster, драйвер сервоприводов от Richard Hirst:
git clone https://github.com/richard-hirst/servoblaster.git
cd servoblaster
make install_autostart
Опционально: настройте таймаут, чтобы драйвер прекращал посылку импульсов после секунды бездействия. Добавьте эту строку в /etc/modules:
servoblaster idle_timeout=1000
Запустите драйвер:
sudo modprobe servoblaster
Настройка камеры: Благодаря Gmoto за инсайт, что настройка модуля uvcvideo исправляет проблемы с латентностью. Выполните эти команды один раз при загрузке или добавьте в /etc/modules:
rmmod uvcvideo
modprobe uvcvideo nodrop=1 timeout=5000 quirks=0x80
Шаг 3: Сборка рига
Следуйте инструкциям кронштейна, установите сервоприводы и прикрепите веб-камеру к верху кронштейна (скотч подойдет). Подключите камеру к USB-порту Pi; питание USB-хаб опционален, но может помочь, если камера потребляет больше тока.
Шаг 4: Подключение сервоприводов
Servoblaster отображает servo‑0 на GPIO 4 и servo‑1 на GPIO 17. Типичные провода сервопривода:
- Красный — +5 В
- Коричневый/Черный — GND
- Управление — сигнальная линия
Используйте ленточный кабель для подключения управляющих проводов к правильным GPIO-пинам. Код трактует servo‑0 как панорамирование (влево-вправо) и servo‑1 как наклон (вверх-вниз).
Питание сервоприводов: Малые хоббийные сервоприводы часто могут питаться прямо от 5 В GPIO Pi, но более крупные или требовательные модели могут требовать внешний источник 5–6 В. Подключите +5 В и GND сервоприводов к внешнему источнику, затем соедините внешний GND с GPIO-землей Pi.
Шаг 5: Запуск программы отслеживания
Скачайте предоставленный скрипт PiFace.py, поместите его на Pi и выполните:
cd /path/to/PiFace.py
python PiFace.py
OpenCV запускает детекцию лиц на разрешении 320×240, ища правый профиль, левый профиль и фронтальные лица. Сервоприводы корректируются со скоростью выше одного раза в секунду, удерживая камеру в центре обнаруженного лица.
Посмотрите демо-видео, ссылки на которые в оригинальной статье, для справки.
Производственный процесс
- Как считывать температуру с DS18B20 на Raspberry Pi 2
- Профессиональный мониторинг температуры на Raspberry Pi с датчиком DS18B20
- Измерение температуры на Raspberry Pi с датчиками Maxim 1-Wire и мостом DS2482 I2C
- Точный мониторинг температуры в серверной на Raspberry Pi
- Интеграция данных сенсоров в Raspberry Pi: практическое руководство
- Датчик слежения за линией на Raspberry Pi — простой детектор двери/линии KY‑033
- Обнаружение молний с Raspberry Pi и AS3935: практическое руководство
- Продвинутое отслеживание теннисного мяча на Raspberry Pi с OpenCV
- Создание headless сигнализации утечки воды на Raspberry Pi 2 с Adafruit T‑Cobbler Plus
- Практическое руководство: real-time панорамирование/наклон для отслеживания лиц на Raspberry Pi