Отправляем снимок с веб-камеры в 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=%25..." -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 бот, Камера, Слежка, Датчик движения, Оповещение, Длиннопост