def openCSVFile(self, activated=False, filePath=None):
        if filePath is None:
            filePath, _ = QFileDialog.getOpenFileName(None, 'Open CSV File',
                                                      userDir,
                                                      'CSV files (*.csv)')

        if len(filePath) is not 0:
            df = pd.read_csv(filePath, index_col=0)
            name = df.index.name

            if name is None:
                name = 'position'

            self.df[name] = df
            self.file_name_dict[name] = filePath

            if name is None or name == 'position':
                if self.trackingPathGroup is not None:
                    self.inputScene.removeItem(self.trackingPathGroup)

                self.trackingPathGroup = TrackingPathGroup()
                self.trackingPathGroup.setRect(self.inputScene.sceneRect())
                self.inputScene.addItem(self.trackingPathGroup)

                self.trackingPathGroup.setDrawLine(self.actionPath.isChecked())
                self.trackingPathGroup.setDrawItem(
                    self.actionCircle.isChecked())
                self.trackingPathGroup.setDrawMarkItem(
                    self.actionIntervalMark.isChecked())

                shape = self.df['position'].shape
                self.num_items = int(shape[1] / 2)
                index = (np.repeat(range(self.num_items),
                                   2).tolist(), [0, 1] * self.num_items)
                self.df['position'].columns = pd.MultiIndex.from_tuples(
                    tuple(zip(*index)))

                self.trackingPathGroup.setDataFrame(self.df['position'])

                delta = self.df['position'].index[1] - self.df[
                    'position'].index[0]
                self.videoPlaybackWidget.setPlaybackDelta(delta)
                self.videoPlaybackWidget.setMaxTickableFrameNo(
                    self.df['position'].index[-1])
            elif name == 'arrow':
                if self.movableArrowGroup is not None:
                    self.inputScene.removeItem(self.movableArrowGroup)

                self.movableArrowGroup = MovableArrowGroup()
                self.inputScene.addItem(self.movableArrowGroup)
                self.movableArrowGroup.edited.connect(self.arrowEdited)

                if not self.actionArrow.isChecked():
                    self.movableArrowGroup.hide()

            if 'arrow' in self.df.keys() and 'position' in self.df.keys():
                self.movableArrowGroup.setDataFrame(self.df['arrow'],
                                                    self.df['position'])

            self.initialize()
Exemple #2
0
    def openCSVFile(self, activated=False, filePath=None):
        if filePath is None:
            filePath, _ = QFileDialog.getOpenFileName(None, 'Open CSV File',
                                                      userDir,
                                                      'CSV files (*.csv)')

        if len(filePath) is not 0:
            self.filePath = filePath
            self.df = pd.read_csv(filePath, index_col=0)

            if self.trackingPathGroup is not None:
                self.inputScene.removeItem(self.trackingPathGroup)

            self.trackingPathGroup = TrackingPathGroup()
            self.trackingPathGroup.setRect(self.inputScene.sceneRect())
            self.inputScene.addItem(self.trackingPathGroup)

            shape = self.df.shape
            self.num_items = int(shape[1] / 2)
            index = (np.repeat(range(self.num_items),
                               2).tolist(), [0, 1] * self.num_items)
            self.df.columns = pd.MultiIndex.from_tuples(tuple(zip(*index)))

            self.trackingPathGroup.setDataFrame(self.df)

            delta = self.df.index[1] - self.df.index[0]
            self.videoPlaybackWidget.setPlaybackDelta(delta)
            self.videoPlaybackWidget.setMaxTickableFrameNo(self.df.index[-1])

            self.initialize()
Exemple #3
0
    def openCSVFile(self, activated=False, filePath=None):
        if filePath is None:
            filePath, _ = QFileDialog.getOpenFileName(None, 'Open CSV File',
                                                      userDir,
                                                      'CSV files (*.csv)')

        if len(filePath) is not 0:
            self.filePath = filePath
            self.df = pd.read_csv(filePath, index_col=0)

            if self.trackingPathGroup is not None:
                self.inputScene.removeItem(self.trackingPathGroup)

            self.trackingPathGroup = TrackingPathGroup()
            self.trackingPathGroup.setRect(self.inputScene.sceneRect())
            self.inputScene.addItem(self.trackingPathGroup)

            self.trackingPathGroup.setDataFrame(self.df)

            self.initialize()
