mirror of
https://github.com/rendies/People-Counting-in-Real-Time.git
synced 2025-05-14 18:09:29 +07:00
32 lines
901 B
Python
32 lines
901 B
Python
import cv2, threading, queue
|
|
|
|
class ThreadingClass:
|
|
# initiate threading class
|
|
def __init__(self, name):
|
|
self.cap = cv2.VideoCapture(name)
|
|
# define an empty queue and thread
|
|
self.q = queue.Queue()
|
|
t = threading.Thread(target=self._reader)
|
|
t.daemon = True
|
|
t.start()
|
|
|
|
# read the frames as soon as they are available
|
|
# this approach removes OpenCV's internal buffer and reduces the frame lag
|
|
def _reader(self):
|
|
while True:
|
|
ret, frame = self.cap.read() # read the frames and ---
|
|
if not ret:
|
|
break
|
|
if not self.q.empty():
|
|
try:
|
|
self.q.get_nowait()
|
|
except queue.Empty:
|
|
pass
|
|
self.q.put(frame) # --- store them in a queue (instead of the buffer)
|
|
|
|
def read(self):
|
|
return self.q.get() # fetch frames from the queue one by one
|
|
|
|
def release(self):
|
|
return self.cap.release() # release the hw resource
|