如何在opencv python中设置驻留时间

2024-05-15 12:47:46 发布

您现在位置:Python中文网/ 问答频道 /正文

你好,我是一名大学生,我的代码有点问题。在系统检测到摩托车后,我想在代码中给出3秒钟的等待时间,然后发出声音。我试图控制时间,但它不起作用。有人能帮我写代码吗

import cv2 import numpy as np import pygame import datetime as dt from pygame import mixer import time #=============== Variable Mouse ==================# drawing = False point1 = () point2 = () drawingTwo = False pointTwo_1 = () pointTwo_2 = () Mouse_count = False #================================================# def mouse_drawing(event, x, y, flags, params): global point1, point2, drawing global pointTwo_1, pointTwo_2, drawingTwo, Mouse_count #----------Mouse 1------- if Mouse_count == False: if event == cv2.EVENT_LBUTTONDOWN: if drawing is False: drawing = True point1 = (x, y) #else: #drawing = False elif event == cv2.EVENT_MOUSEMOVE: if drawing is True: point2 = (x, y) elif event == cv2.EVENT_LBUTTONUP: drawing = False Mouse_count = True #----------Mouse 2-------# if Mouse_count == True: if event == cv2.EVENT_LBUTTONDOWN: if drawingTwo is False: drawingTwo = True pointTwo_1 = (x, y) elif event == cv2.EVENT_MOUSEMOVE: if drawingTwo is True: pointTwo_2 = (x, y) elif event == cv2.EVENT_LBUTTONUP: if drawingTwo is True: drawingTwo = False Mouse_count = False #================================================# lastTime = dt.datetime.now() currentTime = dt.datetime.now() #Make Sound pygame.mixer.init() #create VideoCapture object and read from video file cap = cv2.VideoCapture('test13.mp4') cv2.namedWindow("Detecion motor") cv2.setMouseCallback("Detecion motor", mouse_drawing) while True: ret, frame = cap.read() car_cascade = cv2.CascadeClassifier('cascade11.xml') #============================== ROI One ============================# if point1 and point2: #Rectangle marker r = cv2.rectangle(frame, point1, point2, (100, 50, 200), 5) frame_ROI = frame[point1[1]:point2[1],point1[0]:point2[0]] #------------------Detect car ROI-------------------# if drawing is False: #convert video into gray scale of each frames ROI_grayscale = cv2.cvtColor(frame_ROI, cv2.COLOR_BGR2GRAY) #detect cars in the video cars_ROI = car_cascade.detectMultiScale(ROI_grayscale, 1.1, 3) if len(cars_ROI) > 0: if (currentTime-lastTime).seconds > 3: lastTime = dt.dateTime.now() sound = mixer.Sound('sirine2.wav') sound.play() for (x,y,w,h) in cars_ROI: cv2.rectangle(frame_ROI,(x,y),(x+w,y+h),(0,255,0),2) currentTime = dt.datetime.now() #cv2.putText(frame_ROI, "Jumlah Motor : " + str(cars_ROI.shape[0]), (10,frame_ROI.shape[0] -25), cv2.FONT_HERSHEY_TRIPLEX, 0.5,(0,255,0), 1) #-------------------------------------------------# #==================================================================# #============================== ROI Two ============================# #==================================================================# cv2.imshow("Detecion motor", frame) if cv2.waitKey(25) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()

我不知道我已经尝试使用时间。睡眠,但它只是使我的系统延迟不能解决我的问题


Tags: importeventfalsetrueifcountcv2frame
1条回答
网友
1楼 · 发布于 2024-05-15 12:47:46

在您的示例中,您的缩进是错误的:

if (currentTime-lastTime).seconds > 3:
                    lastTime = dt.dateTime.now()
                sound = mixer.Sound('sirine2.wav')
                sound.play()

这将在每次检测到摩托车并重置lasttime变量时播放声音。而是这样做:

if (currentTime-lastTime).seconds > 3:
                    lastTime = dt.dateTime.now()
                    sound = mixer.Sound('sirine2.wav')
                    sound.play()

相关问题 更多 >