Example #1
0
class Source:
    def __init__(self, main_window, database, admin):
        self.main_window = main_window
        self.dbs = database.session
        self.admin = admin
        self.setup_list = []
        self.setup_frames = None
        self.analysis_frames = None
        self.background = None
        self.polygon = None
        self.base_name = None
        self.media = None
        self.video = None
        self.out = None
        self.location = None
        self.path = None
        self.analysis = None
        self.analysis_dict = None

    def open_files(self):
        self.setup_files()

    def open_camera(self):
        self.setup = Setup(self)
        self.setup.base_name = self.base_name
        self.setup.camera()

    def open(self, media):
        self.media = media
        if media == 'file':
            print("Source is a file")
            self.setup_list = []
            self.files = QtGui.QFileDialog.getOpenFileNames(\
                self.main_window, 'Open video file', '', \
                'Videos (*.avi *.mp4)')
            if self.files: 
                self.open_files()
        if media == 'camera':
            print("Source is a camera")
            self.window = SourceWindow(self, self.main_window)

    def not_exist(self, source_path):
        s = self.dbs
        result = s.query(Video).filter(Video.path == source_path)
        print("result count :", result.count())
        if result.count() == 0:
            return True
        elif result.count() == 1:
            print("Source exist", result.first())
        else:
            print("Multiple source exist!")
        return False

    def generate_setup_list(self):
        for file in self.files:
            if self.not_exist(file):
               self.setup_list.append(file) 
        print("Setup list :", self.setup_list)

    def setup_files(self):
        self.generate_setup_list()
        self.setup = Setup(self)
        if len(self.setup_list) > 0:
            self.setup.status = True
            self.setup.sequencer()
        else:
            print("Nothing to setup proceed to analysis")
            self.analysis = Analysis(self, self.setup)

    def setup_get_next_frame(self):
        ret, read_frame = self.setup_frames.read()
        if ret:
            self.setup_current_frame = read_frame
        else:
            self.setup_current_frame = None 

    def analysis_get_next_frame(self):
        ret, read_frame = self.analysis_frames.read()
        if ret:
            self.analysis_current_frame = read_frame
            # save video if source is camera
            if self.media == 'camera':
                frame = copy(read_frame)
                def save_frame():
                    self.out.write(frame)
                thread = Thread(target=save_frame)
                thread.start()
        else:
            self.analysis_current_frame = None