【问题标题】:Detect if video file contains movement检测视频文件是否包含移动
【发布时间】:2015-04-03 21:27:08
【问题描述】:

我有一堆来自网络摄像头的视频剪辑(持续时间为 5、10、60 秒),我正在寻找一种方法来检测“此视频剪辑是否有移动”,以确定文件是否应该在以后的处理阶段保存或丢弃。

我研究了motionOpenCV,但运动似乎只想处理原始视频流,而 OpenCV 似乎对我来说太先进了。

我理想的解决方案是一个 linux 命令行工具,我可以将视频文件输入其中,并得到一个简单的“包含/不包含移动”的答案,这样我就可以丢弃不相关的文件。我完全可以接受误报(数量合理)。

这样的工具存在吗?或者使用其他工具执行此操作的任何简单示例?

【问题讨论】:

  • 这样的? unixmen.com/…
  • 请定义视频“包含运动”的含义
  • @Micka — 基本上,“n 帧之间像素的任何‘显着’变化”。由于网络摄像头在室内,因此通常不会有任何移动,因此该工具不必非常聪明地丢弃风/等”
  • @Kornel — Motion 似乎想直接连接到相机,并以此为基础记录东西。我更喜欢使用更简单的工具来对已捕获的视频进行后期处理。
  • 光照变化怎么样?对于一般的现实世界条件,前景提取并不是一件容易的事。根据您的情况,执行一些简单的帧差分可能就足够了;)

标签: linux opencv video motion-detection


【解决方案1】:

如果您想对已捕获的视频进行后期处理,那么motion 会很有用。

VLC 允许您流式传输或转换您的媒体,以便在本地、您的专用网络或 Internet 上使用。因此,已经捕获的视频可以通过 HTTP、RTSP 等进行流式传输,motion 可以将其作为network camera 处理。

此外: How to Stream using VLC Media Player

【讨论】:

    【解决方案2】:

    如果 OpenCv 对你来说是高级的,也许你应该考虑一些更简单的东西,那就是......SimpleCV(OpenCV 的包装器)“这是让计算机视觉变得简单”。甚至还有一个使用 SimpleCV 进行运动检测的示例 - https://github.com/sightmachine/simplecv-examples/blob/master/code/motion-detection.py 不幸的是我无法测试它(因为我的 OpenCv 版本与 SimpleCV 不兼容),但通常它看起来不错(并且并不复杂) - 它只是减去当前帧的前一帧并计算结果的平均值。如果该值大于某个阈值(您很可能必须调整该阈值),则我们可以假设这 2 帧之间存在一些运动。请注意,将阈值设置为 0 确实是个坏主意,因为 2 个连续帧之间总是存在一些差异(光照变化、噪声等)。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题并写了解决方案:https://github.com/jooray/motion-detection

      从命令行使用应该相当容易。

      【讨论】:

        【解决方案4】:

        您可以查看dvr-scan,这是一个基于 OpenCV 的简单跨平台命令行工具。

        仅以 csv 格式列出运动事件(仅扫描):

        dvr-scan -i some_video.mp4 -so
        

        提取单个视频中的运动:

        dvr-scan -i some_video.mp4 -o some_video_motion_only.avi
        

        有关更多示例和各种其他参数,请参阅: https://dvr-scan.readthedocs.io/en/latest/guide/examples/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-09-05
          • 1970-01-01
          • 1970-01-01
          • 2012-01-09
          • 2017-02-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多