Как создать собственную MMS-камеру с активацией по движению на Linux, Python и S3

Автор: | 29.07.2026

Ну и неделя выдалась — просто цирк! Все мы в Twilio получили море удовольствия, наблюдая за тем, что вы начали создавать с помощью Twilio MMS. Многие из вас за выходные освоили туториал Кевина «Начало работы с MMS», чтобы приступить к своим проектам. Конечно, наблюдать за вашими усатыми лицами, созданными с помощью примера из прошлой недели, продолжает нас безумно веселить.

На этот раз я решил рассмотреть что-то более приближенное к реальной жизни. Работая в команде разработчиков-евангелистов, я путешествую по миру и встречаюсь с разными разработчиками, создающими крутые проекты. Во время поездок наблюдение за квартирой в Бруклине определенно дает некоторое душевное спокойствие. Для своего второго проекта я решил обеспечить это в реальном времени с помощью MMS. Такие камеры можно купить на Amazon за 180 долларов, но мне захотелось проверить, смогу ли я создать свою собственную за 0 долларов, используя свой Linux-десктоп, веб-камеру, которая у меня уже есть, и немного кода на Python.

Как это выглядит? Давайте посмотрим, что произошло, когда явно взволнованный мутант-всадник вломился в мою квартиру после установки камеры на базе Twilio.

Фух. Жутковато.

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

# Что вам понадобится

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

— Аккаунт Twilio — вы можете зарегистрироваться бесплатно здесь.

— Twilio-номер с поддержкой MMS (доступно в США и Канаде).

— Python

— pip

— Модуль Twilio для Python

— Бесплатный аккаунт Amazon Web Services — зарегистрироваться можно здесь.

— boto — официальный пакет Python для Amazon Web Services.

— motion — программный детектор движения для Linux.

— Веб-камера с поддержкой Video4Linux — я использовал Logitech C920 за 70 долларов.

# Как это работает

Мы будем использовать несколько различных технологий для создания нашей MMS-камеры с активацией по движению. Мы воспользуемся отличным программным детектором движения для Linux (называется Motion), чтобы отслеживать любые движения в кадре. Когда Motion обнаружит движение, он запустит наше приложение на Python, которое будет искать произвольное количество изображений за несколько секунд для создания оповещения.

Если бы наша машина, подключенная к камере, была доступна в публичном Интернете, изображения были бы легко доступны для Twilio. Однако, как показывает быстрый поиск в Google, размещение камеры безопасности в Интернете может быть не лучшей идеей. Поэтому наш скрипт загрузит фотографию в Amazon S3, чтобы Twilio мог ее получить. Затем мы используем Twilio MMS для отправки сообщения с публичной ссылкой на S3 в качестве MediaUrl.

# Начало работы

Начнем с установки зависимостей. Сначала нам нужно установить несколько модулей Python для взаимодействия с Twilio и Amazon S3. Обратите внимание, если вы не используете virtualenv, вам понадобятся права администратора для установки.

При желании вы можете использовать файл requirements.txt для этого.

Наконец, мы создадим новый S3-бакет для хранения наших фотографий. Сначала войдем в AWS Management Console и перейдем в панель управления S3. Затем нажмем кнопку «Создать бакет» в верхнем левом углу.

Далее назовем наш бакет.

Затем откроем свойства вновь созданного бакета.

И добавим новую политику бакета в диалоге разрешений:

Нажмем «Добавить новую политику».

Затем напишем новую политику, чтобы сделать загруженные фотографии общедоступными, чтобы Twilio мог получить к ним доступ для наших MMS-уведомлений. Политики бакетов пишутся на JSON, и вы можете использовать этот шаблон в качестве руководства:

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

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

Затем сгенерируем новый ключ.

Нажмем «Показать ключ доступа», и мы сможем сохранить наши значения для учетных данных AWS или загрузить CSV-файл с корневым ключом.

После завершения настройки AWS мы готовы настроить Motion.

# Настройка Motion

Первое, что нам нужно сделать, — это настроить Motion для работы с нашей камерой. Это потребует изменения нескольких параметров конфигурации для выполнения скрипта, который мы напишем вместе. Мы можем скопировать приведенный ниже пример в файл, который назовем `local.conf`.

Вот пример с важными значениями, которые нам нужны:

С этой конфигурацией каждый раз, когда Motion обнаруживает движение в кадре, он выполнит приложение на Python дважды — один раз в начале движения и один раз в конце. Теперь осталось только написать само приложение.

# Подключение Motion к вашему телефону с помощью Twilio

После настройки бакета и детектора движения мы можем приступить к написанию кода. Нашему приложению нужно выполнить три задачи:

— Получить изображение, записанное Motion.

— Загрузить это изображение в место, откуда Twilio сможет его получить.

— Создать новое сообщение Twilio с местоположением этого изображения в качестве MediaUrl.

Давайте создадим это приложение вместе, открыв новый файл с именем `motionalert.py`.

Сначала импортируем все необходимое для приложения и создадим класс, который будет служить основой для оповещений, которые мы хотим отправлять из Motion через Twilio на наши телефоны. Также создадим обработчик исключений, чтобы корректно возвращать информацию об ошибках в командной строке с подсказкой использовать флаг `—help` нашего интерфейса командной строки.

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

Теперь, когда у нас есть код для поиска изображений, нам нужно загрузить их в S3, чтобы Twilio мог их найти для создаваемых нами сообщений. Здесь мы начинаем использовать тот S3-бакет, который настроили ранее в этом руководстве. Давайте определим функцию в нашем классе `MotionAlert` для загрузки изображений в этот бакет.

Теперь, когда изображение находится в месте, доступном для Twilio, добавим еще одну функцию в наш класс `MotionAlert` для отправки MMS на наши телефоны.

Теперь свяжем все это вместе с помощью функции `send`, чтобы объединить наши три функции.

Наконец, создадим интерфейс командной строки для нашего класса с помощью `argparse`.

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

# Попробуем

Теперь, когда наш S3-бакет и Motion настроены, а приложение на Python написано, мы можем попробовать и посмотреть, что получится.

Сделаем это, выполнив следующую команду, используя файл `local.conf`, который мы создали в начале руководства.

`motion -c local.conf`

Мы должны получить некоторый вывод, указывающий, что Motion запускается:

Интересно, почему у того парня было такое вытянутое лицо. БАМ.

# Следующие шаги

Теперь, когда у нас есть базовая камера с активацией по движению, отправляющая MMS-уведомления, мы можем добавить еще больше функциональности в будущем. Например, мы могли бы:

— Отправлять MMS-уведомления на несколько телефонов.

— Запускать и останавливать камеру по SMS-команде.

— Преобразовывать записанное видео в один анимированный GIF вместо отдельных кадров.

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

— Установить эту систему на маломощное устройство Linux, например Raspberry Pi.

Эксперименты с оборудованием, таким как камеры, в творческих целях могут раскрыть еще больший потенциал Twilio MMS. Если вы создаете что-то креативное с камерами, я обязательно хочу об этом услышать — вы можете найти меня в Twitter @dn0t или по электронной почте rob@twilio.com.