Попробуйте новый проект Raspberry Pi

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

Решение может состоять в том, чтобы убедиться, что ваши домашние животные не заперты в доме, когда вы включаете будильник. Однако, как говорится, «Легче сказать, чем сделать». Кот Бадди всегда найдет способ проникнуть внутрь. Кроме того, если мне нужны наружные датчики движения вокруг моей собственности, ложный срабатывание тревоги все еще возможно из-за собаки, кошки или чего-либо, что движется в зависимости от датчика.

На сегодняшний день существуют системы сигнализации для борьбы с ложными тревогами, но в какой степени и с какой долей ручной настройки? В большинстве наружных лучей используется несколько датчиков PIR (пассивного инфракрасного излучения) — все они должны сработать, чтобы прозвучал сигнал тревоги, или можно отрегулировать высоту датчика PIR — метод проб и ошибок для достижения наилучших результатов неизбежен. Несмотря на то, что эти решения значительно минимизируют количество ложных срабатываний, они по-прежнему крошечны в мире, где закон Мерфиявляется законом, даже относится к злоумышленникам.

У меня есть гораздо лучший подход к подаче сигнала тревоги задним числом, если злоумышленник пробирается на вашу собственность — современный и технологически ориентированный. Камера безопасности, которая обнаруживает движение с помощью машинного обучения, чтобы определить, исходит ли движение от человека или любого другого объекта, который может вызвать ложную тревогу.

Установка

Основываясь на идее, что с каждым новым проектом (предыдущим был Проект Raspberry Pi: Как сделать бассейн с солнечным подогревом), я хочу управлять каждым из одного интерфейса. Я снова выбрал два Raspberry Pi. Один Raspberry Pi вместе с датчиком PIR и камерой Raspberry Pi будет действовать как датчик движения, а другой, вместе с клавиатурой, ЖК-экраном и динамиком, будет функционировать как подсистемы оповещения и постановки на охрану. Ниже приведен полный список запчастей.

*Если вы реализовали проект Проект Raspberry Pi: как сделать бассейн с солнечным подогревом и решили использовать Raspberry Pi 4 в качестве концентратора управления, этот пункт можно исключить из списка список покупок, а общая сумма по проекту составит 1373,81 рэнда.

**если у вас есть старая веб-камера или даже старый ноутбук со встроенной веб-камерой (чтобы использовать такую, см. видео YouTube Как преобразовать веб-камеры ноутбука в веб-камеры USB для объяснения утилизации) камеру Raspberry Pi также можно исключить из списка покупок, доведя общую сумму до 1003,81 руб.

Схемы подключения

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

The Brawn — подсистема камеры безопасности

Подсистема камеры безопасности — это глаза операции, она обнаруживает движение с помощью инфракрасного датчика, фотографирует то, что его спровоцировало, и отправляет изображение для обработки в мозг системы — центр управления.

ИК-датчик

Датчики PIR имеют набор ручек, используемых для регулировки продолжительности, в течение которой должно обнаруживаться движение (ручка задержки времени), и расстояния, на котором должно начинаться обнаружение (ручка расстояния). Ручка задержки времени должна быть установлена ​​на минимум (обычно 5 секунд), что достаточно для того, чтобы движение не запускало датчик несколько раз, и чтобы мы не пропустили последующие обнаружения. Настройка ручки расстояния потребует некоторой тонкости в зависимости от того, где будет установлена ​​камера (диапазон варьируется от 3 до 7 метров).

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

Я кратко описал, как работает датчик PIR; для более заинтересованных читателей просмотрите блог Изучайте программирование с помощью Arduino IDE — датчик движения PIR.

The Brawn — подсистема оповещения и контроллера

Наше наблюдение (подсистема камеры видеонаблюдения) ничего не значит, если оно не может предупредить нас об опасности. Нам нужен способ, чтобы система безопасности подавала сигнал тревоги при обнаружении злоумышленника. Динамик позволит это. Нам также нужен способ сказать камере, чтобы она начала обнаруживать движение. Есть много разных способов сделать это, но я выбрал подход с клавиатурой, который можно использовать для постановки на охрану, снятия с охраны и отключения звука тревоги. Кроме того, конечный пользователь получает обратную связь от светодиодного и ЖК-экрана.

ЖК-экран

На ЖК-экране отображаются сообщения для пользователя системы, первое из которых описывает различные команды, которые она принимает.

*: включить будильник

D: отключить будильник.

A: принять введенную команду

другое: любая другая комбинация символов будет отправлена ​​в качестве пароля для отключения будильника.

Сообщение для отображения на экране передается на ЖК-модуль по протоколу I2C.

