Управление функцией PTZ IP-камеры с помощью C++

Я работаю над проектом, который требует управления функцией PTZ моей IP-камеры через пользовательский интерфейс. В настоящее время я использую облачную камеру D-Link DCS-5020L, Microsoft Visual Studio 2017 и OpenCV 3.3 для своей установки.

Я все еще новичок в С++ и OpenCV, но мой проект требует его использования. Я могу получить доступ к каналу камеры, но я не уверен, как управлять функциями камеры с помощью кода C++ через OpenCV или нужен ли вообще OpenCV.

Есть ли код C++ для управления функциями PTZ IP-камеры?

Это мой код для получения вывода видео, если это необходимо.

// VIDEO CAPTURE //

Mat frame;

VideoCapture cap("http://username:password@IPADDRESS:PORT/video.cgi?resolution=640x360&req_fps=30&.mjpg");

if (!cap.isOpened())    //EXIT PROGRAM IF FAILED
{
    cout << "CAMERA UNAVAILABLE" << endl;
    return -1;
}
while (1)
{
    bool bSuccess = cap.read(frame);    //READ NEW FRAME FROM VIDEO

    if (!bSuccess)      //BREAK LOOP IF FAILED
    {
        cout << "UNABLE TO DISPLAY VIDEO" << endl;
        break;
    }
}

Любая помощь приветствуется. Спасибо.


person Sanjay    schedule 04.10.2017    source источник


Ответы (1)


Обычно функции PTZ реализуются программно на сервере, работающем в камере. Некоторые старые камеры поставлялись с элементом управления ActiveX. Доступ к этим функциям можно получить, получив или опубликовав URL-адрес, относящийся к камере.

Для вашей камеры вы должны иметь возможность размещать элементы управления по следующему URL-адресу:

http://<ip>/pantiltcontrol.cgi

Available controls: 
POST parameters
PanSingleMoveDegree (default 5)  
TiltSingleMoveDegree (default 5) 
PanTiltSingleMove

Values for PanTiltSingleMove (based on the web UI controls):
Top 1
Top right   2
Right   5
Bottom right    8
Bottom  7
Bottom left 6
Left    3
Top left    0
Home (reset)    4

Таким образом, типичный пример публикации с использованием curl для изменения панорамирования и наклона должен быть похож на этот:

curl --user <username>:<password> --user-agent "user" --data "PanSingleMoveDegree=5&TiltSingleMoveDegree=5&PanTiltSingleMove=5" http://<ip>/pantiltcontrol.cgi

Для быстрого теста с использованием вашего веб-браузера вы должны быть в состоянии сделать то же самое, используя запрос на получение следующего структурированного URL-адреса:

http://<username>:<password>@<ip>/pantiltcontrol.cgi?PanSingleMoveDegree=5&TiltSingleMoveDegree=5&PanTiltSingleMove=5

Теперь вернемся к вашему вопросу. Все, что вам нужно для управления PTZ на C++, — это веб-запрос по указанным URL-адресам. Так что это должно быть вашей точкой поиска.

Многие ответы на эту тему уже находятся в переполнении стека. Это первый результат, который я получил, когда гуглил "c++ http get post". Как сделать HTTP-запрос с помощью C++?

person mysticalnetcore    schedule 04.10.2017