コード例 #1
0
ファイル: predictor.py プロジェクト: OMMR4all/ommr4all-server
def render_prediction_labels(labels, img=None):
    from shared.pcgtscanvas import PcGtsCanvas
    out = np.zeros(labels.shape + (3, ), dtype=np.uint8)
    if img is not None:
        out = np.stack((img, ) * 3, axis=-1).astype(int)

    def draw(i, c):
        return np.kron((labels == i), c).reshape(out.shape).astype(int)

    for i, c in [
        (SymbolLabel.BACKGROUND, (255, 255, 255)),
        (SymbolLabel.NOTE_START, (255, 0, 0)),
        (SymbolLabel.NOTE_GAPPED, (255, 120, 120)),
        (SymbolLabel.NOTE_LOOPED, (120, 0, 0)),
        (SymbolLabel.CLEF_C, (120, 255, 120)),
        (SymbolLabel.CLEF_F, (0, 255, 0)),
        (SymbolLabel.ACCID_NATURAL, (0, 0, 255)),
        (SymbolLabel.ACCID_SHARP, (50, 50, 255)),
        (SymbolLabel.ACCID_FLAT, (0, 0, 120)),
    ]:
        c = PcGtsCanvas.color_for_music_symbol(i.to_music_symbol(),
                                               inverted=True,
                                               default_color=(255, 255, 255))
        if c != (0, 0, 0):
            out[:, :, 0] = np.where(labels == i, c[0], out[:, :, 0])
            out[:, :, 1] = np.where(labels == i, c[1], out[:, :, 1])
            out[:, :, 2] = np.where(labels == i, c[2], out[:, :, 2])

    # if img is not None:
    # out = (out.astype(float) * np.stack((img,) * 3, axis=-1) / 255).astype(np.uint8)

    return out.clip(0, 255).astype(np.uint8)
コード例 #2
0
ファイル: predictor.py プロジェクト: hajicj/ommr4all-server
 def _predict(
     self,
     pcgts_files: List[PcGts],
     callback: Optional[PredictionCallback] = None
 ) -> Generator[SingleLinePredictionResult, None, None]:
     dataset = SymbolDetectionDataset(pcgts_files, self.dataset_params)
     for p in self.predictor.predict(
             dataset.to_page_segmentation_dataset()):
         m: RegionLineMaskData = p.data.user_data
         symbols = SingleLinePredictionResult(
             self.exract_symbols(p.probabilities, p.labels, m, dataset),
             p.data.user_data)
         if False:
             from shared.pcgtscanvas import PcGtsCanvas
             canvas = PcGtsCanvas(m.operation.page,
                                  PageScaleReference.NORMALIZED_X2)
             for s in symbols.symbols:
                 s.coord = m.operation.music_line.staff_lines.compute_coord_by_position_in_staff(
                     s.coord.x, s.position_in_staff)
             canvas.draw(symbols.symbols, invert=True)
             canvas.show()
         if False:
             import matplotlib.pyplot as plt
             f, ax = plt.subplots(5, 1, sharey='all', sharex='all')
             ax[0].imshow(p.probabilities[:, :, 0], vmin=0.0, vmax=1.0)
             ax[1].imshow(p.data.image, vmin=0.0, vmax=255)
             ax[2].imshow(render_prediction_labels(p.labels, p.data.image))
             ax[3].imshow(
                 (p.probabilities[:, :, 0] <= 0.8) *
                 (1 + np.argmax(p.probabilities[:, :, 1:], axis=-1)))
             ax[4].imshow(
                 render_prediction_labels(p.data.mask, p.data.image))
             plt.show()
         yield symbols
コード例 #3
0
ファイル: predictor.py プロジェクト: OMMR4all/ommr4all-server
    def predict(self, pages: List[DatabasePage], callback: Optional[PredictionCallback] = None) -> AlgorithmPredictionResultGenerator:
        pcgts_files = [p.pcgts() for p in pages]
        page_results = [PredictionResult(pcgts, pcgts.page.location, [], []) for pcgts in pcgts_files]
        for line_results in self._predict(pcgts_files, callback):
            if isinstance(line_results, SingleLinePredictionResult):
                page_result = [p for p in page_results if p.pcgts == line_results.line.operation.pcgts][0]
                page_result.music_lines.append(line_results)
            else:
                if len(line_results) == 2:
                    line_results_symbols = line_results[0]
                    page_result = [p for p in page_results if p.pcgts == line_results_symbols.line.operation.pcgts][0]
                    page_result.music_lines.append(line_results_symbols)
                    line_results_symbols = line_results[1]
                    page_result = [p for p in page_results if p.pcgts == line_results_symbols.line.operation.pcgts][0]
                    page_result.debug_music_lines.append(line_results_symbols)

        for page_result in page_results:
            if False:
                from .evaluator import SymbolDetectionEvaluator, Codec
                evaluator = SymbolDetectionEvaluator()
                canvas = PcGtsCanvas(page_result.music_lines[0].line.operation.page, PageScaleReference.NORMALIZED_X2)
                for i, ml in enumerate(page_result.music_lines):
                    canvas.draw(ml.line.operation.music_line.staff_lines)
                    for s in ml.symbols:
                        canvas.draw_music_symbol_position_in_line(ml.line.operation.music_line.staff_lines, s, color=(255, 255, 0), thickness=2)

                    for s in ml.line.operation.music_line.symbols:
                        canvas.draw_music_symbol_position_in_line(ml.line.operation.music_line.staff_lines, s, color=(0,0, 255))

                    c = Codec()
                    gt = c.symbols_to_label_sequence(ml.line.operation.music_line.symbols, False)
                    pred = c.symbols_to_label_sequence(ml.symbols, False)
                    r = c.compute_sequence_diffs(gt, pred)
                    print(i + 1, r)
                    print(i + 1, evaluator.evaluate([ml.line.operation.music_line.symbols], [ml.symbols])[-3])

                canvas.show()
            yield page_result
