使用OpenCV对从IP摄像机接收到的流进行有效的运动检测

时间:2018-12-04 09:47:35

标签: c++ opencv detection motion motion-detection

我有两个问题,我一个多星期都在努力寻找答案。

我正在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进行的所有操作就是检查“感兴趣区域”是否存在运动。这些实际上是工厂的生产线。该工厂每周工作24天24天,因此照明条件会不断变化。有时根本没有光,因此JPEG上会有很多杂音。您建议将哪些OpenCV操作和算法应用于框架,以了解ROI是否有运动?当然,您可以一次又一次地对矩阵进行大量操作,但是我需要最短,最有效的方法来保持较低的资源需求,因为它将同时对大量摄像机和ROI进行此操作。

我的系统装有NVIDIA Video Card(我可以使用CUDA),Intel i7-7700、16GB Ram。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

获取运动级别和阈值数据(即运动区域0和1)的HTTP分段流。

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