示例#1
0
    def initUI(self):
        print('here')
        '''init ui

        '''
        self.threading_enabled = True
        # logging
        self.logger_console = QTextBrowser(self)
        self.logger_console.setReadOnly(True)
        self.logger_console.textCursor().movePosition(QTextCursor.Left,
                                                      QTextCursor.KeepAnchor,
                                                      1)
        self.logger_console.setHtml('<html>')
        self.logger_console.ensureCursorVisible()
        if not DEBUG:
            XStream.stdout().messageWritten.connect(self.set_html_black)
            XStream.stderr().messageWritten.connect(self.set_html_red)
        self.handler = QtHandler()
        self.handler.setFormatter(logging.Formatter(TA_logger.default_format))
        # change default handler for logging
        TA_logger.setHandler(self.handler)

        self.setWindowTitle(__NAME__ + ' v' + str(__VERSION__))

        # Initialize tab screen
        self.tabs = QTabWidget(self)
        self.model_tab = QWidget()
        self.train_tab = QWidget()
        self.ensemble_tab = QWidget()
        self.predict_tab = QWidget()
        self.advanced_tab = QWidget()
        # self.post_process = QWidget() # redundant with predict

        # Add tabs
        self.tabs.addTab(
            self.model_tab, 'Model'
        )  # split concatenate visualize model and or weights/ can I rename also things and allow for freeze of the layers too...
        self.tabs.addTab(self.train_tab,
                         'Build Train/GT Sets = Image concatenation')
        # self.tabs.addTab(self.predict_tab, 'Predict')
        self.tabs.addTab(
            self.ensemble_tab, 'Ensemble'
        )  # To combine several outputs/models to improve seg quality
        self.tabs.addTab(self.advanced_tab,
                         'Advanced')  # mutate model, feeze, 3D, ... TODO
        self.advanced_tab.setVisible(False)
        # self.tabs.setVisible(False)
        # self.tabs.addTab(self.post_process, 'Post Process') # redundant with predict

        self.tabs.currentChanged.connect(self._onTabChange)

        # creating model tab
        self.model_tab.layout = QGridLayout()
        self.model_tab.layout.setAlignment(Qt.AlignTop)
        self.model_tab.layout.setColumnStretch(0, 25)
        self.model_tab.layout.setColumnStretch(1, 75)
        self.model_tab.layout.setHorizontalSpacing(3)
        self.model_tab.layout.setVerticalSpacing(3)

        # should I allow this to be stored in config file, probably not...
        self.input_model = OpenFileOrFolderWidget(
            parent_window=self,
            label_text='Load model',
            is_file=True,
            extensions=
            "Supported Files (*.h5 *.H5 *.hdf5 *.HDF5 *.json *.JSON *.model);;All Files (*)",
            tip_text='Drag and drop a model file here')

        self.input_weights = OpenFileOrFolderWidget(
            parent_window=self,
            label_text='Load weights (optional)',
            is_file=True,
            extensions=
            "Supported Files (*.h5 *.H5 *.hdf5 *.HDF5);;All Files (*)",
            tip_text='Drag and drop a single weight file here'
        )  # TODO shall i add *.model ???

        # parameters for the pretrained models
        self.groupBox_pretrain = QGroupBox('Model',
                                           objectName='groupBox_pretrain')
        self.groupBox_pretrain.setEnabled(True)
        # groupBox layout
        self.groupBox_pretrain_layout = QGridLayout()
        self.groupBox_pretrain_layout.setAlignment(Qt.AlignTop)
        self.groupBox_pretrain_layout.setColumnStretch(0, 25)
        self.groupBox_pretrain_layout.setColumnStretch(1, 25)
        self.groupBox_pretrain_layout.setColumnStretch(2, 50)
        self.groupBox_pretrain_layout.setColumnStretch(3, 2)
        self.groupBox_pretrain_layout.setHorizontalSpacing(3)
        self.groupBox_pretrain_layout.setVerticalSpacing(3)

        self.groupBox_pretrain_layout.addWidget(self.input_model, 1, 0, 1, 3)
        self.groupBox_pretrain_layout.addWidget(self.input_weights, 2, 0, 1, 3)

        self.groupBox_pretrain.setLayout(self.groupBox_pretrain_layout)
        self.model_tab.layout.addWidget(self.groupBox_pretrain, 1, 0, 1, 2)
        self.model_tab.setLayout(self.model_tab.layout)

        # widget global layout
        table_widget_layout = QVBoxLayout()
        table_widget_layout.setAlignment(Qt.AlignTop)
        table_widget_layout.addWidget(self.tabs)

        log_and_main_layout = QHBoxLayout()
        log_and_main_layout.setAlignment(Qt.AlignTop)

        # TODO put this in a group to get the stuff
        log_groupBox = QGroupBox('Log', objectName='log_groupBox')
        log_groupBox.setEnabled(True)

        help = PyQT_markdown()
        try:
            # this_dir, this_filename = os.path.split(__file__)
            # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'getting_started2.md'),
            #                             title='getting started: predict using pre-trained network')
            # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'getting_started.md'),
            #                             title='getting started: build and train a custom network')
            # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'getting_started3.md'),
            #                             title='getting started: further train the EPySeg model on your data')
            # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'pretrained_model.md'),
            #                             title='Load a pre-trained model')
            # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'model.md'),
            #                             title='Build a model from scratch')
            # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'load_model.md'),
            #                             title='Load a model')
            # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'train.md'), title='Train')
            # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'predict.md'), title='Predict')
            # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'preprocessing.md'),
            #                             title='Training dataset parameters')
            # help.set_markdown_from_file(os.path.join(this_dir, 'deeplearning/docs', 'data_augmentation.md'),
            #                             title='Data augmentation')
            # TODO prevent this window to be resize upon tab changes
            pass
        except:
            traceback.print_exc()

        # Initialize tab screen
        self.help_tabs = QTabWidget(self)
        self.help_tabs.setMinimumWidth(500)
        self.log_tab = QWidget()
        self.help_html_tab = QWidget()
        self.settings_GUI = QWidget()

        # Add tabs
        self.help_tabs.addTab(self.log_tab, 'Log')
        self.help_tabs.addTab(self.help_html_tab, 'Help')
        self.help_tabs.addTab(self.settings_GUI, 'GUI settings')

        # creating model tab
        self.log_tab.layout = QVBoxLayout()
        self.log_tab.layout.setAlignment(Qt.AlignTop)

        # global system progress bar
        self.pbar = QProgressBar(self)

        self.log_tab.layout.addWidget(self.logger_console)
        # self.log_tab.layout.addWidget(self.instant_help)
        self.log_tab.layout.addWidget(self.pbar)
        self.log_tab.setLayout(self.log_tab.layout)

        self.help_html_tab.layout = QVBoxLayout()
        self.help_html_tab.layout.setAlignment(Qt.AlignTop)
        self.help_html_tab.layout.setContentsMargins(0, 0, 0, 0)
        self.help_html_tab.layout.addWidget(help)
        self.help_html_tab.setLayout(self.help_html_tab.layout)

        self.enable_threading_check = QCheckBox(
            'Threading enable/disable', objectName='enable_threading_check')
        self.enable_threading_check.setChecked(True)
        # self.enable_threading_check.stateChanged.connect(self._set_threading)
        self.enable_debug = QCheckBox('Debug mode', objectName='enable_debug')
        self.enable_debug.setChecked(False)
        self.enable_debug.stateChanged.connect(self._enable_debug)

        self.settings_GUI.layout = QVBoxLayout()
        self.settings_GUI.layout.setAlignment(Qt.AlignTop)
        self.settings_GUI.layout.addWidget(self.enable_threading_check)
        self.settings_GUI.layout.addWidget(self.enable_debug)
        self.settings_GUI.setLayout(self.settings_GUI.layout)

        log_and_main_layout.addLayout(table_widget_layout)
        log_and_main_layout.addWidget(self.help_tabs)

        self.setLayout(log_and_main_layout)

        try:
            screen = QApplication.desktop().screenNumber(
                QApplication.desktop().cursor().pos())
            centerPoint = QApplication.desktop().screenGeometry(
                screen).center()
            self.setGeometry(
                QtCore.QRect(centerPoint.x() - self.width(),
                             centerPoint.y() - self.height(), self.width(),
                             self.height()))
        except:
            pass

        # # monitor mouse position to show helpful tips/guide the user
        # self.setMouseTracking(True) # does not work well because of contained objects capturing mouse --> maybe simplest is to have the
        self.show()
