Пример поумневшего дома продолжение. Умное видеонаблюдение  ( smart video control -  surveillance).

 

 

 

Одного планшета в круглосуточном дежурстве с умным домом не хватило, решил добавить еще один планшет с умным видеонаблюдением (IoT всех стран, соединяйтесь!)

 

 

1. Предисловие.

Системы видеонаблюдения – сегодня самое эффективное техническое средство обеспечения безопасности, позволяющее мониторить обстановку на объекте, контроль за технологическими процессами, присматривать за домашними питомцами или детьми, фиксировать факт совершения кражи и т.д.

Запись изображения камерами и его просмотр, возможность обобщения и анализа информации, просмотр видеоматериала его редактирование и обработка полученных данных задача программного обеспечения. 

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

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

 

 2. Замысел.

В моем случае видеокамеры (IP) приобретались на https://aliexpress.ru, из-за низкой стоимости (не более 3 тыс рублей на момент покупки) в разное время и от разных производителей Hikvision (с китайской прошивкой, невозможностью обновлять прошивки и использовать российское облако для просмотра удаленно), SIMICAM (SIMICAM Digital Store) более свежие недорогие камеры, все камеры оснащены датчиками движения, SIMICAM еще имеют микрофон.

Для просмотра удаленно через облако был приобретен регистратор IPTRONIC NVR0450Pi (9-ти канальный NVR регистратор со встроенным PoE коммутатором, рассчитанный на работу с 5МП сетевыми камерами в режиме реального времени). 

Регистратор оказался в деле неплохим, если не учитывать, что портов PoE 4 для 9 канального регистратора, зоны по датчику движения в регистраторе с моими камерами работать не стали (в службе поддержки объяснили, что они работают только с камерами iptronic), хотя протокол ONVIF присылает тревогу от камеры в регистратор. 

Поэтому было решено написать программное обеспечение на протоколе rtsp для получения тревожных сообщения (с изображениями) по датчику движения от камер через электронную почту и ftp, а для видео потока использовать регистратор (хотя можно использовать и камеру).

Один планшет в доме уже был задействован под систему умного дома, поэтому использовался второй :).

 

3. Реализация.

ПО написано на Kotlin, MVVM, получения почты, извлечения изображений, создание папок и записи файлов, выполнения расчета перцептуального хеша (pHash) выполняются в фоновом пуле потоков с использованием корутинов (coroutines).

 

Расположение элементов экрана. 

В нижней части экрана слева направо кнопки с камерами, активность протокола видеопотока rtsp, кнопка снятия скриншота, количество событий (сработок камерой датчика движения), количество сообщений (электронных писем с изображениями), текущим временем, кнопкой настроек приложения, кнопкой переключения режимов (видео \ просмотр событий).

•красный фон  не активно
•синий фон (для видео) выбрано
•зеленый фон (для изображений) выбрано
•серый фон отключено
•желтый фон (скриншот)

 

 <

Режим просмотра потокового видео.

Протокол rtsp (источник).

 

Потоковый протокол реального времени (англ. real time streaming protocol, сокр. RTSP) — прикладной протокол, предназначенный для использования в системах, работающих с мультимедийными данными (мультимедийным содержимым, медиасодержимым), и позволяющий удалённо управлять потоком данных с сервера, предоставляя возможность выполнения команд, таких как запуск (старт), приостановку (пауза) и остановку (стоп) вещания (проигрывания) мультимедийного содержимого, а также доступа по времени к файлам, расположенным на сервере. Разработан IETF в 1998 году и описан в RFC 2326.

RTSP ссылка выглядит в настройках программы выглядит так:
rtsp://username:password@ip_address:port/ext
username - логин
password – пароль
ip_address – IP адрес камеры или регистратора
 port – порт (обычно 554)
ext - в зависимости от камеры или регистратора возможен различный путь:

например, в регистраторе iptronic используется путь: rtsp://логин:пароль@IP_адрес:554/0 – первый (главный) поток;

или 

универсальная ссылка для IP камер, NVR и DVR:
rtsp://admin: Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. :554/ISAPI/Streaming/Channels/101
где:
rtsp — тип используемого протокола
admin — имя учетной записи
12345 – пароль используемой учетной записи
192.168.200.11 — IP-адрес камеры
554 — RTSP порт камеры (по умолчанию 554, может быть изменен в настройках)
101 - это 1 камера 1 поток
201 - это 2 камера 1 поток
102 - это 1 камера 2 поток

 

Создание скриншотов видео потока.

Создание скриншотов выполняется только при отображении потокового видео.

 

