Необычные проекты интернета вещей. Пёс-охранник на Raspberry Pi и умная видеоняня

—

от автора

Умный дом делает жизнь комфортнее и безопаснее. Безопасность никогда не бывает лишней. Одна из задач интернета вещей — защита человека и его жилища, поэтому мы ставим камеры видеонаблюдения с датчиками движения и уведомлениями через интернет. В любой момент можно достать телефон и проверить, что в дом не пробрались еноты.

Пёс-охранник на Raspberry Pi

К сожалению, не все животные боятся видеокамер. Здесь на помощь приходит «виртуальная собака» с колонками.

Виртуальная собака Woof — это простенький скрипт на Python, который запускает аудиозапись собачьего лая через динамики, чтобы отпугнуть барсуков, енотов или людей, если те приблизились к дому.

Пара колонок подключена Raspberry Pi. Одна колонка направлена на входную дверь, а вторая — на заднюю, откуда тоже может исходить угроза. Громкость лая динамически изменяется между динамиками, словно собака бегает по дому от одной двери ко второй и заливается лаем.

Автор изобретения Таннер Коллин (Tanner Collin) установил в доме такую «собаку» перед отъездом в отпуск. Вот одна из колонок:

Технически виртуальная собака работает следующим образом:

  1. Камеры наблюдения транслируют RTSP-поток в программу Blue Iris NVR, которая крутится на отдельной коробочке под Windows.
  2. Когда Blue Iris обнаруживает объект в определённой области, то отправляет MQTT-сообщение в канал iot/cameras брокера Mosquitto, запущенного на медиасервере.
  3. На Raspberry Pi работает скрипт, который прослушивает iot/cameras с помощью модуля asyncio-mqtt. Он получает JSON-сообщение вида {"serial": "SE-N-ZoneB"} и декодирует его. Если название камеры соответствует указанному в скрипте, то запускается на воспроизведение соответствующий аудиофайл с помощью Pygame.

Код скрипта:

import os, sys import logging logging.basicConfig(stream=sys.stdout, format='[%(asctime)s] %(levelname)s %(module)s/%(funcName)s - %(message)s', level=logging.DEBUG if os.environ.get('DEBUG') else logging.INFO)  import time import json  import asyncio from asyncio_mqtt import Client import pygame  import secrets  COOLDOWN = time.time()  CAMERAS = { 'NE-W-ZoneB': { 'name': 'Front Door', 'sound': 'barkLR.ogg', }, 'SE-N-ZoneB': { 'name': 'Side Door', 'sound': 'barkRL.ogg', }, 'B-E-ZoneB': { 'name': 'Back Door', 'sound': 'barkLR.ogg', }, }  async def play_sound(filename): pygame.mixer.music.load(filename) pygame.mixer.music.play()  logging.info('Playing sound %s', filename)  while pygame.mixer.music.get_busy(): #pygame.time.Clock().tick(10) await asyncio.sleep(0.1)   async def barkbark(sound): global COOLDOWN if time.time() - COOLDOWN < 15.0: logging.info('Cooldown skipping.') return COOLDOWN = time.time()  await asyncio.sleep(0.1)  await play_sound(sound)  logging.info('Done barking.')  async def process_mqtt(message): text = message.payload.decode() topic = message.topic logging.info('MQTT topic: %s, message: %s', topic, text)  if not topic.startswith('iot/cameras'): logging.info('Invalid topic, returning') return  try: data = json.loads(text) except json.JSONDecodeError: logging.info('Invalid json, returning') return  serial = str(data.get('serial', ''))  if serial not in CAMERAS: logging.info('Invalid serial, returning') return  camera = CAMERAS[serial]  logging.info('Barking %s...', camera['name'])  await barkbark(camera['sound'])   async def fetch_mqtt(): await asyncio.sleep(3) async with Client('192.168.0.100') as client: async with client.filtered_messages('iot/cameras') as messages: await client.subscribe('#') async for message in messages: loop = asyncio.get_event_loop() loop.create_task(process_mqtt(message))   if __name__ == '__main__': logging.info('') logging.info('==========================') logging.info('Booting up...')  pygame.init() pygame.mixer.pre_init(buffer=4096) pygame.mixer.init(buffer=4096)  loop = asyncio.get_event_loop() loop.run_until_complete(fetch_mqtt())

Ложные срабатывания (на свет автомобильных фар или мелких животных) не слишком опасны. Скорее наоборот, они делают виртуальную собаку более реалистичной, потому что у настоящих собак происходят такие же «ложные срабатывания».

В будущем автор планирует добавить в систему физический триггер на ступеньках перед домом, чтобы пёс начинал лаять конкретно на человека, который подошёл к двери. Рассматривается возможность установки внутри дома радарного датчика HFS-DC06, который срабатывает через внешнюю стену.

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

В любом случае, дополнительная безопасность никогда не помешает.

Умная радионяня

Ещё один интересный проект интернета вещей — умная радионяня The Hungry Baby Alarm с системой искусственного интеллекта. Программа машинного зрения интерпретирует движения младенца в коляске, оценивая степень его голода (и приближение плача).

То есть эта радионяня подаст сигнал о том, что ребёнок голоден и плачет, ещё до наступления этих событий.

По видеозаписи можно понять, как работает система. К сожалению, разработчик Калеб Олсон (Caleb Olson) не выложил код, а только показал его фрагменты и упомянул некоторые модули, которые использует для распознавания движений в реальном времени (как MediaPipe Face Mesh).

Сейчас автор подал заявку на патент. Но никто не мешает написать такую программу и опубликовать в открытом доступе, чтобы использовать её с произвольной видеокамерой. Действительно полезная утилита в домашнем хозяйстве.



ссылка на оригинал статьи https://habr.com/ru/company/globalsign/blog/681722/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *