Рубрики
Проекты на Raspberry Pi

Трансляция видео из системы видеонаблюдения в Raspberry Pi с помощью OpenCV

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

В этой статье мы рассмотрим как транслировать видеопоток с видеорегистратора (в нашем случае видеорегистратора Hikvision) с помощью протокола RTSP (real time streaming protocol – потоковый протокол реального времени) на плату Raspberry Pi с использованием Python и OpenCV. И как только у нас получится это, мы сможем использовать все потрясающие возможности библиотеки OpenCV на этом видеопотоке, например, обнаружение определенного объекта, считывание номерного знака транспортного средства, распознавание лиц и многое другое.

Для данного проекта его автор (ссылка на оригинал есть в конце статьи) использовал 4 канала видеорегистратора (DVR) Hikvision, входящего в состав системы видеонаблюдения (CCTV), установленного на здании. Мы будем транслировать все 4 экрана (канала) камеры на плату Raspberry Pi и отображать их на 5-дюймовом сенсорном дисплее, где пользователь сможет переключаться между каждым каналом по мере необходимости. В дальнейшем на нашем сайте мы опубликуем еще серию статей в продолжение данного проекта, где задействуем при обработке видеопотока с видеорегистратора ряд возможностей библиотеки OpenCV: обнаружение движения, оповещение о видео-сигналах, отслеживание людей и т. д.

Подготовка видеорегистратора к трансляции видеопотока по протоколу RTSP

Прежде чем приступать к написанию программы на python для Raspberry Pi необходимо убедиться в том поддерживает ли видеорегистратор (DVR) протокол RTSP (потоковый протокол реального времени) и как его настроить для работы по данному протоколу. Для каждого видеорегистратора эта процедура настройки будет отличаться, но если вы освоите ее хотя бы для одной модели видеорегистратора, то освоение ее на других моделях видеорегистраторах не должно вызвать у вас серьезных проблем.

Первым делом в этом процессе мы должны узнать имя пользователя (username) и пароль (password) видеорегистратора, с которыми он выходит в сеть интернет. В данной статье мы будем рассматривать трансляцию видеопотока (streaming) по протоколу RTSP только в локальной сети – но если у вас есть статический IP, то вы можете настроить перенаправление порта (port forwarding) в вашем роутере и осуществлять трансляцию видеопотока в другие сети.

Для подготовки видеорегистратора к трансляции видеопотока по протоколу RTSP выполните следующую последовательность шагов.

Шаг 1. Определите IP адрес вашего видеорегистратора. Если видеорегистратор подключен к сети Интернет, то ему должен быть назначен его собственный IP адрес. Вы можете узнать этот IP адрес либо в настройках роутера (если он к нему подключен), либо непосредственно с экрана видеорегистратора (будем предполагать что у нас к видеорегистратору подключен монитор). IP адрес нашего роутера — http://192.168.11.110/ (изменен для статьи в целях безопасности).

Шаг 2. Откройте любой веб-браузер и введите в нем этот IP адрес, нажмите enter. После этого вас перебросит на страницу входа в панель настроек вашего видеорегистратора. На ней вы должны ввести имя пользователя (username) и пароль (password) вашего видеорегистратора. По умолчанию имя пользователя должно быть admin, но пароль для каждой модели видеорегистратора может отличаться – вам его необходимо знать.

Шаг 3. После успешного входа (логина) в панель настроек видеорегистратора посмотрите в них номер порта RTSP вашего видеорегистратора, по умолчанию он должен быть равен 554, но иногда он может отличаться. Также вы должны посмотреть имеется ли возможность включения протокола RTSP. На этом этапе вам необходимо уделить некоторое количество времени на то, чтобы разобраться с этими настройками для вашего видеорегистратора – для разных моделей видеорегистраторов эти настройки будут отличаться.

Шаг 4. Подготовка вашей ссылки для работы с протоколом RTSP, в общем случае эта ссылка имеет следующий формат:

Вид этой ссылки для вашей модели видеорегистратора вы можете найти в сети интернет. Во многих случаях может подойти ссылка вида:

В этой ссылке имя пользователя (<username>) и пароль (<password>) те же самые, которые вы использовали для входа в панель настроек видеорегистратора на шаге 2, а <address> – это IP адрес, который мы определили на шаге 1. В качестве <port> можно использовать 554, либо же тот, который вы определили на шаге 3. Номер <id> будет отличаться для каждого канала. К примеру, номер id “201” будет обозначать, что мы используем вторую камеру (цифра 2 в номере) основного потока (mainstream). То есть если номер id оканчивается на 1, то это значит что мы используем основной поток, а если он оканчивается на 2 – это означает что мы используем под-потоки (sub-stream). Обычно под-потоки имеют более низкое качество чем основной поток и лучше подходят для использования в таких маломощных устройствах как плата Raspberry Pi. Ссылка RTSP на вторую видеокамеру на под-потоке (sub stream) будет выглядеть следующим образом:

