def __init__( self, shell, headless, workflow_cmdline_args, project_creation_args, *args, **kwargs ): graph = kwargs['graph'] if 'graph' in kwargs else Graph() if 'graph' in kwargs: del kwargs['graph'] super(StructuredTrackingWorkflowBase, self).__init__(shell, headless, workflow_cmdline_args, project_creation_args, graph=graph, *args, **kwargs) data_instructions = 'Use the "Raw Data" tab to load your intensity image(s).\n\n' if self.fromBinary: data_instructions += 'Use the "Binary Image" tab to load your segmentation image(s).' else: data_instructions += 'Use the "Prediction Maps" tab to load your pixel-wise probability image(s).' # Create applets self.dataSelectionApplet = DataSelectionApplet(self, "Input Data", "Input Data", batchDataGui=False, forceAxisOrder=['txyzc'], instructionText=data_instructions, max_lanes=1) opDataSelection = self.dataSelectionApplet.topLevelOperator if self.fromBinary: opDataSelection.DatasetRoles.setValue( ['Raw Data', 'Binary Image'] ) else: opDataSelection.DatasetRoles.setValue( ['Raw Data', 'Prediction Maps'] ) if not self.fromBinary: self.thresholdTwoLevelsApplet = ThresholdTwoLevelsApplet( self,"Threshold and Size Filter","ThresholdTwoLevels" ) self.divisionDetectionApplet = ObjectClassificationApplet(workflow=self, name="Division Detection (optional)", projectFileGroupName="DivisionDetection", selectedFeatures=configConservation.selectedFeaturesDiv) self.cellClassificationApplet = ObjectClassificationApplet(workflow=self, name="Object Count Classification", projectFileGroupName="CountClassification", selectedFeatures=configConservation.selectedFeaturesObjectCount) self.trackingFeatureExtractionApplet = TrackingFeatureExtractionApplet(name="Object Feature Computation",workflow=self, interactive=False) self.objectExtractionApplet = ObjectExtractionApplet(name="Object Feature Computation",workflow=self, interactive=False) self.annotationsApplet = AnnotationsApplet( name="Training", workflow=self ) opAnnotations = self.annotationsApplet.topLevelOperator self.trackingApplet = StructuredTrackingApplet( name="Tracking - Structured Learning", workflow=self ) opStructuredTracking = self.trackingApplet.topLevelOperator if SOLVER=="CPLEX" or SOLVER=="GUROBI": self._solver="ILP" elif SOLVER=="DPCT": self._solver="Flow-based" else: self._solver=None opStructuredTracking._solver = self._solver self.default_tracking_export_filename = '{dataset_dir}/{nickname}-tracking_exported_data.csv' self.dataExportTrackingApplet = TrackingBaseDataExportApplet(self, "Tracking Result Export",default_export_filename=self.default_tracking_export_filename) opDataExportTracking = self.dataExportTrackingApplet.topLevelOperator opDataExportTracking.SelectionNames.setValue( ['Tracking-Result', 'Merger-Result', 'Object-Identities'] ) opDataExportTracking.WorkingDirectory.connect( opDataSelection.WorkingDirectory ) self.dataExportTrackingApplet.set_exporting_operator(opStructuredTracking) self.dataExportTrackingApplet.prepare_lane_for_export = self.prepare_lane_for_export self.dataExportTrackingApplet.post_process_lane_export = self.post_process_lane_export # configure export settings settings = {'file path': self.default_tracking_export_filename, 'compression': {}, 'file type': 'h5'} selected_features = ['Count', 'RegionCenter', 'RegionRadii', 'RegionAxes'] opStructuredTracking.ExportSettings.setValue( (settings, selected_features) ) self._applets = [] self._applets.append(self.dataSelectionApplet) if not self.fromBinary: self._applets.append(self.thresholdTwoLevelsApplet) self._applets.append(self.trackingFeatureExtractionApplet) self._applets.append(self.divisionDetectionApplet) self.batchProcessingApplet = BatchProcessingApplet(self, "Batch Processing", self.dataSelectionApplet, self.dataExportTrackingApplet) self._applets.append(self.cellClassificationApplet) self._applets.append(self.objectExtractionApplet) self._applets.append(self.annotationsApplet) self._applets.append(self.trackingApplet) self._applets.append(self.dataExportTrackingApplet) if self.divisionDetectionApplet: opDivDetection = self.divisionDetectionApplet.topLevelOperator opDivDetection.SelectedFeatures.setValue(configConservation.selectedFeaturesDiv) opDivDetection.LabelNames.setValue(['Not Dividing', 'Dividing']) opDivDetection.AllowDeleteLabels.setValue(False) opDivDetection.AllowAddLabel.setValue(False) opDivDetection.EnableLabelTransfer.setValue(False) opCellClassification = self.cellClassificationApplet.topLevelOperator opCellClassification.SelectedFeatures.setValue(configConservation.selectedFeaturesObjectCount ) opCellClassification.SuggestedLabelNames.setValue( ['False Detection',] + [str(1) + ' Object'] + [str(i) + ' Objects' for i in range(2,10) ] ) opCellClassification.AllowDeleteLastLabelOnly.setValue(True) opCellClassification.EnableLabelTransfer.setValue(False) if workflow_cmdline_args: if '--testFullAnnotations' in workflow_cmdline_args: self.testFullAnnotations = True else: self.testFullAnnotations = False self._data_export_args, unused_args = self.dataExportTrackingApplet.parse_known_cmdline_args( workflow_cmdline_args ) self._batch_input_args, unused_args = self.batchProcessingApplet.parse_known_cmdline_args( workflow_cmdline_args ) else: unused_args = None self._data_export_args = None self._batch_input_args = None self.testFullAnnotations = False if unused_args: logger.warning("Unused command-line args: {}".format( unused_args ))
def __init__( self, shell, headless, workflow_cmdline_args, project_creation_args, *args, **kwargs ): graph = kwargs['graph'] if 'graph' in kwargs else Graph() if 'graph' in kwargs: del kwargs['graph'] super(StructuredTrackingWorkflowBase, self).__init__(shell, headless, workflow_cmdline_args, project_creation_args, graph=graph, *args, **kwargs) data_instructions = 'Use the "Raw Data" tab to load your intensity image(s).\n\n' if self.fromBinary: data_instructions += 'Use the "Binary Image" tab to load your segmentation image(s).' else: data_instructions += 'Use the "Prediction Maps" tab to load your pixel-wise probability image(s).' # Create applets self.dataSelectionApplet = DataSelectionApplet(self, "Input Data", "Input Data", batchDataGui=False, forceAxisOrder='txyzc', instructionText=data_instructions, max_lanes=1) opDataSelection = self.dataSelectionApplet.topLevelOperator if self.fromBinary: opDataSelection.DatasetRoles.setValue( ['Raw Data', 'Binary Image'] ) else: opDataSelection.DatasetRoles.setValue( ['Raw Data', 'Prediction Maps'] ) if not self.fromBinary: self.thresholdTwoLevelsApplet = ThresholdTwoLevelsApplet( self,"Threshold and Size Filter","ThresholdTwoLevels" ) self.divisionDetectionApplet = ObjectClassificationApplet(workflow=self, name="Division Detection (optional)", projectFileGroupName="DivisionDetection", selectedFeatures=configStructured.selectedFeaturesDiv) self.cellClassificationApplet = ObjectClassificationApplet(workflow=self, name="Object Count Classification", projectFileGroupName="CountClassification", selectedFeatures=configStructured.selectedFeaturesObjectCount) self.cropSelectionApplet = CropSelectionApplet(self,"Crop Selection","CropSelection") self.trackingFeatureExtractionApplet = TrackingFeatureExtractionApplet(name="Object Feature Computation",workflow=self, interactive=False) self.objectExtractionApplet = ObjectExtractionApplet(name="Object Feature Computation",workflow=self, interactive=False) self.annotationsApplet = AnnotationsApplet( name="Training", workflow=self ) opAnnotations = self.annotationsApplet.topLevelOperator # self.default_training_export_filename = '{dataset_dir}/{nickname}-training_exported_data.csv' # self.dataExportAnnotationsApplet = TrackingBaseDataExportApplet(self, "Training Export",default_export_filename=self.default_training_export_filename) # opDataExportAnnotations = self.dataExportAnnotationsApplet.topLevelOperator # opDataExportAnnotations.SelectionNames.setValue( ['User Training for Tracking', 'Object Identities'] ) # opDataExportAnnotations.WorkingDirectory.connect( opDataSelection.WorkingDirectory ) # self.dataExportAnnotationsApplet.set_exporting_operator(opAnnotations) self.trackingApplet = StructuredTrackingApplet( name="Tracking - Structured Learning", workflow=self ) opStructuredTracking = self.trackingApplet.topLevelOperator self.default_tracking_export_filename = '{dataset_dir}/{nickname}-tracking_exported_data.csv' self.dataExportTrackingApplet = TrackingBaseDataExportApplet(self, "Tracking Result Export",default_export_filename=self.default_tracking_export_filename) opDataExportTracking = self.dataExportTrackingApplet.topLevelOperator opDataExportTracking.SelectionNames.setValue( ['Tracking Result', 'Merger Result', 'Object Identities'] ) opDataExportTracking.WorkingDirectory.connect( opDataSelection.WorkingDirectory ) self.dataExportTrackingApplet.set_exporting_operator(opStructuredTracking) self.dataExportTrackingApplet.post_process_lane_export = self.post_process_lane_export self._applets = [] self._applets.append(self.dataSelectionApplet) if not self.fromBinary: self._applets.append(self.thresholdTwoLevelsApplet) self._applets.append(self.trackingFeatureExtractionApplet) self._applets.append(self.divisionDetectionApplet) self._applets.append(self.cellClassificationApplet) self._applets.append(self.cropSelectionApplet) self._applets.append(self.objectExtractionApplet) self._applets.append(self.annotationsApplet) # self._applets.append(self.dataExportAnnotationsApplet) self._applets.append(self.trackingApplet) self._applets.append(self.dataExportTrackingApplet) if self.divisionDetectionApplet: opDivDetection = self.divisionDetectionApplet.topLevelOperator opDivDetection.SelectedFeatures.setValue(configConservation.selectedFeaturesDiv) opDivDetection.LabelNames.setValue(['Not Dividing', 'Dividing']) opDivDetection.AllowDeleteLabels.setValue(False) opDivDetection.AllowAddLabel.setValue(False) opDivDetection.EnableLabelTransfer.setValue(False) opCellClassification = self.cellClassificationApplet.topLevelOperator opCellClassification.SelectedFeatures.setValue(configConservation.selectedFeaturesObjectCount ) opCellClassification.SuggestedLabelNames.setValue( ['False Detection',] + [str(1) + ' Object'] + [str(i) + ' Objects' for i in range(2,10) ] ) opCellClassification.AllowDeleteLastLabelOnly.setValue(True) opCellClassification.EnableLabelTransfer.setValue(False)