コード例 #4
0
ファイル: dataset.py プロジェクト: hajicj/ommr4all-server
        for i, p in enumerate(pages):
            pcgts = PcGts.from_file(p.file('pcgts'))
            dataset = SymbolDetectionDataset([pcgts], params)
            calamari_dataset = dataset.to_calamari_dataset(train=True)
            for a, (sample, out) in enumerate(
                    zip(calamari_dataset.samples(), dataset.load())):
                img, region, mask = out.line_image, out.region, out.mask
                img = sample['image'].transpose()
                ax[a, i].imshow(img)
    elif at == AlgorithmTypes.SYMBOLS_PC:
        page = pages[0]
        pcgts = PcGts.from_file(page.file('pcgts'))
        dataset = SymbolDetectionDataset([pcgts], params)
        ps_dataset = dataset.to_page_segmentation_dataset()

        canvas_ol = PcGtsCanvas(
            pcgts.page, scale_reference=PageScaleReference.NORMALIZED_X2)
        for ml in pcgts.page.all_music_lines():
            canvas_ol.draw(ml.symbols, scale=1.5, invert=True)
        canvas_mask = PcGtsCanvas(
            pcgts.page,
            scale_reference=PageScaleReference.NORMALIZED_X2,
            no_background=True)
        for ml in pcgts.page.all_music_lines():
            canvas_mask.draw(ml.symbols, scale=1.5, invert=True)
        canvas = PcGtsCanvas(pcgts.page,
                             scale_reference=PageScaleReference.NORMALIZED_X2,
                             file='gray')
        PcGtsCanvas.show_all([canvas_ol, canvas_mask, canvas], hor=False)
        f, ax = plt.subplots(len(ps_dataset.data),
                             3,
                             sharex='all',
コード例 #5
0
    np.random.seed(1)
    if False:
        train_pcgts, val_pcgts = dataset_by_locked_pages(
            0.8,
            [LockState(Locks.SYMBOLS, True),
             LockState(Locks.LAYOUT, True)],
            True,
            [
                # DatabaseBook('Graduel_Part_1'),
                # DatabaseBook('Graduel_Part_2'),
                # DatabaseBook('Graduel_Part_3'),
            ])
    book = DatabaseBook('Gothic_Test')
    meta = Step.meta(AlgorithmTypes.OCR_CALAMARI)
    # model = meta.newest_model_for_book(book)
    model = Model(
        MetaId.from_custom_path(
            BASE_DIR +
            '/internal_storage/pretrained_models/text_calamari/fraktur_historical',
            meta.type()))
    settings = AlgorithmPredictorSettings(model=model, )
    pred = meta.create_predictor(settings)
    ps: List[PredictionResult] = list(pred.predict(book.pages()[0:1]))
    for i, p in enumerate(ps):
        canvas = PcGtsCanvas(p.pcgts.page,
                             p.text_lines[0].line.operation.scale_reference)
        for j, s in enumerate(p.text_lines):
            canvas.draw(s)

        canvas.show()
コード例 #6
0
                         dataset.local_to_global_pos(Point((pos.global_start + pos.global_end) / 2, 40), m.operation.params).x,
                         m.operation.scale_reference
                     ))
                    for pos in p.positions]
        return CalamariSequence.to_symbols(dataset.params.calamari_codec, sentence, m.operation.music_line.staff_lines)


if __name__ == '__main__':
    import random
    from omr.dataset.datafiles import dataset_by_locked_pages, LockState
    from shared.pcgtscanvas import PcGtsCanvas, PageScaleReference
    random.seed(1)
    np.random.seed(1)
    b = DatabaseBook('Graduel_Fully_Annotated')
    train_pcgts, val_pcgts = dataset_by_locked_pages(0.8, [LockState(Locks.STAFF_LINES, True), LockState(Locks.LAYOUT, True)], True, [
        DatabaseBook('Graduel_Part_1'),
        DatabaseBook('Graduel_Part_2'),
        DatabaseBook('Graduel_Part_3'),
    ])
    pred = OMRPredictor(AlgorithmPredictorSettings(
        model=Meta.best_model_for_book(b),
    ))
    ps = list(pred.predict([p.page.location for p in val_pcgts[7:8]]))
    for p in ps:
        p: PredictionResult = p
        canvas = PcGtsCanvas(p.pcgts.page, PageScaleReference.NORMALIZED_X2)
        for sp in p.music_lines:
            canvas.draw(sp.symbols)

        canvas.show()
