- Подготовка DVR к потоковой передаче RTSP
- Подготовка вашего Raspberry Pi
- Установка OpenCV и других библиотек на Raspberry Pi
- Программирование Raspberry Pi для потоковой передачи RTSP-видео с CCTV
- Тестирование Raspberry Pi CCTV Viewer
Сегодня на большинстве рабочих мест и коммерческих зданий установлена система видеонаблюдения для наблюдения за деятельностью. Но часто заинтересованным органам или сотрудникам службы безопасности бывает трудно постоянно контролировать прямую трансляцию со всех камер, чтобы найти подозрительную активность. Поскольку компьютерное зрение и машинное обучение развиваются быстрыми темпами, пришло время сделать наши системы видеонаблюдения умнее. В этой статье мы обсудим, как получить видеопоток с существующего DVR (например, Hikvision DVR) через потоковую передачу RTSP с Raspberry pi с использованием Python и OpenCV. Как только мы получим это, мы сможем использовать возможности OpenCV для этих видеопотоков для обнаружения определенного объекта, чтения номерного знака транспортного средства, распознавания лиц и прочего!
Для этого урока я буду использовать 4-канальный видеорегистратор CCTV Hikvision, который уже установлен в здании. Мы будем транслировать все 4 экрана камеры на Raspberry и отображать его на 5-дюймовом сенсорном экране, где пользователь может переключаться между каналами по мере необходимости. Я знаю это не так много, учитывая мощь OpenCV, и у меня есть планы по расширению его с помощью обнаружения движения, видеоповреждений, отслеживания людей и т. Д., Но давайте оставим все это для другого урока.
Подготовка DVR к потоковой передаче RTSP
Прежде чем мы углубимся в аппаратное обеспечение raspberry pi и код Python, важно проверить, поддерживает ли DVR RTSP и как получить к нему доступ. Я провел большую часть своего времени, застряв здесь, потому что процедура, похоже, различается для каждого типа DVR, и вам нужно сделать много попыток. Но как только вы это понимаете, каждый раз это срабатывает как шарм.
Прежде всего, убедитесь, что вы знаете имя пользователя и пароль своей системы видеорегистратора, и что она подключена к Интернету. Также в этом руководстве я буду транслировать RTSP только из локальной сети, если у вас статический IP-адрес, вы можете выполнить переадресацию портов и сделать то же самое для других сетей. Но что касается этого руководства, мы будем делать все внутри локальной сети.
Шаг 1: Найдите IP-адрес вашего DVR. После подключения цифрового видеорегистратора к Интернету ему будет назначен собственный IP-адрес. Вы можете найти этот IP-адрес либо на странице конфигурации вашего маршрутизатора, либо на самом экране вашего DVR (при условии, что у вас есть монитор, подключенный к DVR). IP-адрес моего маршрутизатора был http://192.168.11.110/ (изменен в целях безопасности)
Шаг 2: Откройте любой веб-браузер по вашему выбору, введите IP-адрес и нажмите Enter. Вы попадете на страницу входа в DVR. Где вы должны ввести имя пользователя (мое изменено) и пароль для вашего DVR. Имя пользователя по умолчанию будет admin, но пароль вы должны знать. Мой экран входа в DVR показан ниже, ваш вид может отличаться.
Шаг 3. После успешного входа в систему найдите номер порта RTSP на вашем DVR, в большинстве случаев значение по умолчанию будет 554, но оно может измениться. Пока вы здесь, поиграйте с настройками конфигурации, чтобы проверить, есть ли возможность включить RTSP, если нет, вы можете пропустить ее. Вы должны провести здесь некоторое время, так как процедура отличается в зависимости от DVR.
Шаг 4: Подготовьте ссылку RTSP, основная ссылка RTSP будет в следующем формате:
rtsp: //
Опять же, это зависит от типа DVR, вы можете использовать Google, чтобы найти тот, который вам подойдет. Тот, который работал, имел формат ниже, вы также можете попробовать это:
rtsp: //
где
rtsp: // admin: [email protected]: 554 / Потоковая передача / Каналы / 202 /
Шаг 5: Воспроизведите поток на VLC, чтобы убедиться, что ваше RTSP-соединение работает. Установите VLC на компьютер, который подключен к той же сети, что и DVR, запустите его и нажмите Ctrl + N для потоковой передачи по сети. Введите URL-адрес, как показано ниже, и нажмите ОК.
Если ссылка RTSP работает должным образом, вы должны увидеть прямую трансляцию вашего CCTV на проигрывателе VLC, как показано ниже. Если выдает ошибку, вам нужно найти правильную ссылку.
Когда это сделано, нам больше не нужно говорить о нашем DVR, давайте продолжим с нашим Raspberry pi.
Подготовка вашего Raspberry Pi
Затем нам нужно настроить Raspberry Pi с 5-дюймовым дисплеем. Я не буду вдаваться в подробности этого, поскольку мы уже много раз рассказывали об этом. Вы можете прочитать следующие статьи для руководства:
- Начало работы с Raspberry Pi
- Подключение 5-дюймового дисплея к Raspberry Pi
Мы используем Raspberry Pi 3 B + с запущенной на нем ОС Debian Buster. Также может быть хорошей идеей использовать Pi 4, если вы можете, а также добавить некоторые варианты охлаждения, такие как радиатор или вентилятор, потому что я заметил, что температура достигает почти 70 * C. На данный момент я не выполнял никаких процедур охлаждения, и моя установка выглядит так:
Установка OpenCV и других библиотек на Raspberry Pi
Следующим шагом будет установка OpenCV на Raspberry Pi. Ранее мы обсуждали, как скомпилировать OpenCV на Raspberry pi.
- Установка OpenCV на Raspberry Pi
- Начало работы с OpenCV
Вы можете либо перейти по указанной выше ссылке и скомпилировать OpenCV с помощью Cmake, либо просто установить его с помощью метода apt-get. Я бы порекомендовал позже, если вы не очень серьезно занимаетесь программированием OpenCV. Я использовал следующие команды для установки OpenCV.
sudo apt update sudo apt install python3-opencv
В нашей программе мы также будем использовать библиотеку «cvui» для создания базового пользовательского интерфейса с двумя кнопками, которые позволяют нам перемещаться между четырьмя экранами. Чтобы установить cvui, выполните следующую команду.
Python3 pip install cvui
Установив оба пакета, мы можем перейти к основной программе. Убедитесь, что оба установленных пакета работают, пытаясь импортировать их из командного терминала Pi.
Программирование Raspberry Pi для потоковой передачи RTSP-видео с CCTV
Полную программу для этого проекта можно найти в конце этой страницы. Объяснение того же заключается в следующем. Мы начинаем программу с включения необходимых файлов заголовков.
импорт cv2 импорт cvui
Следующая часть программы требует некоторого редактирования. Вы должны ввести имя пользователя и пароль вашего DVR. Для 5-дюймового дисплея ширина и высота составляют 800 и 480 соответственно, поэтому мы ввели то же самое.
rtsp_username = "admin" rtsp_password = "aswinth347653" width = 800 height = 480 cam_no = 1
Двигаясь дальше, у нас есть функция под названием создать камеру, которая будет использоваться каждый раз, когда мы меняем номер камеры, которую необходимо просмотреть.
def create_camera (channel): rtsp = "rtsp: //" + rtsp_username + ":" + rtsp_password + "@ 192.168.29.100: 554 / Streaming / channels /" + channel + "02" cap = cv2.VideoCapture () cap.open (rtsp) cap.set (3, 640) # ID номер для ширины 3 cap.set (4, 480) # ID номер для высоты 480 cap.set (10, 100) # ID номер для яркости 10qq возвратный колпачок
Внутри основного цикла while у нас есть программа для чтения кадра с устройства захвата и преобразования его в полноэкранный режим. Окно дисплея в нашей программе будет называться экраном.
успех, current_cam = cam.read () dim = (ширина, высота) Full_frame = cv2.resize (current_cam, dim, interpolation = cv2.INTER_AREA) cv2. namedWindow ('screen', cv2.WINDOW_NORMAL) cv2.setWindowProperty ('screen ', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
Затем у нас есть код для двух кнопок, которые будут размещены на экране. Команда cvui.button используется для размещения кнопки в нужном месте, а команда cvui.mouse используется для обнаружения щелчка мыши. У нас есть два оператора if для двух кнопок, если кнопка нажата, будет выполнен соответствующий оператор if .
if (cvui.button (Full_frame, width - 100, height - 40, «Далее») и cvui.mouse (cvui.CLICK)): print («Следующая кнопка нажата») cvui.init ('screen') cam_no = cam_no +1 if (cam_no> 4): cam_no = 1 del cam cam = create_camera (str (cam_no)) if (cvui.button (Full_frame, width - 200, height - 40, «Previous») и cvui.mouse (cvui. CLICK)): print ("Предыдущая кнопка нажата") cvui.init ('screen') cam_no = cam_no - 1 if (cam_no <1): cam_no = 4 del cam cam = create_camera (str (cam_no))
Внутри оператора if на основе кнопки мы либо увеличиваем, либо уменьшаем количество cam_no, а затем удаляем существующий кулачок и создаем новый кулачок, используя функцию, которую мы обсуждали выше. Также обратите внимание, что cvui.init должен вызывать каждый раз для обновления экрана пользовательского интерфейса.
Заключительная часть кода - это отображение кадра в качестве вывода и для выхода из экрана вывода при нажатии q. Мы просто ждем нажатия клавиши, и если клавиша «q», мы уничтожим все окна.
cv2.imshow ('screen', Full_frame) if cv2.waitKey (1) & 0xFF == ord ('q'): cv2.destroyAllWindows () break
Тестирование Raspberry Pi CCTV Viewer
Проверить код довольно просто, включите пи и запустите код Python, указанный в нижней части этой страницы. Убедитесь, что вы ввели правильные учетные данные для работы ссылки RTSP. Если вы хотите быть в безопасности, вы также можете попробовать использовать проигрыватель VLC на Pi, который предварительно установлен в ОС buster.
Если он работает на VLC, то мы можем быть уверены, что наш pi подключен к той же сети, и ссылка RTSP работает должным образом. Затем откройте программу, указанную внизу этой страницы, и запустите ее с помощью любой IDE Python. Если учетные данные введены правильно, вы увидите следующий экран. Которая показывает прямую трансляцию с камеры с двумя кнопками внизу.
Поскольку экран имеет сенсорный TFT-экран, вы можете просто нажать кнопки «предыдущая» и «следующая», чтобы перейти к следующей камере. Программа написана для переключения между первыми четырьмя камерами, вы можете легко изменить ее, если к вашему DVR подключено более 4 камер.
Полную работу этого проекта можно найти в видео по ссылке ниже. Надеюсь, вам понравилось это руководство и вы узнали что-то полезное. Если у вас есть какие-либо вопросы, оставьте их в разделе комментариев или вы также можете использовать наши форумы, чтобы размещать свои другие вопросы. Кроме того, я планирую добавить в эту настройку функцию обнаружения движения и сохранения видео, так что следите за обновлениями.