打开简历以捕获视频中的独特对象

时间:2018-09-20 09:40:35

标签: python opencv

我正在使用Python的OpenCV库进行帧切片,并且能够成功地从正在测试的视频中创建帧。

我正在安装在停车场入口入口处的闭路电视摄像机上,视频以24x7播放,有时汽车静止不动几分钟,导致同一辆车连续出现帧。

我的问题是,只有当新车进入停车场时,如何才能创建框架?

4 个答案:

答案 0 :(得分:0)

Stackoverflow用于与代码相关的查询。建议您在此处发布任何内容之前,尝试一些代码并分享您的结果和问题。话虽如此,您可以从this之类的对象检测教程开始,然后以sort进行跟踪。提供了许多预训练的模型,其中包括汽车课,因此您甚至不需要训练新模型。

答案 1 :(得分:0)

您需要检测车牌等吗?或者只是注意是否发生了什么?对于后者,您可以使用非常简单的方法。取最近30秒的平均帧数,然后从当前帧中减去。如果增量图像的平均绝对平均值高于阈值,则可能是您要寻找的更改。

答案 2 :(得分:0)

您可以使用opencv进行一些更简单的运动检测,https://www.pyimagesearch.com/2015/05/25/basic-motion-detection-and-tracking-with-python-and-opencv/

中对此进行了很好的解释

因此,如果您有背景图片作为参考,则可以将每个新图像与背景进行比较,并且仅在与背景的差异足够大时才保存图像(希望只有在进入汽车时才保存)。然后将其设为新背景,并在新图像再次开始看起来像原始背景时重置新车。

希望我的想法很清楚,该链接提供了足够的信息来实施它。如果不是,只是要求澄清!

答案 3 :(得分:0)

首先,您必须具有特定的xml才能仅检测汽车。您可以从here获取它。我开发了一个代码,目的是唯一地识别和计数您正在使用的cctv可见的汽车,有时它也完全取决于帧速率和检测,因此您可以控制帧速率以及总计数变量。

import cv2
cascade_src = 'cars.xml'
cap = cv2.VideoCapture('rtsp_of_ur_cctv')
car_cascade = cv2.CascadeClassifier(cascade_src)
prev_count=0
total_count=0
while True:
    ret, img = cap.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    cars = car_cascade.detectMultiScale(gray, 1.1, 1)
    if len(cars)>prev_count:
        diffrence=len(cars)-prev_count
        total_count=total_count+diffrence
        #here yo can save unique new entry and possibly avoid the recursive ones
        print(total_count)
    for (x,y,w,h) in cars:
        cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),2)      
    prev_count=len(cars)
    cv2.imshow('video', img)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()