コード例 #7
0
ファイル: predictor.py プロジェクト: hajicj/ommr4all-server
    from shared.pcgtscanvas import PcGtsCanvas
    from omr.dataset.datafiles import dataset_by_locked_pages, LockState
    random.seed(1)
    np.random.seed(1)
    if False:
        train_pcgts, val_pcgts = dataset_by_locked_pages(
            0.8,
            [LockState(Locks.SYMBOLS, True),
             LockState(Locks.LAYOUT, True)],
            True,
            [
                # DatabaseBook('Graduel_Part_1'),
                # DatabaseBook('Graduel_Part_2'),
                # DatabaseBook('Graduel_Part_3'),
            ])
    book = DatabaseBook('Paper_New_York')
    meta = Step.meta(AlgorithmTypes.SYLLABLES_FROM_TEXT)
    model = meta.best_model_for_book(book)
    settings = AlgorithmPredictorSettings(model=model, )
    pred = meta.create_predictor(settings)
    ps: List[PredictionResult] = list(pred.predict(book.pages()[:1]))
    for i, p in enumerate(ps):
        pmr = p.page_match_result
        canvas = PcGtsCanvas(pmr.pcgts.page, PageScaleReference.NORMALIZED_X2)
        canvas.draw(pmr.text_prediction_result.text_lines[4],
                    color=(25, 150, 25),
                    background=True)
        # canvas.draw(pmr.match_results)
        # canvas.draw(p.annotations)
        canvas.show()
コード例 #8
0
    os.environ['DJANGO_SETTINGS_MODULE'] = 'ommr4all.settings'
    django.setup()
    from ommr4all.settings import BASE_DIR
    import random
    import matplotlib.pyplot as plt
    from shared.pcgtscanvas import PcGtsCanvas
    from omr.dataset.datafiles import dataset_by_locked_pages, LockState
    from database.file_formats.pcgts import PageScaleReference
    random.seed(1)
    np.random.seed(1)
    if False:
        train_pcgts, val_pcgts = dataset_by_locked_pages(0.8, [LockState(Locks.SYMBOLS, True), LockState(Locks.LAYOUT, True)], True, [
            # DatabaseBook('Graduel_Part_1'),
            # DatabaseBook('Graduel_Part_2'),
            # DatabaseBook('Graduel_Part_3'),
        ])
    book = DatabaseBook('Paper_New_York')
    meta = Step.meta(AlgorithmTypes.SYLLABLES_IN_ORDER)
    model = meta.best_model_for_book(book)
    settings = AlgorithmPredictorSettings(
        model=model,
    )
    pred = meta.create_predictor(settings)
    ps: List[PredictionResult] = list(pred.predict(book.pages()[:1]))
    for i, p in enumerate(ps):
        pmr = p.page_match_result
        canvas = PcGtsCanvas(pmr.pcgts.page, PageScaleReference.NORMALIZED_X2)
        canvas.draw(pmr.match_results)
        canvas.draw(p.annotations)
        canvas.show()
コード例 #9
0
    # page = book.page('Graduel_de_leglise_de_Nevers_520')
    # page = book.page('Graduel_de_leglise_de_Nevers_513')
    pages = [page]

    settings = AlgorithmPredictorSettings(
        Meta.best_model_for_book(book),
        book.get_meta().algorithm_predictor_params(
            BasicStaffLinePredictor.meta().type()),
        #["/home/wick/Documents/Projects/ommr4all-deploy/modules/ommr4all-server/internal_storage/default_models/french14/pc_staff_lines/model"],
        #["/home/wick/Documents/Projects/ommr4all-deploy/modules/ommr4all-server/models_out/all/line_detection_4/best"],
        # ["/home/wick/Documents/Projects/ommr4all-deploy/modules/ommr4all-server/storage/Graduel/pc_staff_lines/model"],
        # ["/home/wick/Downloads/line_detection_0/best"],
    )
    detector = BasicStaffLinePredictor(settings)
    for prediction in detector.predict(pages):
        canvas = PcGtsCanvas(prediction.line.operation.page,
                             PageScaleReference.NORMALIZED)

        def scale(p):
            return prediction.line.operation.page.page_to_image_scale(
                p, ref=PageScaleReference.NORMALIZED)

        f, ax = plt.subplots(1, 3)
        staffs = prediction.music_lines_local
        data = prediction.line
        img = np.array(data.line_image, dtype=np.uint8)
        ax[0].imshow(255 - img, cmap='gray')
        [s.draw(img, color=255, thickness=1, scale=scale) for s in staffs]
        b = np.zeros(img.shape)
        [s.draw(b, color=255, thickness=1, scale=scale) for s in staffs]
        ax[1].imshow(img)
        ax[2].imshow(b, cmap='gray')