Протокол I2C (Inter-Integrated Communication) — это протокол синхронной связи (который требует тактового сигнала для отправки данных). Для связи между ведущим (Raspberry Pi) и ведомым устройством (ЖК-экраном) требуется всего два соединения — одно соединение используется для синхронизации, а другое — для передачи данных. Строка данных содержит буквы для отображения с Raspberry Pi на ЖК-экран. Подробнее о протоколе I2C см. в блогах ОСНОВЫ ПРОТОКОЛА СВЯЗИ I2C и I2C.

Клавиатура

Используемая клавиатура представляет собой мембранную клавиатуру с набором проводов, которые соединяются со строками и столбцами. Задача Raspberry Pi — определить, какая строка связана с каким столбцом при нажатии кнопки. Он делает это, последовательно подтягивая контакты 1, 2, 3, 4 столбца к высокому уровню (подавая напряжение), а затем опрашивая состояния контактов 5, 6, 7, 8 ряда. Если обнаруживается, что вывод строки находится в низком состоянии, Raspberry Pi отмечает этот вывод и вывод столбца, который был переключен в высокий уровень. Затем Raspberry Pi запрашивает таблицу в памяти, чтобы определить кнопку, соответствующую указанной строке и столбцу.

Это сводится к тому, какой вывод столбца «коротко замыкает» какой вывод строки. Как можно себе представить, короткое замыкание на контактах ряда может быть опасным для Raspberry Pi. Многие проекты, в которых используются мембранные клавиатуры, обычно размещают резисторы, идущие от рядных контактов клавиатуры и Raspberry Pi. Максимальный ток, который может выдержать вывод для Raspberry Pi, составляет 16 мА. Для выхода 3,3 В, подаваемого на контакты колонки, резистор приблизительно 210 Ом гарантирует, что мы не повредим Raspberry Pi.

Внимательный читатель заметил бы, что в таблице спецификаций не указаны резисторы на 210 Ом, и они не показаны на электрической схеме. Это потому, что мне нравится жить на грани. Существует реальная вероятность того, что мой Raspberry Pi может быть уничтожен в тот или иной момент.

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

Это перенос аппаратной части на программную, где действительно происходит волшебство.

Мозг – программная сторона дела

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

Когда в конфигурацию безопасности вносятся изменения, т. е. когда делается запрос на постановку на охрану, снятие с охраны или отключение звука тревоги, изменение размещается на коммутаторе, который направляет сообщения в подсистему камеры безопасности и подсистему оповещения и контроллера — их соответствующие микросервисы действуют соответствующим образом в зависимости от изменения. Концентратор управления отвечает за отправку этих сообщений на биржу. Ниже приведено изображение связи между различными подсистемами и их микросервисами.

Микросервис безопасности

Микрослужба безопасности в своей базовой форме представляет собой службу весенней загрузки, которая координирует постановку на охрану, снятие с охраны, отключение звука и обнаружение нарушений безопасности в системе. В частности, микрослужба безопасности запускает скрипт Python для обнаружения людей на изображении, а затем подает сигнал тревоги.

Сценарий Python использует YOLO (You Only Look Once), одноэтапный детектор объектов (причудливый термин, означающий быстро) для обнаружения людей на изображении. YOLO может обнаруживать 80 различных объектов, среди которых люди. (Вы можете найти полный список обнаружений здесь). OpenCV — библиотека с открытым исходным кодом для компьютерного зрения — выступает в роли загрузчика детектора объектов YOLO.

Скрипт работает, просматривая переданное изображение и находя объекты, которые он обучен обнаруживать, рисуя вокруг них ограничивающую рамку. Детектор, конечно, пока еще только компьютерная программа. Он делает ошибки в обнаружении объектов. Таким образом, существует вероятность того, что он нарисует несколько ограничивающих рамок вокруг обнаруженных объектов. Ниже приведен пример этой ошибки, допущенной при обнаружении человека:

Как вы понимаете, это проблематично — если мы хотим узнать, сколько объектов определенного типа находится на изображении, детектор ложно сообщит о четырех лицах на приведенном выше изображении. Для борьбы с этим мы используем концепцию, называемую подавлением немаксимумов, метод выбора одного объекта с использованием меры перекрытия. Мы выбираем подходящую ограничивающую рамку, используя перекрытие всех обнаруженных ограничивающих рамок. Подробнее о подавлении немаксимальных значений читайте в блоге Немаксимальное подавление: теория и реализация в PyTorch.

Каждому объекту, который YOLO находит, присваивается значение достоверности. Применяя немаксимальное подавление к изображению Дуэйна Джонсона, YOLO с уверенностью 99% содержит человека, находящегося в области ограничивающей рамки.

И вы посмотрите на это! YOLO удалось перехитрить всех, кто всегда говорил, что Дуэйн Джонсон выглядит как скала.

