Автоматизация видеонаблюдения
Введение
Всем привет! Я работаю не в IT компании системным администратором. В перечень обязанностей входит и администрирование систем видеонаблюдения [мы используем CTV и HiWatch], это обычная ситуация админ должен уметь все и сразу.
Информацией в данной статьей я хочу поделиться в виду того, что потребовалось не мало времени для поиска решения задачи и написания небольшого скрипта. Если у кого будут предложения по иной реализации задач, буду рад ознакомиться.
Задача
Организовать вывод видеонаблюдения с разных точек объекта на монитор в штабе, для постоянного контроля происходящего.(Строительная компания, на каждом объекте имеется штаб для ИТР состава.)
Организовать видео-стену в офисе для контроля работы на объектах.
Соединение объектов
В данной статье не буду рассматривать способы обеспечения соединения с объектами, у нас поднят VPN на firewall zyxel, есть иной способ — пробросить порты, но понадобятся белые IP на всех объектах что очень накладно и настройка firewall для доступа с определенных адресов. По этому рекомендую настроить VPN в сети много мануалов.
Часть 1. Подготовка
Вывести изображение с видеорегистраторов можно несколькими способами:
через приложения для смартфонов;
На прямую видео кабелем (HDMI, VGA)
софт для ПК;
Браузер. (web-морда)
Мы будем рассматривать 4 вариант.
Вопрос остается в том как организовать автологин и прочие манипуляции в браузере, дабы не давать всем сотрудникам пароль, и не напрягать лишней работой, включил ПК и все работает.
У меня на момент выполнения задачи были базовые знания Python, С++ учил когда-то давно в универе. Выбор пал на Python так как системы с которых открывается вся история на Windows, С++ сложнее по синтаксису и давно не работал с ним, рассматривать реализацию на нем даже не стал.
В Python есть библиотека Selenium, позволяющая работать c браузерами, к сожалению Web-морды наших регистраторов корректно работают только в IE… И Selenium-у потребуется Web-driver, скачать можно с сайта библиотеки.
Ссылка на web-driver
https://www.selenium.dev/documentation/webdriver/browsers/internet_explorer/
Часть 2. Написание
Для удобства разработки использовал VS Code. (установку и настройку не буду рассматривать, информации в сети много)
Создать окружение для разработки, для этого в оболочке PS следует ввести:
python -m venv hiwatch
cd hiwatch\Scripts
.\activate.ps1
Мы создаем окружение, переходим в папку Scripts и активируем его.
Создаем файл .py и устанавливаем Selenium.
cd .. #переходим в каталог выше hiwatch\
touch video.py #создаем файл питона
pip3 install selenium #устанавливаем Selenium
так же качаем файл IE webdriver с сайта selenium (ссылка выше) и закидываем в папку hiwatch.
Ниже будет предоставлен код из файла video.py с пояснением, для регистраторов Hiwatch & Hikvision.
#video.py
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
time.sleep(60) #здесь и далее приостановка выполнения в секундах
drive = webdriver.Ie(executable_path = r'IEDriverServer.exe') #присваиваем переменной drive исполняемый файл webdriver-a
drive.get('http://192.168.*.*/') #IP адрес регистратора может быть указан номер порта
time.sleep(15)
drive.find_element(By.ID, 'username').send_keys('log') #Ваш логин к регистратору
drive.find_element(By.ID, 'password').send_keys("pass") #Ваш пароль к регистратору
drive.find_element(By.ID, 'password').send_keys(Keys.ENTER) #Иммитация нажатия Enter для перехода на следущую страницу
time.sleep(10)
search = drive.find_element(By.CLASS_NAME, 'icon-playall') #выбор кнопки воспроизведения изображения
drive.execute_script("arguments[0].click();", search) #иммитация нажатия
time.sleep(5)
full = drive.find_element(By.CLASS_NAME, 'icon-full') #выбор кнопки изображения на полный экран
drive.execute_script("arguments[0].click();", full) #иммитация нажатия
drive.close
drive.quit
Ниже код из файла video.py для регистратора CTV.
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
time.sleep(5) #здесь и далее приостановка выполнения в секундах
drive = webdriver.Ie(executable_path = r'IEDriverServer.exe') #присваиваем переменной drive исполняемый файл webdriver-a
drive.get('http://192.168.*.*/') #IP адрес регистратора может быть указан номер порта
time.sleep(10)
drive.find_element(By.ID, 'txtUserName').send_keys('login') #Ваш логин к регистратору
drive.find_element(By.ID, 'txtPassword').send_keys('Pass') #Пароль к регистратору
drive.find_element(By.ID, 'txtPassword').send_keys(Keys.ENTER) #Иммитация нажатия Enter для перехода на следущую страницу
time.sleep(10)
search1 = drive.find_element(By.ID, 'seg_selector') #открытие вкладки для выбора сетки отображения
drive.execute_script("arguments[0].click();", search1) #иммитация нажатия
search2 = drive.find_element(By.ID, 'seg_9') #выбор сетки 3*3
drive.execute_script("arguments[0].click();", search2) #иммитация нажатия
time.sleep(5)
full = drive.find_element(By.ID, 'full_screen') #выбор кнопки изображения на полный экран
drive.execute_script("arguments[0].click();", full) #иммитация нажатия
drive.close
drive.quit
Перегоняем программу из .PY в .EXE для запуска на разных хостах без установки Python и прочего, получим самостоятельную программу.
pyinstaller --noconfirm --onedir --console --add-data "C:/Users/!Ваш путь к этой папке!/IEDriverServer.exe;." "C:/Users/!Ваш путь к этой папке!/video.py"
Сборка содержится в папке dist, которая находится в одной директории с папкой hiwatch.
Ссылка на мой git с уже готовыми проектами, следует указать некоторые данные в файле .py и перегнать в .EXE
https://github.com/LeoAlecksey/scripts
Часть 3. Заключение
Вам остается только перенести результат из папки dist на любую машину.
В заключении я хотел бы сказать что не являюсь разработчиком, и мог не совсем правильно описать некоторые действия — прошу не судить строго.