使用OpenCV进行有效的运动检测,并从IP Camera接收流



我有两个问题,一个多星期以来我一直在网上努力寻找答案。

我正在Visual C++2017上编写一个Windows服务,该服务连接到我们网络上的Axis IP Cameras,并使用常规套接字查询MJPEG流。它成功地解析了流并解码了JPEG图像。使用OpenCV完成解码;frame=cv::imdecode(数据,IMREAD_GRAYSCALE((。

Q1.尽管OpenCV使用了一个高性能JPEG库,正如它所声称的那样:构建libjpeg-turbo(1.5.3-62版本(,但解码性能比.Net的System.Drawing.Image.FromStream(ms(慢得惊人。你有什么建议可以进行真正快速的JPEG解压缩吗?

Q2.我所需要做的就是检查"感兴趣的区域"中是否有运动。这些实际上是工厂里的生产线。工厂每周24小时6天运行,因此照明条件会发生变化。有时根本没有光线,所以JPEG会有很多噪音。您建议在帧上应用哪些OpenCV操作和算法,以了解ROI是否有运动?当然,你可以在矩阵上一个接一个地使用大量操作,但我需要最短、最有效的方法来保持低资源需求,因为它将同时对大量相机和ROI进行此操作。

我的系统是NVIDIA视频卡(我可以使用CUDA(,英特尔i7-7700,16GB内存。

谢谢!

这并不能完全回答您的问题,但它甚至可能是一种更好的方法。

Axis IP摄像机长期以来一直是板载运动检测引擎,可以通过摄像机web UI(在旧的摄像机型号/固件版本上,可能需要使用Internet Explorer和嵌入式ActiveX控件来实现(和VAPIX Axis HTTP摄像机API进行配置。

相同的VAPIX HTTP API还具有接收摄像机上每个配置的运动区域/窗口的运动水平和阈值的命令。

如果您没有支持VAPIX版本3的最新型号,您可能仍然依赖VAPIX版2,您可以尝试发出HTTP GET请求,例如:

http:///axis-cgi/motion/motiondata.cgi?group=0,1

以获得运动级别和阈值数据的HTTP多部分流(即,对于运动区域0和1(。

有关更多详细信息,您可以从Axis网站下载相关的VAPIX PDF文档(可能需要帐户和登录(。

相关内容

最新更新