コード例 #1
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
コード例 #2
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
コード例 #3
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()