OpenCv Python frame empty in mjpeg stream from webcam -


i'm creating program displays 4 mjpg cameras in grid, problem happens frame empty , stream freeze, capture error checking size of each frame, , if equal 1 continue cycle, problem remain in control loop, seems stream flow not able obtain valid frame, suggestion?

import socket import numpy np import cv2  cap = cv2.videocapture("http://85.90.40.19/mjpg/video.mjpg") cap2 = cv2.videocapture("http://85.90.40.19/mjpg/video.mjpg") cap3 = cv2.videocapture("http://85.90.40.19/mjpg/video.mjpg") cap4 = cv2.videocapture("http://85.90.40.19/mjpg/video.mjpg")    cv2.namedwindow('frame', cv2.wnd_prop_fullscreen)  cv2.setwindowproperty('frame', cv2.wnd_prop_fullscreen, cv2.window_fullscreen)  while true:      try:          ret, frame = cap.read()          ret2, frame2 = cap2.read()          ret3, frame3 = cap2.read()          ret4, frame4 = cap2.read()      except:          print("try catch")          continue         size = np.size(frame)      size2 = np.size(frame2)      size3 = np.size(frame3)      size4 = np.size(frame4)        if (size or size2 or size3 or size4) == 1:         print("frame 0")         continue       # print("dimensione" + str(size))       rframe = cv2.resize(frame, (640,480))      rframe2 = cv2.resize(frame2, (640,480))      rframe3 = cv2.resize(frame3, (640,480))      rframe4 = cv2.resize(frame4, (640,480))       print(ret,ret2,ret3,ret4)        vert1 = np.vstack((rframe,rframe2))      vert2 = np.vstack((rframe3,rframe4))       both = np.hstack((vert1,vert2))      print(both.shape)      # both.resize((1024, 768,3))       cv2.imshow('frame', both)      if cv2.waitkey(1) == 27:          break  cap.release() cv2.destroyallwindows() 

thanks , sorry bad english

could suggest following type of approach:

try:     ret, frame = cap.read() except:     ret, frame = (-1, blackframe)  try:     ret2, frame2 = cap2.read() except:     ret2, frame2 = (-1, blackframe)  try:     ret3, frame3 = cap3.read() except:     ret3, frame3 = (-1, blackframe)  try:     ret4, frame4 = cap4.read() except:     ret4, frame4 = (-1, blackframe) 

where blackframe suitable image have available when capture fails. allow other frames continue displayed.

the aim remove continue statement causes execution return top without letting of other code execute.


Comments