in awstreamer/gst_pipeline/cv_pipeline.py [0:0]
def start(self):
logger.info("Starting %s..." % self.__class__.__name__)
index = self.min_idx
while True:
try:
# Get desired frame from the video feed
if index > -1:
self.source.set(1, index)
# Capture frame
ret, img = self.source.read()
if not ret or img is None:
if self.restart:
if self.src_type == "live":
logger.info("Restarting camera feed...")
self.source = cv2.VideoCapture(self.config["source"]["name"])
else:
if self.min_idx > -1:
index = self.min_idx
else:
self.source.set(1, 0)
logger.info("Probably end of video stream. Starting over...")
time.sleep(1)
continue
else:
logger.error("Can't receive frame (stream end?). Exiting ...")
break
# Rotate 90 degrees clock-wise
if self.rotate:
img = cv2.transpose(img)
img = cv2.flip(img, flipCode=1)
# Display
if self.source_window_name:
cv2.imshow(self.source_window_name, img)
# Process
img = self.process(img)
# Dump to sink output
if self.sink_output is not None:
self.sink_output.write(img)
# Dump to sink pipeline
if self.sink_pipeline is not None:
img = cv2.resize(img, (self.sink_width, self.sink_height))
self.sink_pipeline.push(img)
# Display
if self.sink_window_name:
cv2.imshow(self.sink_window_name, img)
if self.source_window_name or self.sink_window_name:
cv2.waitKey(1)
# Increment
if index > -1:
index += self.step
if self.max_idx > -1 and index > self.max_idx:
if self.restart:
index = self.min_idx
logger.info("End of clip. Restarting...")
else:
break
except Exception as e:
logger.error("Exception caught in CvPipeline: " + repr(e))
if self.restart:
logger.info("Restarting video source...")
index = self.min_idx
self.source = cv2.VideoCapture(self.config["source"]["name"])
time.sleep(1)