我有一堆来自网络摄像头的视频片段(持续时间为5,10,60秒),我正在寻找一种方法来检测“此视频片段是否有移动”,以确定该文件是否应该是在未来的处理阶段保存或丢弃。
我调查了motion和OpenCV,但动作似乎只想处理原始视频流,而OpenCV似乎太过先进而无法使用。
我理想的解决方案是一个linux命令行工具,我可以将视频文件输入,并获得一个简单的“确实/不包含移动”回复,所以我可以丢弃不相关的文件。误报(合理数量)完全可以接受我的使用。
这样的工具是否存在?或者使用其他工具执行此操作的任何简单示例?
答案 0 :(得分:3)
我遇到了同样的问题并编写了解决方案:https://github.com/jooray/motion-detection
在命令行中应该相当容易使用。
答案 1 :(得分:2)
如果您想对已捕获的视频进行后期处理,则motion可能会有用。
VLC允许您流式传输或转换媒体,以便在本地,专用网络或Internet上使用。因此,已捕获的视频可以通过HTTP,RTSP等进行流式传输,motion可以将其作为network camera进行处理。
答案 2 :(得分:1)
如果OpenCv要为您提升,也许您应该考虑更容易的事情...... SimpleCV(OpenCV的包装器)"这是计算机视觉变得简单"。甚至有一个使用SimpleCV进行运动检测的例子 - https://github.com/sightmachine/simplecv-examples/blob/master/code/motion-detection.py不幸的是我无法测试它(因为我的OpenCv版本与SimpleCV并不兼容),但通常它看起来很好(并且不是很好的) ; t复杂) - 它只是从当前减去前一帧并计算结果的平均值。如果这个值大于某个阈值(很可能你必须调整),我们可以假设这两个帧之间有一些运动。请注意,将阈值设置为0确实是一个坏主意,因为在2个连续帧(灯光,噪音等的变化)之间始终存在一些差异。
答案 3 :(得分:0)
您可以检查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/