Шаг 5. Проверьте трансляцию видеопотока с помощью видеоплеера VLC чтобы убедится в том, что ваше соединение по протоколу RTSP успешно функционирует. Установите видеоплеер VLC на компьютер, который подключен к той же самой сети, что и видеорегистратор, запустите его и нажмите Ctrl+N чтобы подключиться к трансляции видеопотока в сети. Введите URL как показано на следующем рисунке и нажмите Play.

Если ссылка RTSP работает, то вы должны увидеть в плеере VLC трансляцию видеопотока с видеорегистратора как показано на рисунке ниже. Если выдается ошибка, то необходимо скорректировать ссылку RTSP.

Если все нормально, то можно переходить к настройке платы Raspberry Pi.

Подготовка платы Raspberry Pi

Первым делом нам необходимо подключить 5-дюймовый сенсорный дисплей к плате Raspberry Pi. Как это сделать описано в этой статье.

Автор проекта использовал плату Raspberry Pi 3 B+ с установленной на ней Debian Buster OS, но неплохой идеей будет и использование платы Raspberry Pi 4, но обязательно с использованием теплоотвода (радиатор или вентилятор) потому что без него температура платы в данном проекте может достигать 70*C. Но автор проекта не использовал теплоотвода и у него получилась следующая конструкция для данного проекта:

Установка OpenCV и других необходимых библиотек на Raspberry Pi

Вы можете установить OpenCV на Raspberry Pi с помощью Cmake либо использовать более простую установку OpenCV, описанную в данной статье (если она у вас пойдет).

Также в современных операционных системах для Raspberry Pi доступен более простой способ установки OpenCV – с помощью инструмента apt-get. В этом случае для установки OpenCV используйте следующие команды:

Также в нашем проекте нам понадобится библиотека “cvui” чтобы создать простейший интерфейс пользователя (UI) из двух кнопок, с помощью которых мы будем переключаться между 4 экранами. Для установки библиотеки “cvui” выполните следующую команду:

Когда OpenCV и cvui будут установлены, можно приступать к написанию основной программы. Но перед этим с помощью соответствующих команд в терминале убедитесь в том, что эти библиотеки успешно импортируются в программу.

Объяснение программы для трансляции видеопотока в Raspberry Pi

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Первым делом в программе необходимо подключить (импортировать) необходимые нам библиотеки.

В следующий фрагмент кода программы вам будет необходимо внести небольшие правки. Вам необходимо будет ввести имя пользователя (username) и пароль (password) для вашего видеорегистратора. Для используемого нами 5-дюймового дисплея ширина и высота составляют 800 и 480 пикселов соответственно.

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

Внутри основного цикла программы мы будем считывать кадры с видео устройства (в нашем случае видеорегистратора) и конвертировать их до размера полного экрана. Окно дисплея в нашей программе будет называться screen.

Затем мы напишем фрагменты программы для обработки нажатий двух кнопок, размещенных на экране. Команда cvui.button используется для размещения кнопки на заданном месте, а команда cvui.mouse используется для обнаружения нажатия кнопок. Проверку нажатия кнопок мы осуществляем с помощью условий if.

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

В заключительной части кода мы будем отображать кадр на экране и осуществлять выход из экрана при нажатии клавиши ‘q’ – при этом мы будем уничтожать все созданные окна.

Тестирование работы проекта

Для тестирования трансляции видеопотока с видеорегистратора на плату Raspberry Pi подайте на нее питание и запустите на выполнение программу данного проекта (приведена в конце статьи). Убедитесь в том, что вы корректно сформировали ссылку для работы с протоколом RTSP. Также для тестирования работы проекта можно использовать плеер VLC, который можно установить на Raspberry Pi (в некоторых операционных системах для данной платы, например, buster OS, он уже предустановлен).

Если вы используете плеер VLC для проверки работы проекта, то убедитесь в том, что плата Raspberry Pi подключена к той же самой сети, что и видеорегистратор, и что ссылка RTSP корректна. После этого запустите на выполнение программу проекта с помощью python IDE. Если все разрешения сконфигурированы корректно, то на экране вы должны увидеть примерно следующую картину:

Две кнопки на изображении (“previous” и “next”) служат для переключения каналов с видеорегистратора. Программа написана для 4 камер, подключенных к видеорегистратору (DVR), вы можете легко изменить ее если у вас камер больше чем 4.

Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы на Python

Видео, демонстрирующее работу проекта

Источник статьи

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

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