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()
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()
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()
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