コード例 #1
0
def getReal(
        image_HW,
        _class_label_map,
        normalize_single_ims,
        std_d,
        USING_STD_DIR
):
    real, HW = image_HW
    if GRAY_SCALE:
        real.data = Image.open(real.file.abspath)
    else:
        real.data = np.resize(
            arr(Image.open(real.file.abspath).getdata()),
            (20, 20, 3)
        )
    if normalize_single_ims and not USING_STD_DIR:
        # noinspection PyUnusedLocal
        def smallify():
            err('dev')
            files = glob.glob(sys.argv[1] + "/**/*.png", recursive=True)
            i = 0
            log('found ' + str(len(files)) + ' images')
            with Progress(len(files)) as prog:
                for f in files:
                    p = shell(['convert', f, '-resize', '20x20', f], silent=True)
                    p.interact()
                    i = i + 1
                    prog.tick()
            log('resized ' + str(i) + ' images')
            sys.exit()
        assert len(real.data.getdata()) == 20 * 20, 'dev: smallify if files are large but blocky'
        real.data = np.reshape(
            arr(
                real.data.getdata()
            ),
            (20, 20)
        )
        real.data = real.data / np.std(real.data)
        if SAVE_PREPROC_DATA:
            std_file = File(std_d).resolve(File(real.file).parentName).resolve(File(real.file).name)

            std_file.save(real.data, silent=True)

    real.data = make1(real.data)
    if normalize_single_ims:
        if GRAY_SCALE:
            real.data = real.data - np.mean(real.data)
        else:
            for chan in range(3):
                real.data[:, :, chan] = real.data[:, :, chan] - np.mean(real.data[:, :, chan])

    real.data = resampleim(real.data, HW, HW)

    if GRAY_SCALE:
        shape1 = real.data.shape[0]
        shape2 = real.data.shape[1]
        real.data = np.broadcast_to(real.data, (shape1, shape2, 3))
    real.label = _class_label_map[real.clazz]
    return real
コード例 #2
0
def gen_images(*, folder, class_pairs, ims_per_class):
    N_IMAGES = ims_per_class * 2 * len(class_pairs)
    classes = get_class_dict(class_pairs)
    File(folder).deleteAllContents()

    BLOCK_HEIGHT_WIDTH = 20

    y = []

    band_group_size = N_IMAGES / len(class_pairs)
    band_group = 0
    band_group_i = 0

    with Progress(N_IMAGES) as prog:
        for i in range(N_IMAGES):
            im_data = np.random.rand(BLOCK_HEIGHT_WIDTH, BLOCK_HEIGHT_WIDTH)
            if BLACK_AND_WHITE:
                im_data = np.vectorize(round)(im_data)

            band = class_pairs[band_group]
            ns_classname, s_classname = band.get_classnames()
            darken = band.dark
            if darken:
                im_data = im_data / 2
            band = band.bandsize
            bar_start = int((BLOCK_HEIGHT_WIDTH / 2) - (band / 2))
            bar_end = bar_start + band
            for w in range(bar_start, bar_end):
                im_data[:, w] = 0.5

            im_data = make255(im_data)

            if iseven(i):
                im_data = nn_lib.symm(im_data, 1)
                y.append(classes[s_classname])
                label = s_classname
            else:
                y.append(classes[ns_classname])
                label = ns_classname

            im_data = np.expand_dims(im_data, 2)

            # i think Darius' data was single channeled
            # im_data = np.concatenate((im_data, im_data, im_data), axis=2)

            # im_file = File(f'{File(folder).abspath}/{label}/sym{i}.png')
            im_file = File(f'{File(folder).abspath}/{label}/{label}_{band_group_i}.png')

            band_group_i = band_group_i + 1
            if band_group_i == band_group_size:
                band_group = band_group + 1
                band_group_i = 0

            im_file.save(im_data, silent=True)
            prog.tick()

    return classes
コード例 #3
0
ファイル: dicts.py プロジェクト: mgroth0/mlib
class PermaList(DefaultMutableList):
    def __init__(self, file):
        from mlib.file import File
        self.file = File(file)
        self.file.allow_autoload = True
        super().__init__(self.file)
        if not self.file.exists:
            self.file.save([])
        self.file.default_quiet = True
    def __getitem__(self, val):
        return self._l[val]
    def __setitem__(self, key, value):
        self._l[key] = value
    def __delitem__(self, key): del self.file[key]
