Answer the question
In order to leave comments, you need to log in
How to run video asynchronously on signal?
How can I make it so that the video is played in a different stream and it can be replaced if necessary by a signal in real time?
import threading
import time
import logging
import queue as Queue
from MediaProvider import MediaProvider
from SerialPortProvider import SerialPortProvider
import cv2
import numpy as np
import asyncio
logging.basicConfig(level=logging.DEBUG,
format='(%(threadName)-9s) %(message)s',)
BUF_SIZE = 10
q = Queue.Queue(BUF_SIZE)
class ProducerThread(threading.Thread):
def __init__(self, group=None, target=None, name=None,
args=(), kwargs=None, verbose=None):
super(ProducerThread,self).__init__()
self.target = target
self.name = name
def run(self):
while True:
if not q.full():
signal = SerialPortProvider.getSignalTest()
logging.info("Producer got message: %s", signal)
q.put(signal)
time.sleep(1)
return
class ConsumerThread(threading.Thread):
def __init__(self, group=None, target=None, name=None,
args=(), kwargs=None, verbose=None):
super(ConsumerThread,self).__init__()
self.target = target
self.name = name
return
async def videoPlayer(self, linkToVideo):
window_name = "window"
interframe_wait_ms = 30
cap = cv2.VideoCapture(linkToVideo)
if not cap.isOpened():
print("Error: Could not open video.")
exit()
cv2.namedWindow(window_name, cv2.WND_PROP_FULLSCREEN)
cv2.setWindowProperty(window_name, cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
while (True):
ret, frame = cap.read()
if ret:
cv2.imshow(window_name, frame)
else:
cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
if cv2.waitKey(interframe_wait_ms) & 0x7F == ord('q'):
print("Exit requested.")
break
cap.release()
cv2.destroyAllWindows()
def run(self):
while True:
if not q.empty():
item = q.get()
logging.info("Consumer storing message: %s (size=%d)", item, q.qsize())
self.videoPlayer(MediaProvider.getProccessingVideo())
time.sleep(1)
return
if __name__ == '__main__':
p = ProducerThread(name='producer')
c = ConsumerThread(name='consumer')
p.start()
time.sleep(2)
c.start()
time.sleep(2)
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question