Я пытаюсь сохранить изображения с трех камер одновременно, используя muti (3) -потоки и нажимая кнопку.
Я выбрал код онлайн и создал три объектапример.Потоки работают нормально, и окна отображаются и могут сохранять изображения.Но я не уверен, правильно ли я использую «Замки» (приобретение и выпуск).Всего 4 замка.
Current Code:
#!/usr/bin/env python
from threading import Thread, Lock
import cv2
class WebcamVideoStream :
def __init__(self, src = 0, width = 1024, height = 768) :
# width = 320, height = 240
self.stream = cv2.VideoCapture(src)
self.stream.set(cv2.CAP_PROP_FRAME_WIDTH, width)
self.stream.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
(self.grabbed, self.frame) = self.stream.read()
self.started = False
self.read_lock = Lock()
def start(self) :
if self.started :
print "already started!!"
return None
self.started = True
self.thread = Thread(target=self.update, args=())
self.thread.start()
return self
def update(self) :
while self.started :
#if self.stream.grab():
#(grabbed, frame) = self.stream.retrieve()
(grabbed, frame) = self.stream.read()
self.read_lock.acquire()
self.grabbed, self.frame = grabbed, frame
self.read_lock.release()
def read(self) :
self.read_lock.acquire()
frame = self.frame.copy()
self.read_lock.release()
return frame
def stop(self) :
self.started = False
self.thread.join()
def __exit__(self, exc_type, exc_value, traceback) :
self.stream.release()
if __name__ == "__main__" :
mainer_lock = Lock()
vs = WebcamVideoStream(src = 0).start()
vs2 = WebcamVideoStream(src = 1).start()
vs3 = WebcamVideoStream(src = 2).start()
while True :
frame = vs.read()
frame2 = vs2.read()
frame3 = vs3.read()
cv2.imshow('webcam', frame)
cv2.imshow('webcam2', frame2)
cv2.imshow('webcam3', frame3)
if cv2.waitKey(1) == 99:
mainer_lock.acquire()
cv2.imwrite('cam_pics/frame.jpg', frame)
cv2.imwrite('cam_pics/frame2.jpg', frame2)
cv2.imwrite('cam_pics/frame3.jpg', frame3)
mainer_lock.release()
vs.stop()
vs2.stop()
vs3.stop()
cv2.destroyAllWindows()