Око Саурона на OpenCV. Проект для Raspberry Pi

56 673
8.5
Амперка547 тыс
Опубликовано 27 марта 2019, 8:59
Заведи Raspberry Pi — amperka.ru/product/malina?utm_...
Cегодня видео о необычной картине. Это пейзаж Мордор, и в его центре живёт механический глаз Саурона. Он будет следить за любым, кто пройдёт мимо картины. Сделано это на OpenCV для Raspberry Pi.

Начну с самого сложного — картины. С Raspberry и OpenCV я работал и раньше, а вот с изобразительным искусство — не сложилось. Поэтому я скачал подходящую картинку из Инета, прошёлся парой фильтров в Photoshop и распечатал. Только не на бумаге, а на специальном холсте для плоттера. Полотно на 70 процентов состоит из хлопка, а на 30 из синтетики. Внешне ткань очень похожа на настоящую картину, но она прочнее холста и легче натягивается на подрамник.

Картинка получилась размером 120 на 85 сантиметров. Это чуть больше стандарта А0. Поэтому купить раму не составило труда — выбор готовых рам огромный. Я натянул холст на подрамник и закрепил его строительным степлером.

Всевидящее око сделаю из точечного светильника. Самый мощный, который я нашёл оказался со светодиодом на 3 Вт. Он дал чёткое белое пятно. Но у Саурона глаз был огненный! Если покрашу линзу или поставлю цветной фильтр, световой поток упадёт в разы — его не хватит для нужного эффекта.

Заменю белый светодиод жёлтым на 10Вт. Старому диоду хватало 600 мА, новому нужно в полтора раза больше. Поэтому выкину регулятор питания, а диод подключу через внешний адаптер Robiton.

Конструкция весит больше килограмма. Поэтому для вращения глазом использовал сервоприводы с металлическим редуктором — FS5109M. На 6В они выдают крутящий момент в 10 кг·см. Управляющая плата — Raspberry Pi 3B+. Подключю к ней сервы через Troyka Cap — это как Troyka Shield, только не под Ардуино, а для Распбери.

Подключу оригинальную камеру с сенсором Exmor от Сони. Можно было бы использовать обычную вебку, но тогда я потерял бы в скорости обработки видеопотока. USB-хост — ахилесова пята малинки. Мне нужны все ресурсы Расспбери, ведь движение буду отслеживать с помощью OpenCV.

OpenCV — это открытая библиотека алгоритмов компьютерного зрения. Она справляется с распознаванием символов и лиц, трекингом движущихся объектов и автоматической обработкой видеопотока. Версию библиотеки под Python легко установить из репозитория.

Я же пошёл путём настоящего самурая — скачал исходники и собрал OpenCV. Не всё прошло гладко, но зато я сформулировал четыре правила:
— для OpenCV не хватит карты на 8 Гб. Подойдёт microSD на 16 или 32 Гб;
— для сборки используйте только два ядра, иначе Raspberry рискует перегреться и зависнуть;
— отключите в конфиге компиляцию всех примеров. Это сэкономит кучу времени;
— не забудьте поставить GTK, пакет для работы с оконными интерфейсами.
Следуйте этим заповедям, и библиотека соберётся с первого раза, всего за пять-шесть часов.

Использую алгоритм поиска движения в кадре. Не буду лезть в сложную математику — достаточно что библиотека определяет движущийся объект и сообщает координаты его центра. Напишу несложный код на C++, который будет управлять сервами и наводить луч света по этим координатам.

Осталось решить последнюю проблему. Око должно оставлять чёткий луч света, прямо как в фильме. Вариант «поправить на посте» я не рассматриваю, поэтому подпущу дым. Помните как выглядит свет маяка в тумане? Попробую повторить этот эффект. Для этого у меня есть аж три ультрозвуковых увлажнителя. Их силёнок не хватило. Поэтому возьму профессиональную дым машину на 400 Вт. Залью в неё смесь глицерина, спирта и воды. И...

Let's go party!

В проекте использованы:
• Raspberry Pi 3 B+ — amperka.ru/product/raspberry-p...
• Troyka Cap — amperka.ru/product/raspberry-t...
• microSD-карта с ОС Raspbian — amperka.ru/product/raspbian-mi...
• Raspberry Pi Camera Board v2.1 — amperka.ru/product/raspberry-p...
• Сервопривод FS5109M — amperka.ru/product/servo-fs510...
• Импульсный блок питания (1000 мА) — amperka.ru/product/wall-plug-1...

#проекты #amperka #raspberry #rpi3 #opencv
жизньигрыфильмывесельеавтотехномузыкаспортедаденьгистройкаохотаогородзнанияздоровьекреативдетское