示例#2
0
from PyQt5.QtWidgets import QDialog
from PyQt5.QtWidgets import QApplication, QGridLayout
from PyQt5.QtWidgets import QSpinBox, QComboBox, QVBoxLayout, QLabel, QCheckBox, QGroupBox
from PyQt5.QtCore import Qt
import sys

# logging
from epyseg.tools.logger import TA_logger
logger = TA_logger()


class PostProcessGUI(QDialog):
    def __init__(self, parent_window=None):
        super().__init__(parent=parent_window)
        self.initUI()

    def initUI(self):
        input_v_layout = QVBoxLayout()
        input_v_layout.setAlignment(Qt.AlignTop)
        input_v_layout.setContentsMargins(0, 0, 0, 0)
        # TODO add a set of parameters there for the post process
        groupBox_post_process = QGroupBox(
            'Refine segmentation ("None" or "local median" should be prefered)'
        )
        groupBox_post_process.setEnabled(True)

        groupBox_post_process_parameters_layout = QGridLayout()
        groupBox_post_process_parameters_layout.setAlignment(Qt.AlignTop)
        groupBox_post_process_parameters_layout.setHorizontalSpacing(3)
        groupBox_post_process_parameters_layout.setVerticalSpacing(3)
示例#3
0
# en fait le panel serait 2D sinon mieux vaut utiliser une vbox ou une hbox
# puis-je aussi faire un systeme de grid ??? pas si facile avec des images


from epyseg.draw.shapes.rect2d import Rect2D
from PyQt5.QtCore import QPointF, QRectF
from epyseg.figure.row import Row
# import math
# logger
from epyseg.tools.logger import TA_logger

# en fait

# TODO controler les set2width and settoheight de ce truc afin d'etre sur qu'ils fonctionnent car je ne pense pas que ce soit le cas en fait

logger = TA_logger(logging_level=TA_logger.DEBUG)


# can have a 1D and 2D with horizontal or vertical stuff
# TODO really try
# ça marche un panel peut contenir autant de panels que necessaire --> tt sera panel dans ce truc
# pourrait implement un sticky mode qui se comporte comme une figure ds EZF et un floating mode ou tout flotte
# should I sketch content for fusion --> draw how it would look like if done

# ce truc serait dedie au 2D en fait et le reste se ferait par des trucs differents
# could be called row and col and allow them to contain panels

# figure serait le master container --> en fait je garde la structure
# d'avant'

# pkoi ne pas tt restaurer alors