Режим просмотра событий (изображений с камер видеонаблюдения) за сутки.

 <

Список событий (изображений), зафиксированных датчиком движения камеры, отображается в компоненте recyclerView, у меня камеры Hikvision отправляют три изображения (JPG) по датчику движения, а SIMICAM по одному, кроме того SIMICAM может отправлять изображения по датчику движения не только JPG (JPEG), но и BMP.

 

Joint Photographic Experts Group (JPEG). 

Полный разбор формата JPEG описывать не буду (расписан подробно - источник1 , источник2)

Отмечу основную структуру по сигнатурам:

    0xffd8: "Start of Image",
    0xffe0: "Application Default Header",
    0xffdb: "Quantization Table",
    0xffc0: "Start of Frame",
    0xffc4: "Define Huffman Table",
    0xffda: "Start of Scan",
    0xffd9: "End of Image"

 

На всякий случай привожу мои функции для загрузки и разбора JPG.

 

Сразу отмечу, что таблица Хаффмана  у jpg получаемого с моих камер одна, в то время как у полноценного jpg четыре. 

 

 

 <

Теперь самое интересное - перцептивный хэш (pHash) !!!

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

Алгоритм подробно описан в статьях (источник1 , источник2)

 

Если кратко, то выглядит так:

1. Уменьшить размер изображения до 8х8, так что общее число пикселей составляет 64. 
2. Убрать цвет. Маленькое изображение переводится в градации серого, так что хэш уменьшается втрое: с 64 пикселей (64 значения красного, 64 зелёного и 64 синего) всего до 64 значений цвета.
3.  Вычислить среднее значение для всех 64 цветов.
4.  Для каждого цвета получить 1 или 0 в зависимости от того, он больше или меньше среднего.
5. Построить хэш. Переведите 64 отдельных бита в одно 64-битное значение. Порядок не имеет значения, если он сохраняется постоянным.

 

 

Под android данный код не работает, в связи с тем, что библиотеки AWT не поддерживается в Android, вам нужно изменить свою реализацию, чтобы использовать классы Android, тут придется писать код самостоятельно…

Upd. Для пользователей android этого я написал библиотеку pHashCalc, она выложена в Maven Central Repository,  подключение и пример описаны в  (github):

Добавить в gradle и пользоваться...

repositories {
  mavenCentral()
}

dependencies {
   implementation("implementation "ru.avicorp:phashcalc:1.0.0")
}
 

 

 

Несколько алгоритмов расчета хеш-функций находятся на сайте https://www.phash.org/, там же вы можете сравнить 2 изображения, для контроля соответствия.

 

 

 <

В событии указывается номер по порядку, время изображения, разница между соседними изображениями перцептуальный алгоритм pHash.

Ниже отображается панель навигации с временной шкалой, часы, соответствующие произошедшим событиям активны, нажатием на время отображаем событие этого часа, возможность перелистывания по 10 изображений (вперед\назад), а также свайп по изображению. 

При нажатии кнопки phash в левой панели все изображения выше порогового значения, установленного в настройках, убираются.

При нажатии на кнопку play происходит автоматическое перелистывания выбранных изображений. 

При нажатии на кнопку слияние события со всех камер собираются в общий список в зависимости от времени события для дальнейшего просмотра или применения фильтра.

 

Получение сообщений. 

Отправка камерой сообщений происходит по различным событиям в зависимости от настроек (датчик движения, потеря связи [не знаю, как в этой ситуации происходит], окончание жесткого диска или карты памяти и т.д. 

Проверка электронной почты осуществляется с периодичностью указанной в настройках программы и выполняется в фоновом режиме. После происходит извлечение почты и сохранение в основную память планшета (папка download + создание папок в зависимости от названия камеры, даты, и времени), следующим этапом идет подгрузка сообщений в список или добавление в него при уже созданном списке и заключительным этапом рассчитывается pHash разницы в изображениях.

 

Отправка и прием Ftp.

 Пока не реализовано, в планах …

 

Пример использования.

(youtube)    SmartVideoControl

 

 

 ИТОГИ: 

Алгоритм pHash работает достаточно быстро и достоверно, эффективность работы можно увидеть на скриншоте (ссылка), в среднем из 100 изображений отобранных камерой остается не более 4 -10.

P.S.

IMHO на 40 изображений вместо 1000 можно потратить время )))), а если серьезно максимально жестко настроить датчики движения камер, там огромное количество настроек.

<На главную>

 

 

 

Оставьте свой комментарий

0
правилами и условиями.
  • Комментарии не найдены

Облако тегов

Авторизация

Scroll to top