Source code for State_player

# CellTracking.py
# By MW, Jun 2013
# GPLv3+
#
# Class representing a player state. 
import logging, cv2, imp, numpy

# Loading filters
Contrast = imp.load_source('contrast', './bin/Movies/Filters/Contrast.py')
contrast = Contrast.Contrast()

[docs]class Player_state : """Class containing all parameters required to run a player This class should only be instanciated inside a Player class""" def __init__(self, state) : self.state = state self.play = False self.current_frame_index = 0 self.current_pos = (0,0) # Position of the image inside the window. self.current_window = (0,0) # Dimensions of the window self.current_channel = None self.current_zoom = 1 self.current_speed = 1 self.current_manual_mode = False self.speeds = (0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 20, 50) self.zooms = (0.1, 0.25, 0.5, 1, 2, 5, 10, 25) self.slow_play_index = 0 self.current_click = None self.current_frame = None self.locked = False self.raw_frame = None # The image just coming from the file # Cell relative data (to move to a specific state) self.reference_size = 20 #def set_current_channel(self, channel_name) : # self.current_channel = channel_name
[docs] def set_lock(self, lock) : self.locked = lock
[docs] def set_current_channel(self, ch_name) : """Replace the current channel. The input should be a channel name""" self.current_channel = ch_name
[docs] def get_current_channel(self) : return self.current_channel
[docs] def set_current_speed(self, s) : """Input is a speed index""" if s in self.speeds : self.current_speed = s else : logging.error("Requested speed is not in the allowed speeds")
[docs] def get_current_index(self) : return self.current_frame_index
def set_current_frame(self, im) : #if not self.locked : self.current_frame = im #else : # logging.warning("Playing is locked, cannot change frame")
[docs] def get_raw_frame(self) : """Read a frame from buffer""" if self.raw_frame != None : return self.raw_frame else : return self.read_raw_frame()
[docs] def read_raw_frame(self, zoom=1) : """zoom parameter unused for the moment""" f = self.state.movie.get_frame(self.current_frame_index, self.current_channel) return cv2.resize(f, dsize=(int(f.shape[0]*self.current_zoom), int(f.shape[1]*self.current_zoom))) """Read a frame from file"""
[docs] def get_current_frame(self, zoom=1,depth=8) : if self.current_frame != None : f = self.current_frame else : f = self.read_raw_frame() #if zoom != 1 : # f = cv2.resize(f, dsize=(int(f.shape[0]*self.current_zoom), int(f.shape[1]*self.current_zoom))) # print f.shape if depth==8 : f=cv2.convertScaleAbs(f, alpha=0.4) f = f-numpy.min(f)#, beta=-1*numpy.min(f)) ### EXPERIMENTAL return f
[docs] def set_current_frame(self, f) : self.current_frame = f
[docs] def process_frame(self) : f = self.get_current_frame() #try : # Contrast c = self.state.get_subclass('contrast') f = contrast.overlay(f, contrast=c.current_contrast, auto=c.auto_contrast) #except : # logging.error("An error occured in State_player when dealing with contrast") self.current_frame = f return f
[docs] def set_pos(self, pos) : """Set the position of the image in the window The tuple gives the coordinates of the TOP-LEFT corner""" self.current_pos = (int(pos[0]), int(pos[1]))
[docs] def set_window(self, win) : """Sets the dimension of the display window (in px)""" self.current_window = (int(win[0]), int(win[1]))
[docs] def change_playing(self, dest=None) : """Set the player to dest if specified, switch if not""" # Should check the type of dest... if dest == None : self.play = not self.play else : self.play = dest return self.play
[docs] def switch_manual(self, dest=None) : """Function that swiches between automatic and manual playing""" if dest == None : self.current_manual_mode = not self.current_manual_mode else : self.current_manual_mode = dest return self.current_manual_mode
[docs] def set_current_zoom(self, z) : if z in self.zooms : self.current_zoom = z else : logging.error("The specified zoom level is invalid")
[docs] def get_current_zoom(self) : return self.current_zoom
[docs] def set_current_frame_index(self, i) : """Sets the current frame""" if (i >= 0) and (i<self.state.get_frame_nb()) : if not self.locked: self.current_frame_index = i else : logging.warning('Playing is locked, cannot change frame') else : logging.error("set_current_frame_index() requested an invalid frame index: %s.", str(i))
[docs] def set_image_click(self, tup) : """Event called when the image is clicked""" self.current_click = tup