Я кратко рассказал, как был реализован код машинного обучения security-micro-service. Это намного больше, чем я объяснил — для более заинтересованных читателей, смотрите блог Y OLO objectDetection with OpenCV Адриана Роузброка для получения дополнительной информации (я внимательно следил за этим руководством при разработке компонента обнаружения объектов).

Корпус

Мозги и мускулы нуждались в шикарном наряде. Так же, как тот 3D-принтер, который вы купили с единственной целью напечатать что-то полезное, но когда-либо печатали только фигурки? Да, я тоже попал в эту ловушку, но с тех пор, как я начал этот проект, я, наконец, смог использовать его по той причине, по которой я его купил.

Для проектирования корпусов я использовал Tinkercad — очень удобный инструмент для 3D-моделирования для начинающих.

Корпус камеры безопасности

Корпус камеры безопасности необходим для размещения датчика PIR, Raspberry Pi, камеры и светодиода. У меня также было требование, чтобы она была регулируемой — я хотел иметь возможность настроить вид камеры после установки для достижения наилучших результатов.

Модули датчика PIR и камеры размещаются на крышке корпуса. Оба этих модуля имеют довольно маленькие монтажные отверстия, для которых у меня не нашлось подходящих винтов. Следующим лучшим способом было напечатать экструзии, по которым могут скользить монтажные отверстия, удерживаемые на месте с помощью резиновых заглушек (мне нужно было напечатать эти заглушки с помощью типа нити, называемой ТПУ, которая гибка, как резина). Установка светодиода была простой. Просто сделайте отверстие, через которое он пройдет, и закрепите его на месте с помощью горячего клея.

У Raspberry Pi монтажные отверстия немного больше, чем у датчика PIR и модуля камеры, что позволяет мне устанавливать резьбовые вставки в корпус, в которые я могу вкручивать винты M3 . Эти же резьбовые вставки использовались для добавления креплений, в которые могла ввинчиваться крышка.

Вы можете заметить что-то странное у основания корпуса. Это ползунок, который я разработал так, чтобы корпус можно было легко скользить по шаровому шарниру. Секция шарового шарнира состоит из 4 частей: настенного крепления, ползунка, гнезда и шара,

Очевидно, что я не могу распечатать все эти детали вместе, поэтому я напечатал их по отдельности и склеил горячим клеем.

Корпус оповещения и контроллера

Корпус, который я разработал для извещателя и контроллера, был намного проще, чем конструкция для камеры слежения. Он состоит только из крышки, к которой приклеиваются клавиатура, динамик и светодиод, а также вкручиваются ЖК-экран и Raspberry Pi (опять же с помощью резьбовых вставок и винтов M3).

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

Строительство

К сожалению, у меня нет видеозаписи 3D-дизайна, напечатанного на моем принтере, но я создал отдельное видео, чтобы продемонстрировать, как я обычно занимаюсь проектированием, нарезкой (подготовкой 3D-дизайна для печати на 3D-принтере) и печатью моего конструкции. Демонстрация не имеет отношения к данному проекту — я купил б/у аудиосистему, у которой не было оригинальных стоек сабвуфера. Прекрасная возможность для меня разработать и напечатать набор.

Двигаясь дальше

  • Обеспечение работы камеры видеонаблюдения от батареи — беспроводная связь позволяет упростить размещение камеры даже там, где нет питания (в настоящее время эта работа продолжается, поэтому следите за обновлениями в другом блоге на эту тему)
  • Потоковое видео по запросу — аналогично современным камерам видеонаблюдения, идеальной функцией было бы предоставление пользователю возможности потоковой передачи отснятого материала одним нажатием кнопки.
  • Разрешить многокамерную систему — установка нескольких камер обеспечит более широкий охват системы безопасности.
  • Настройте собственную сеть — в текущей версии безопасность зависит от домашней сети. Если отключится электричество (что вполне реально в наши дни), мы должны убедиться, что система безопасности продолжает работать. Это также означает добавление источников питания от батарей к концентратору управления и аппаратному контроллеру.
  • Используйте Docker для развертывания — для более простого способа развертывания различных сервисов, которые делают возможным этот проект, в будущем следует рассмотреть возможность улучшения, которое заключается в создании и развертывании образов Docker для сервисов.
  • Используйте облачное решение для некоторых сервисов — в настоящее время микросервис безопасности можно перенести в облако, чтобы он выполнял необходимое обнаружение объектов машинного обучения.
  • Добавьте безопасность OAuth2.0 в Control Hub — только подсистема контроллера защищена паролем при отключении тревоги, аналогичным образом нам нужно добавить безопасность в Control Hub, чтобы предотвратить несанкционированные запросы на отключение тревоги с передней панели Control Hub. -конец

Дайте мне код — я хочу построить его!

Следуйте инструкциям README, указанным в репозитории deploymentsGitHub.

Демо

Ниже представлена ​​демонстрация работы системы.