コード例 #4
0
ファイル: caches.py プロジェクト: mgroth0/mlib
def basic_cache_logic(f,
                      pklfile: File,
                      *args,
                      log_level=LogLevel.PROGRESS,
                      **kwargs):
    if pklfile.exists:
        log_level.handle(f"loading {f.__name__} result from cache")
        return pklfile.load(silent=True), True
    else:
        key = log_level.handle(
            f"no cached result for {f.__name__}, running ...",
            attempt_one_line=True)
        r = f(*args, **kwargs)
        pklfile.save(r, silent=True)
        log_level.handle(f"completed and cached", one_line_key=key)
        return r, False
コード例 #5
0
ファイル: caches.py プロジェクト: mgroth0/mlib
def file_cache_logic(f,
                     namefile: File,
                     myfolder: Optional[File],
                     *args,
                     log_level=LogLevel.PROGRESS,
                     **kwargs):
    key = log_level.handle(f"no cached file for {f.__name__}, running ...",
                           attempt_one_line=True)
    r = f(*args, **kwargs)
    assert isinstsafe(
        r, File
    ), f'filecache functions must return a single File, but this is a {type(r)}'

    r = r.copy_into(myfolder, next_new=True)
    namefile.save(r.name, silent=True)

    log_level.handle(f"completed and filecached", one_line_key=key)
    return r
コード例 #6
0
ファイル: dicts.py プロジェクト: mgroth0/mlib
class PermaDict(DefaultMutableMapping):
    def __init__(self, file):
        from mlib.file import File
        self.file = File(file)
        self.file.allow_autoload = True
        super().__init__(self.file)
        if not self.file.exists:
            self.file.save({})
        self.file.default_quiet = True
    def check(self):
        from mlib.proj.struct import GIT_DIR, GIT_IGNORE
        if not self.file.rel.startswith('_') and self.file.parent.name != 'data':
            err('PermaDicts should be private (start with _)')
        if GIT_DIR.exists and (not GIT_IGNORE.exists or '/_*' not in GIT_IGNORE.read()):
            err(f'{self.file} needs to be ignored')
        if not self.file.exists:
            self.file.save({})
    def __getitem__(self, val):
        self.check()
        return self._d[val]
    def __setitem__(self, key, value):
        self.check()
        self._d[key] = value
    def __delitem__(self, key): del self.file[key]
