Ещё одно видеонаблюдение с AI и телегой
Для своевременного реагирования на проникновение непрошенных граждан туда, куда им не положено, установлена видеокамера. Следить круглосуточно за ней некому, поэтому разными ухищрениями пытались делать уведомления о событиях. А на пикабу вдруг был какое-то время назад замечательный пост про прикрученный к камере искусственный интеллект для распознавания образов и отправки в телегу уведомлений.
Покрутил-повертел проект автора, и понял, что тоже хочу подобное, но со своими свистелками, да ещё чтоб работало и на Windows, и на Linux. Я во всяких шарпах не очень, чтобы там асинхронный код отлаживать, поэтому на старом (но новом) добром C++ написал такую штуку, которая:
Берёт (почти) любой источник видео (можно скормить rtsp, а можно обычный видео файл - собственно, картинки в посте из видеофайла и взяты, чтобы не палить объект)
С помощью AI анализирует видео, и, если находит там человека, животное или автомобиль - шлёт в телеграм уведомление с картинкой, типа такого:
Когда объект в кадре задетекчен - начинается запись видео, и оно пишется, пока объект не потеряется.
Когда видео файл записан - бот присылает в телегу раскадровку - чтобы одним взглядом было понятно, есть там что интересное или нет (это оказалось самой полезной фичей):
Под раскадровкой видео есть кнопка для скачивания. Размер указывается приблизительно, полное число мегабайт, просто для понимания, сколько это видео будет скачиваться
Умеет присылать список видеофайлов за последние сколько хочешь часов, а также раскадровки - также за настраиваемый период - удобно смотреть, что произошло, например, за ночь
Умеет просто прислать снимок с камеры в текущий момент, и всякое по мелочи - репорт состояния диска, и т.п.
Написано всё это счастье с использованием C++, OpenCV, и либы для телеграм-бота tgbot-cpp. Опирается на всё тот же CodeProject AI. Соответственно, всё кросс-платформенное.
Я у себя в гитхабе накомпилил под Windows, а под линукс/мак придётся самим собирать, но это довольно просто, там же на гитхабе есть и инструкция, и workflow-файл.
Как это можно заюзать для себя:
Качаем CodeProject AI server отсюда: https://www.codeproject.com/Articles/5322557/CodeProject-AI-Server-AI-the-easy-way и устанавливаем
Открываем в браузере консоль - http://localhost:32168/ - и устанавливаем модуль для распознавания YOLOv5 (можно выбрать какой подходит для вашей платформы - CUDA/не CUDA и пр)
Заводим телеграм-бота и запоминаем его токен
Качаем последний релиз из гитхаб: https://github.com/sergrt/CameraAiDetector/releases и распапковываем
Правим файл settings.json. Как минимум нужно настроить следующие параметры:
- source - источник данных. Вбиваем сюда адрес rtsp потока или путь к видео файлу
- storage_path - куда будут сохраняться снимки, видео, превьюшки и пр.
- bot_token - токен бота
- allowed_users - юзеры, допущенные до работы с ботом, и которым будут приходить алярмы. Как получить свой id можно узнать в гугле
Теперь можно попробовать запустить программу. Если будет ругаться на отсутствие библиотек C++, то их можно взять у Microsoft: https://aka.ms/vs/17/release/vc_redist.x64.exe
Если вам повезло и всё заработало, то теперь можно постучаться в телегу к боту и отправить ему /start. В ответ бот пришлёт главное меню, из которого, в общем, то всё понятно:
Все эти кнопки можно дублировать командами, список можно глянуть в описании проекта на гитхабе.
Когда случится алярма, то бот пришлёт картинку, а следом превьюшку. Под превьюшкой кнопка, которая позволяет скачать и посмотреть записанное видео. Также бот будет присылать уведомления о каких-то неполадках.
Узнать, сколько места осталось на диске можно командой "Статус".
Ну вот и всё. Код проекта полностью открыт и доступен здесь: https://github.com/sergrt/CameraAiDetector. Делайте со мной, делайте как я, делайте лучше меня :)