def __init__(self, history=None): self._history = frameHistory() self.backgroundModel = None self._STATIC_HISTORY = False self._history.N = 100 #Use 100 frames by default if history != None: self.setHistory(history)
def __init__(self,history=None): logger = create_log('backgroundSubtractor') logger.info('backgroundSubtractor instance created') self._history = frameHistory() self.backgroundModel = None self._STATIC_HISTORY = False self._history.N = 100 #Use 100 frames by default if history != None: self.setHistory(history)
def readMovie(filename, Nframes=None, stride=1, startpos=None, endpos=1.0, verbose=True, startframe=0, endframe=-1, transforms=[]): """ Function to read in a movie file using openCV and store as a frameHistory Arguments: filename -> name of the movie file to read from OR MAST shot number to read keywords: Nframes -> Number of frames to read Default: None, read entire movie stride -> Read frames with a stride Default: 1, read every frame startpos -> Relative position to start Default: 0, start from beginning of movie reading from, 0 = start, 1 = end, 0.xx is xx% through the movie endpos -> Relative position to end Default: 1, read until end of movie reading transforms -> Apply any or all of the following transforms to the image data 'reverse_x' : reverse the x dimension 'reverse_y' : reverse the y dimension 'transpose' : transpose the image (flip x and y) Example: frames = readMove('myMovie.mov',Nframes=100,stride=2,startpos=0.3,endpos=0.5) This will read every 2nd frame of a movie from the file 'myMovie.mov' starting from 30% into the movie and ending after 100 frames, or when it reaches 50% through, whichever comes first """ frames = frameHistory(Nframes) if '.' not in filename or filename.split( '.')[-1] == 'ipx' or filename.split('.')[-1] == 'mraw': if filename.split('.')[-1] == 'ipx': #Assume it is a shot number if '.' not in filename: vid = ipxReader(shot=filename) else: vid = ipxReader(filename=filename) if startpos is not None: startframe = int(startpos * vid.file_header['numFrames']) if endpos is not None: endframe = int(endpos * vid.file_header['numFrames']) elif endframe is -1: endframe = int(1.0 * vid.file_header['numFrames']) else: if filename.split('.')[-1] == 'mraw': vid = mrawReader(filename=filename) else: vid = imstackReader(directory=filename) if startpos is not None: startframe = int(startpos * int(vid.file_header['TotalFrame'])) if endpos is not None: endframe = int(endpos * int(vid.file_header['TotalFrame'])) elif endpos is -1: endframe = int(1.0 * int(vid.file_header['TotalFrame'])) vid.set_frame_number(startframe) N = 0 for i in np.arange(Nframes * stride): ret, frame, header = vid.read(transforms=transforms) #print ret if ret and not N + startframe > endframe: if i % stride == 0: frames.add(frame, header['time_stamp'], startframe + i) N += 1 if verbose: print("Reading movie frame " + str(startframe + i)) else: break else: #Reading a non-ipx file with openCV vid = cv2.VideoCapture(filename) #Set the starting point of the video vid.set(2, startpos) if Nframes == None: #Set number of frames in history to number of frames in movie (accounting for stride) Nframes = int(vid.get(7) / stride) times = [] frameNos = [] for i in np.arange(Nframes * stride): ret, frame = vid.read() if ret and not vid.get(2) > endpos: #Succesful read if i % stride == 0: #Only take every stride frames frames.add(frame, vid.get(0), vid.get(1)) if verbose: print("Reading movie frame " + str(i)) else: break vid.release() return frames
def readMovie(filename,Nframes=None,stride=1,startpos=0.0,endpos=1.0,verbose=True): """ Function to read in a movie file using openCV and store as a frameHistory Arguments: filename -> name of the movie file to read from OR MAST shot number to read keywords: Nframes -> Number of frames to read Default: None, read entire movie stride -> Read frames with a stride Default: 1, read every frame startpos -> Relative position to start Default: 0, start from beginning of movie reading from, 0 = start, 1 = end, 0.xx is xx% through the movie endpos -> Relative position to end Default: 1, read until end of movie reading Example: frames = readMove('myMovie.mov',Nframes=100,stride=2,startpos=0.3,endpos=0.5) This will read every 2nd frame of a movie from the file 'myMovie.mov' starting from 30% into the movie and ending after 100 frames, or when it reaches 50% through, whichever comes first """ frames = frameHistory(Nframes) if '.' not in filename or filename.split('.')[-1] == 'ipx' or filename.split('.')[-1] == 'mraw': if '.' not in filename or filename.split('.')[-1] == 'ipx': #Assume it is a shot number if '.' not in filename: vid = ipxReader(shot=filename) else: vid = ipxReader(filename=filename) startframe = int(startpos*vid.file_header['numFrames']) endframe = int(endpos*vid.file_header['numFrames']) else: vid = mrawReader(filename=filename) startframe = int(startpos*int(vid.file_header['TotalFrame'])) endframe = int(endpos*int(vid.file_header['TotalFrame'])) vid.set_frame_number(startframe) N = 0 for i in np.arange(Nframes*stride): ret,frame,header = vid.read() #print ret if ret and not N + startframe > endframe: if i % stride == 0: frames.add(frame,header['time_stamp'],startframe + i) N += 1 if verbose: print("Reading movie frame "+str(startframe + i)) else: break else: #Reading a non-ipx file with openCV vid = cv2.VideoCapture(filename) #Set the starting point of the video vid.set(2,startpos) if Nframes==None: #Set number of frames in history to number of frames in movie (accounting for stride) Nframes=int(vid.get(7)/stride) times = [] frameNos = [] for i in np.arange(Nframes*stride): ret,frame = vid.read() if ret and not vid.get(2)>endpos: #Succesful read if i%stride==0: #Only take every stride frames frames.add(frame,vid.get(0),vid.get(1)) if verbose: print("Reading movie frame "+str(i)) else: break vid.release() return frames