コード例 #7
0
ファイル: guiutil.py プロジェクト: mgroth0/mlib
class HelloWindow(QMainWindow):
    # https://stackoverflow.com/questions/43126721/detect-resizing-in-widget-window-resized-signal
    resized = QtCore.pyqtSignal()

    def resizeEvent(self, event):
        self.resized.emit()
        return super(HelloWindow, self).resizeEvent(event)

    moved = QtCore.pyqtSignal(str)

    def fakeMoveEventGenerator(self):
        while True:
            sleep(5)
            self.moved.emit('dummy')

    def __init__(self,
                 title,
                 label,
                 fullscreen=True,
                 always_on_top=False,
                 always_on_bottom=False,
                 no_title_bar=False,
                 pathWrap=False,
                 readOnly=True,
                 bind_file=None):
        # QMainWindow.__init__(self)
        # super().__init__(flags, *args, **kwargs)
        flags = []
        args = ()
        kwargs = {}

        flags = 0
        flags = None
        if no_title_bar:
            if flags is None:
                flags = QtCore.Qt.CustomizeWindowHint
            else:
                flags = flags | QtCore.Qt.CustomizeWindowHint
            # pass
        if always_on_top:
            if flags is None:
                flags = QtCore.Qt.WindowStaysOnTopHint
            else:
                flags = flags | QtCore.Qt.WindowStaysOnTopHint
            # flags = flags + QtCore.Qt.WindowStaysOnTopHint
            # pass
            # super().__init__(None, QtCore.Qt.WindowStaysOnTopHint)
            # super(w).__init__(None, QtCore.Qt.X11BypassWindowManagerHint)
        # else:

        if always_on_bottom:
            if flags is None:
                flags = QtCore.Qt.WindowStaysOnBottomHint
            else:
                flags = flags | QtCore.Qt.WindowStaysOnBottomHint

        if flags is not None:
            super().__init__(None, flags)
        else:
            super().__init__(None)
        # self.setWindowFlags(QtCore.Qt.WindowFlags(QtCore.Qt.CustomizeWindowHint,QtCore.Qt.WindowStaysOnTopHint))
        # super().__init__(None,  QtCore.Qt.WindowStaysOnTopHint)

        # self.setMinimumSize(QSize(640, 480))
        # set stylesheet
        # CAUSED BUTTONS TO NOT WORK
        # file = QFile("/Users/matt/Desktop/BreezeStyleSheets/dark.qss")

        # file = QFile(":/dark.qss")
        # file.open(QFile.ReadOnly | QFile.Text)
        # stream = QTextStream(file)
        # CAUSED BUTTONS TO NOT WORK
        # self.setStyleSheet(stream.readAll())

        self.setWindowTitle(title)

        self._init_cw()

        if label is not None:
            if not readOnly:
                pathWrap = True
            if pathWrap:
                self.label = self.textPathWrap(label, readOnly)
            else:
                self.label = self.text(label)
        else:
            self.label = None

        if bind_file is None:
            w, h = screen_sizes()

            self.setFixedSize(w, h)

            if fullscreen:
                self.showFullScreen()
            else:
                self.setFixedSize(w, h - 45)
        else:
            self.stage_file = File(bind_file, quiet=True)
            if self.stage_file.exists:
                self.load_geometry()
            else:
                w, h = screen_sizes()

                # self.setFixedSize(w, h)

                if fullscreen:
                    self.showFullScreen()
                else:
                    self.setFixedSize(w, h - 45)
            self.bindGeometry()

    def saveWinGeometry(self):
        self.stage_file.save({
            "x": self.frameGeometry().x(),
            "y": self.frameGeometry().y(),
            "width": self.frameGeometry().width(),
            "height": self.frameGeometry().height()
        })

    def bindGeometry(self):
        self.resized.connect(self.saveWinGeometry)
        self.moved.connect(self.saveWinGeometry)
        Thread(target=self.fakeMoveEventGenerator, daemon=True).start()

    def load_geometry(self):
        geo = self.stage_file.load()
        self.move(geo['x'], geo['y'])
        self.setFixedSize(geo['width'], geo['height'])

    def _init_cw(self):
        centralWidget = MQWidget(self)
        self.setCentralWidget(centralWidget)

        self.cw = centralWidget

        self.gridLayout = centralWidget.gridLayout

    def clear(self):
        try_delete(self.cw, self)
        self._init_cw()

    def text(self, txt="", data=None, click_handler=None):
        return self.cw.text(txt, data, click_handler)

    def textPathWrap(self, txt="", readOnly=True):
        return self.cw.textPathWrap(txt, readOnly)

    def button(self, text, fun):
        return self.cw.button(text, fun)

    def input(self, initial="") -> QLineEdit:
        return self.cw.input(initial)

    def pane(self, returnBox=False, vertical=True):
        return self.cw.pane(returnBox, vertical=vertical)

    def screen(self):
        return QtWidgets.QApplication.screenAt(QPoint(self.x(), self.y()))

    def current_screen_sizes(self):
        screen_height = self.screen().availableGeometry().height()
        screen_width = self.screen().availableGeometry().width()
        half_width = screen_width / 2
        half_height = screen_height / 2
        return screen_height, screen_width, half_width, half_height

    def move_left(self):
        screen_height, screen_width, half_width, half_height = self.current_screen_sizes(
        )
        self.move(0, 0)
        self.setFixedSize(half_width, screen_height)

    def move_right(self):
        screen_height, screen_width, half_width, half_height = self.current_screen_sizes(
        )
        self.move(half_width, 0)
        self.setFixedSize(half_width, screen_height)

    def move_down(self):
        screen_height, screen_width, half_width, half_height = self.current_screen_sizes(
        )
        self.move(0, half_height)
        self.setFixedSize(screen_width, half_height)

    def move_up(self):
        screen_height, screen_width, half_width, half_height = self.current_screen_sizes(
        )
        self.move(0, 0)
        self.setFixedSize(screen_width, half_height)

    def maximize(self):
        screen_height, screen_width, half_width, half_height = self.current_screen_sizes(
        )
        self.move(0, 0)
        self.setFixedSize(screen_width, screen_height)