使用 OpenCV 对从 IP 摄像机接收到的流进行有效运动检测
Effective motion detection with OpenCV with stream received from IP Camera
我有两个问题在网上苦苦寻找了一个多星期的答案。
我正在 Visual C++ 2017 上编写 Windows 服务,它连接到我们网络上的 Axis IP 摄像机并使用常规套接字查询 MJPEG 流。它成功解析流并解码 JPEG 图像。使用 OpenCV 完成解码;
frame = cv::imdecode(data, IMREAD_GRAYSCALE)).
Q1。尽管 OpenCV 使用其声称的性能 JPEG 库:build-libjpeg-turbo(版本 1.5.3-62),但解码性能出奇地慢于 .Net 的 System.Drawing.Image.FromStream(ms)。您对真正快速的 JPEG 解压缩有什么建议吗?
Q2。对于接收到的 JPEG,我需要做的就是检查 "regions of interest" 中是否有运动。这些实际上是工厂中的生产线。工厂每周运行 6 天,每天 24 小时,因此照明条件会不断变化。有时根本没有光,所以 JPEG 上会有很多噪点。您建议在帧上应用哪些 OpenCV 操作和算法以了解 ROI 处是否有运动?当然你可以在你的矩阵上一个接一个地使用大量操作,但我需要最短和最有效的方法来保持低资源需求,因为它将同时对大量相机和 ROI 执行此操作。
我的系统配备 NVIDIA 显卡(我可以使用 CUDA)、Intel i7-7700、16GB Ram。
谢谢!
这并不是您问题的确切答案,但它甚至可能是更好的方法。
Axis IP 摄像机长期以来一直具有板载运动检测引擎,可以通过摄像机网络进行配置 UI(在旧摄像机 models/firmware 版本上可能需要使用 Internet Explorer 和使用嵌入式 ActiveX 控件来做到这一点)和通过 VAPIX 轴 HTTP 摄像头 API.
相同的 VAPIX HTTP API 也有命令接收相机上每个配置的运动 area/window 的运动级别和阈值。
如果您没有支持 VAPIX 版本 3 的最新型号,您可能仍然依赖 VAPIX 版本 2,您可以尝试发出 HTTP GET 请求,例如作为:
http:///axis-cgi/motion/motiondata.cgi?group=0,1
获取运动水平和阈值数据的 HTTP 多部分流(即运动区域 0 和 1)。
更多详细信息,您可以从 Axis 网站下载相关的 VAPIX PDF 文档(可能需要帐户和登录)。
我有两个问题在网上苦苦寻找了一个多星期的答案。
我正在 Visual C++ 2017 上编写 Windows 服务,它连接到我们网络上的 Axis IP 摄像机并使用常规套接字查询 MJPEG 流。它成功解析流并解码 JPEG 图像。使用 OpenCV 完成解码; frame = cv::imdecode(data, IMREAD_GRAYSCALE)).
Q1。尽管 OpenCV 使用其声称的性能 JPEG 库:build-libjpeg-turbo(版本 1.5.3-62),但解码性能出奇地慢于 .Net 的 System.Drawing.Image.FromStream(ms)。您对真正快速的 JPEG 解压缩有什么建议吗?
Q2。对于接收到的 JPEG,我需要做的就是检查 "regions of interest" 中是否有运动。这些实际上是工厂中的生产线。工厂每周运行 6 天,每天 24 小时,因此照明条件会不断变化。有时根本没有光,所以 JPEG 上会有很多噪点。您建议在帧上应用哪些 OpenCV 操作和算法以了解 ROI 处是否有运动?当然你可以在你的矩阵上一个接一个地使用大量操作,但我需要最短和最有效的方法来保持低资源需求,因为它将同时对大量相机和 ROI 执行此操作。
我的系统配备 NVIDIA 显卡(我可以使用 CUDA)、Intel i7-7700、16GB Ram。
谢谢!
这并不是您问题的确切答案,但它甚至可能是更好的方法。
Axis IP 摄像机长期以来一直具有板载运动检测引擎,可以通过摄像机网络进行配置 UI(在旧摄像机 models/firmware 版本上可能需要使用 Internet Explorer 和使用嵌入式 ActiveX 控件来做到这一点)和通过 VAPIX 轴 HTTP 摄像头 API.
相同的 VAPIX HTTP API 也有命令接收相机上每个配置的运动 area/window 的运动级别和阈值。
如果您没有支持 VAPIX 版本 3 的最新型号,您可能仍然依赖 VAPIX 版本 2,您可以尝试发出 HTTP GET 请求,例如作为:
http:///axis-cgi/motion/motiondata.cgi?group=0,1
获取运动水平和阈值数据的 HTTP 多部分流(即运动区域 0 和 1)。
更多详细信息,您可以从 Axis 网站下载相关的 VAPIX PDF 文档(可能需要帐户和登录)。