Отправляем снимок с веб-камеры в Telegram при обнаружении движения



На работе возникла идея фиксировать всех кто входит к нам в кабинет до начала и после окончания рабочего дня.
Потребность в этом появилась после того как мы не досчитались двух наборов мелких отвёрток.Вариант что сами потеряли или дали кому-то и забыли отпал — больше склонялись к варианту что кто-то их взял из других сотрудников.

Идея заключалась в том чтобы камера реагировала на движения, снимала короткое видео и слала снимок в группу в Telegram.

В итоге я это реализовал и решил написать инструкцию для тех кто тоже хочет подобное.

Сразу обозначим два момента:









1. Инструкция адаптирована для варианта когда веб-камера находится физически в одном месте, а сервер — в другом, тогда нужно транслировать поток по сети.









Если у вас и камера и серверная часть будет на одном компьютере или камера изначально сетевая — можно обойтись без пунктов  1 и 2, а сразу перейти к пункту 3.

2. Подразумевается что у вас уже есть свой бот для Telegram, если нет, то вот инструкция:  шаг 1 и 2

Итак, собственно сама инструкция:

1. Подключаем к компьютеру веб-камеру.

2. Устанавливаем на комп YawCam и настраиваем YawCam так:

Отправляем снимок с веб-камеры в Telegram при обнаружении движения telegram, telegram бот, камера, слежение, Датчик движения, оповещение, длиннопост
Отправляем снимок с веб-камеры в Telegram при обнаружении движения telegram, telegram бот, камера, слежение, Датчик движения, оповещение, длиннопост
Теперь камера ведет трансляцию в потоке MJPEG, далее нужно настроить сервер на котором его будем принимать и обрабатывать дальше.
3. Ставим на другой компьютер/сервер iSpy, добавляем камеру в качестве источника указываем MJPEG
Отправляем снимок с веб-камеры в Telegram при обнаружении движения telegram, telegram бот, камера, слежение, Датчик движения, оповещение, длиннопост








4. Далее указываем маску детектора движения, в данном случае это дверь кабинета



Отправляем снимок с веб-камеры в Telegram при обнаружении движения telegram, telegram бот, камера, слежение, Датчик движения, оповещение, длиннопост

5. На следующей вкладке указываем тревоги и действие которое будет обрабатываться при срабатывании тревоги

Отправляем снимок с веб-камеры в Telegram при обнаружении движения telegram, telegram бот, камера, слежение, Датчик движения, оповещение, длиннопост

6. Указываем запись при срабатывании движения:

Отправляем снимок с веб-камеры в Telegram при обнаружении движения telegram, telegram бот, камера, слежение, Датчик движения, оповещение, длиннопост

7. Указываем сохранять снимок с камеры в папку – далее этот снимок будет отсылаться в Telegram



Отправляем снимок с веб-камеры в Telegram при обнаружении движения telegram, telegram бот, камера, слежение, Датчик движения, оповещение, длиннопост

8. Для того чтобы сервер не слал фото в Telegram при каждом срабатывании тревоги (открытия двери) – настраиваем расписание так чтобы оно срабатывало только до начала рабочего дня и после окончания рабочего дня, когда кабинет закрыт и никто посторонний заходить не может.

При этом запись видео и снимков все равно будет производиться при каждом срабатывании, но слаться в Telegram не будет.

Отправляем снимок с веб-камеры в Telegram при обнаружении движения telegram, telegram бот, камера, слежение, Датчик движения, оповещение, длиннопост

9. Указываем место сохранения файлов.

Отправляем снимок с веб-камеры в Telegram при обнаружении движения telegram, telegram бот, камера, слежение, Датчик движения, оповещение, длиннопост

10. Итог выглядит так:

Отправляем снимок с веб-камеры в Telegram при обнаружении движения telegram, telegram бот, камера, слежение, Датчик движения, оповещение, длиннопост

11. Самое главное: скрипт отсылки снимка в Telegram.

По какой-то непонятной причине отправка фото в Telegram не срабатывает из PowerShell, приходится использовать curl:

https://chocolatey.org/packages/curl

https://winampplugins.co.uk/curl/

Используем такой скрипт:

pushd e:\Video\IT\video\IT\grabs\

for /f «tokens=*» %%a in (‘dir /b /od’) do set newest=%%a

popd

set bottoken=»ТОКЕН_БОТА»

set chat=»ЧАТ_ГРУППЫ»

set File=»e:\Video\IT\video\IT\grabs\%newest%»

«c:\Program Files\curl-7.60.0-win64-mingw\bin\curl.exe» -s -X POST «https://api.telegram.org/bot%bottoken%/sendPhoto?chat_id=%ch…» -F photo=»@%File%» -F caption=»Motion detected on IT-room!»

Где:

1. e:\Video\IT\video\IT\grabs\ — путь до снимков с камеры, которые делаются в момент срабатывания тревоги.

2. %newest% — имя самого последнего снимка с камеры, непосредственно в момент срабатывания тревоги, берется первыми тремя строчками скрипта.

3. bottoken – это токен вашего бота Telegram.

4. chat – это ID вашей группы в Telegram, если есть знак «-» то это группа, без знака «-» это ID пользователя, т.е. шлем либо в личку либо в группу.

5. %File% — переменная путь+имя файла снимка, которые и отправляются в Telegram последней командой в скрипте.

12. Итоговый результат:

Отправляем снимок с веб-камеры в Telegram при обнаружении движения telegram, telegram бот, камера, слежение, Датчик движения, оповещение, длиннопост