使用C 控制IP相机的PTZ功能



我正在研究一个项目,该项目需要通过UI控制IP摄像机的PTZ功能。我目前正在使用 D-Link DCS-5020L 云摄像头, Microsoft Visual Studio 2017 opencv 3.3 用于我的设置。

我仍然是C 和OpenCV的新手,但是我的项目需要使用它。我能够访问相机供稿,但我不确定如何通过OPENCV或甚至需要使用C 代码来控制相机的功能。

是否有C 代码可以控制IP摄像机的PTZ功能?

这是我在必要时获得视频输出的代码。

// 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;
    }
}

任何帮助将不胜感激。谢谢。

通常,PTZ函数是在CAM中运行的服务器上实现的。一些较旧的摄像机过去用来具有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 --user <username>:<password> --user-agent "user" --data "PanSingleMoveDegree=5&TiltSingleMoveDegree=5&PanTiltSingleMove=5" http://<ip>/pantiltcontrol.cgi

对于使用Web浏览器进行快速测试,您应该能够使用以下结构化URL的Get请求来执行相同的操作:

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

现在,回到您的问题。您需要在C 中控制PTZ,就是Web查询上述URL。因此,这应该是您的搜索点。

此主题的许多答案已经在堆栈溢出上。这是我在谷歌搜索" C HTTP获取发布"时获得的第一个结果。 您如何使用C 进行HTTP请求?

我使用了" onvif设备管理器"软件。观看控制PTZ

在我的情况下,使用V380PRO摄像机,我发现您可以在Postman或Soapui中使用XML服务,或者使用SOAPUI使用参数:

method:POST
url:http://<user>:<password>@<ip_address>:8899/onvif/PTZ
body:
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope">
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <ContinuousMove xmlns="http://www.onvif.org/ver20/ptz/wsdl">
            <ProfileToken>stream0_0</ProfileToken>
            <Velocity>
                <PanTilt x="-0.5" y="0" xmlns="http://www.onvif.org/ver10/schema"/>
            </Velocity>
        </ContinuousMove>
    </s:Body>
</s:Envelope>

最新更新