Exemple #4
0
    def initializeTrackingSystem(self):
        self.isInitialized = False
        self.removeTrackingGraphicsItems()

        if hasattr(self, 'currentFrameNo') and self.currentFrameNo != 0:
            ret, frame = self.videoPlaybackWidget.readFrame(0)
            self.cv_img = frame
            self.updateInputGraphicsView()
            self.currentFrameNo = 0
            self.videoPlaybackWidget.setSliderValueWithoutSignal(0)

        self.videoPlaybackWidget.setMaxTickableFrameNo(0)

        try:
            tracking_n = self.stackedWidget.currentWidget().get_tracking_n()
            attrs = self.stackedWidget.currentWidget().get_attributes()
            is_filter_required = self.stackedWidget.currentWidget().is_filter_required()
            attrs.keys()
        except Exception as e:
            msg = 'Tracking Lib. Tracking N or attributes Error:\n{}'.format(e)
            self.generateCriticalMessage(msg)
            return

        if not (self.videoPlaybackWidget.isOpened() and
           (filterOperation is not None or not is_filter_required)):
            return False


        if is_filter_required:
            self.filter = filterOperation(self.cv_img)
            self.filter.fgbg = self.filterIO.getBackgroundImg()
            self.filter.isInit = True
        else:
            self.filter = None

        max_frame_pos = self.videoPlaybackWidget.getMaxFramePos()

        self.df = {}
        for k, t in attrs.items():
            if t is None:
                self.data_dict[k] = {}
                self.data_dict[k]['name'] = k
            else:
                tuples = []
                for i in range(tracking_n):
                    for v in t:
                        tuples.append((i, v))
                col = pd.MultiIndex.from_tuples(tuples)
                self.df[k] = pd.DataFrame(
                    index=range(0, max_frame_pos+1, self.playbackDeltaSpinBox.value()),
                    columns=col,
                    dtype=np.float64
                    ).sort_index().sort_index(axis=1)
                self.df[k].index.name = k

        if 'position' in attrs:
            self.trackingPathGroup = TrackingPathGroup()
            self.trackingPathGroup.setRect(self.inputScene.sceneRect())
            if self.pathCheckBox.checkState()==Qt.Unchecked:
                self.trackingPathGroup.hide()

            self.inputScene.addItem(self.trackingPathGroup)
            self.trackingPathGroup.setDataFrame(self.df['position'])

            lw = self.trackingPathGroup.autoAdjustLineWidth(self.cv_img.shape)
            r = self.trackingPathGroup.autoAdjustRadius(self.cv_img.shape)
            self.trackingPathGroup.setOverlayFrameNo(self.overlayFrameNoSpinBox.value())
            self.lineWidthSpinBox.setValue(lw)
            self.radiusSpinBox.setValue(r)

            self.trackingPathGroup.setItemsAreMovable(True)

        if 'rect' in attrs:
            self.item_dict['rect'] = [QGraphicsRectItem() for i in range(tracking_n)]
            for rect_item in self.item_dict['rect']:
                rect_item.setZValue(1000)
                self.inputScene.addItem(rect_item)

        if 'arrow' in attrs:
            self.item_dict['arrow'] = [MovableArrow() for i in range(tracking_n)]
            for arrow_item in self.item_dict['arrow']:
                arrow_item.setZValue(900)
                if self.arrowCheckBox.checkState()==Qt.Unchecked:
                    arrow_item.hide()
                self.inputScene.addItem(arrow_item)

        if 'path' in attrs:
            self.item_dict['path'] = [QGraphicsPathItem() for i in range(tracking_n)]
            for path_item in self.item_dict['path']:
                path_item.setZValue(900)
                self.inputScene.addItem(path_item)

        if 'polygon' in attrs:
            self.item_dict['polygon'] = [QGraphicsPathItem() for i in range(tracking_n)]
            for path_item in self.item_dict['polygon']:
                path_item.setZValue(900)
                self.inputScene.addItem(path_item)

        # if self.currentFrameNo != 0:
        #     self.videoPlaybackWidget.moveToFrame(0)
        self.videoPlaybackWidget.setPlaybackDelta(self.playbackDeltaSpinBox.value())

        self.isInitialized = True