diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 725ab6562..82e0fd7f6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,8 +1,8 @@ name: Lint, test, build, and publish -on: +on: push: - + jobs: lint_and_test: @@ -13,9 +13,9 @@ jobs: python-version: [3.8, 3.9, '3.10', '3.11'] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install dependencies and kraken @@ -30,7 +30,7 @@ jobs: flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Run tests, except training tests run: | - pytest -k 'not test_train and not test_pageseg' + pytest -k 'not test_train' build-n-publish-pypi: name: Build and publish Python 🐍 distributions 📦 to PyPI and TestPyPI @@ -39,11 +39,11 @@ jobs: if: startsWith(github.ref, 'refs/tags/') steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Python 3.9 - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: 3.9 - name: Build a binary wheel and a source tarball @@ -68,43 +68,42 @@ jobs: if: startsWith(github.ref, 'refs/tags/') steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: conda-incubator/setup-miniconda@v2 + - uses: conda-incubator/setup-miniconda@v3 with: python-version: 3.9 miniforge-variant: Mambaforge - name: install dependencies build shell: bash -l {0} - run: mamba install "conda-build>=3.20" colorama pip ruamel ruamel.yaml rich jsonschema conda-verify anaconda-client mamba - # Runs the action with the following inputs or defaults if not specified. - - name: install boa - shell: bash -l {0} - run: pip install https://github.com/mamba-org/boa/archive/refs/tags/0.14.0.zip - - name: validate recipe - shell: bash -l {0} - id: conda_validation - run: | - PACKAGE_PATHS=$(conda mambabuild . --output --check -c conda-forge | tail -n 1) - echo "package_paths=$PACKAGE_PATHS" >> $GITHUB_OUTPUT - - name: run build - shell: bash -l {0} - run: conda mambabuild . -c conda-forge - - name: convert packages - shell: bash -l {0} + run: mamba install colorama pip ruamel ruamel.yaml rich jsonschema conda-verify anaconda-client + - name: Build linux-64 conda package + uses: prefix-dev/rattler-build-action@v0.2.6 + with: + recipe-path: "conda/recipe.yaml" + build-args: "--experimental --target-platform linux-64" + - name: Build osx-64 conda package + uses: prefix-dev/rattler-build-action@v0.2.6 + with: + recipe-path: "conda/recipe.yaml" + build-args: "--experimental --target-platform osx-64" +# - name: Build osx-arm64 conda package +# uses: prefix-dev/rattler-build-action@v0.2.6 +# with: +# recipe-path: "conda/recipe.yaml" +# build-args: "--experimental --target-platform osx-arm64" + - name: Upload conda package run: | - conda convert -p osx-arm64 -p osx-64 -o conda_convert ${{ steps.conda_validation.outputs.package_paths }} - mkdir conda_convert/linux-64 - cp -f ${{ steps.conda_validation.outputs.package_paths }} conda_convert/linux-64 - - name: upload to anaconda - shell: bash -l {0} - run: anaconda -t ${{ secrets.ANACONDA_TOKEN }} upload --no-progress --force conda_convert/*/* + for pkg in $(find output -type f \( -name "*.conda" -o -name "*.tar.bz2" \) ); do + echo "Uploading ${pkg}" + rattler-build upload anaconda -o mittagessen -a ${{ secrets.ANACONDA_TOKEN }} "${pkg}" + done - name: Upload conda artifacts to GH storage - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: conda_packages - path: conda_convert/*/*.tar.bz2 + path: output/*/*.conda autodraft-gh-release: name: Create github release @@ -112,11 +111,11 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: conda_packages path: conda - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: name: pypi_packages path: pypi @@ -126,11 +125,11 @@ jobs: prerelease: false draft: true files: | - conda/*/*.tar.bz2 + output/*/*.conda pypi/* publish-gh-pages: - name: Update kraken.re github pages + name: Update kraken.re github pages needs: lint_and_test runs-on: ubuntu-latest if: | @@ -138,21 +137,21 @@ jobs: startsWith(github.ref, 'refs/tags/') steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Python 3.9 - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: 3.9 - name: Install sphinx-multiversion run: python -m pip install sphinx-multiversion sphinx-autoapi - - name: Create docs + - name: Create docs run: sphinx-multiversion docs build/html - name: Create redirect run: cp docs/redirect.html build/html/index.html - name: Push gh-pages - uses: crazy-max/ghaction-github-pages@v3 + uses: crazy-max/ghaction-github-pages@v4 with: target_branch: gh-pages build_dir: build/html diff --git a/README.rst b/README.rst index 3010304b3..747b1036c 100644 --- a/README.rst +++ b/README.rst @@ -9,7 +9,7 @@ material. kraken's main features are: - - Fully trainable layout analysis and character recognition + - Fully trainable layout analysis, reading order, and character recognition - `Right-to-Left `_, `BiDi `_, and Top-to-Bottom script support @@ -44,18 +44,18 @@ install the `pdf` extras package for PyPi: $ pip install kraken[pdf] -or install `pyvips` manually with conda: +or install `pyvips` manually with pip: :: - $ conda install -c conda-forge pyvips + $ pip install pyvips -Conda environment files are provided which for the seamless installation of the -main branch as well: +Conda environment files are provided for the seamless installation of the main +branch as well: :: - $ git clone https://github.com/mittagessen/kraken.git + $ git clone https://github.com/mittagessen/kraken.git $ cd kraken $ conda env create -f environment.yml @@ -63,19 +63,19 @@ or: :: - $ git clone https://github.com/mittagessen/kraken.git + $ git clone https://github.com/mittagessen/kraken.git $ cd kraken $ conda env create -f environment_cuda.yml for CUDA acceleration with the appropriate hardware. Finally you'll have to scrounge up a model to do the actual recognition of -characters. To download the default model for printed English text and place it +characters. To download the default model for printed French text and place it in the kraken directory for the current user: :: - $ kraken get 10.5281/zenodo.2577813 + $ kraken get 10.5281/zenodo.10592716 A list of libre models available in the central repository can be retrieved by running: @@ -105,13 +105,13 @@ To segment an image (binarized or not) with the new baseline segmenter: :: $ kraken -i image.tif lines.json segment -bl - + To segment and OCR an image using the default model(s): :: - $ kraken -i image.tif image.txt segment -bl ocr + $ kraken -i image.tif image.txt segment -bl ocr -m catmus-print-fondue-large.mlmodel All subcommands and options are documented. Use the ``help`` option to get more information. @@ -124,8 +124,8 @@ Have a look at the `docs `_. Related Software ================ -These days kraken is quite closely linked to the `escriptorium -`_ project developed in the same eScripta research +These days kraken is quite closely linked to the `eScriptorium +`_ project developed in the same eScripta research group. eScriptorium provides a user-friendly interface for annotating data, training models, and inference (but also much more). There is a `gitter channel `_ that is mostly intended for diff --git a/conda/build.sh b/conda/build.sh deleted file mode 100755 index 07d551f99..000000000 --- a/conda/build.sh +++ /dev/null @@ -1 +0,0 @@ -pip install --no-deps . diff --git a/conda/conda_build_config.yaml b/conda/conda_build_config.yaml deleted file mode 100644 index d0d6407a9..000000000 --- a/conda/conda_build_config.yaml +++ /dev/null @@ -1,4 +0,0 @@ -python: - - 3.9 - - '3.10' - - '3.11' diff --git a/conda/meta.yaml b/conda/meta.yaml deleted file mode 100644 index be1e2edb4..000000000 --- a/conda/meta.yaml +++ /dev/null @@ -1,41 +0,0 @@ -package: - name: kraken - version: {{ GIT_DESCRIBE_TAG }} - -source: - git_url: .. - -requirements: - build: - - python - - setuptools - - pbr - run: - - python-bidi - - lxml - - regex - - requests - - click>=8.1 - - numpy~=1.23.0 - - pillow>=9.2.0 - - scipy~=1.11.0 - - jinja2~=3.0 - - torchvision - - pytorch>=1.12.0 - - cudatoolkit - - jsonschema - - scikit-image~=0.21.0 - - scikit-learn~=1.2.1 - - shapely~=1.8.5 - - pyvips - - coremltools - - pyarrow - - pytorch-lightning~=2.0 - - torchmetrics>=1.1.0 - - conda-forge::threadpoolctl~=3.2.0 - - albumentations - - rich -about: - home: https://kraken.re - license: APACHE - summary: 'OCR/HTR engine for all the languages' diff --git a/conda/recipe.yaml b/conda/recipe.yaml new file mode 100644 index 000000000..cdeca881f --- /dev/null +++ b/conda/recipe.yaml @@ -0,0 +1,55 @@ +context: + git_url: . + git_tag: ${{ git.latest_tag(git_url) }} + +package: + name: kraken + version: ${{ git_tag }} + +source: + git: ${{ git_url }} + tag: ${{ git_tag }} + +build: + script: pip install --no-deps . + +requirements: + build: + - python>=3.8,<3.12 + - setuptools>=36.6.0,<70.0.0 + - pbr + host: + - python>=3.8,<3.12 + run: + - python>=3.8,<3.12 + - python-bidi + - lxml + - regex + - requests + - click>=8.1 + - numpy~=1.23.0 + - pillow>=9.2.0 + - scipy~=1.11.0 + - jinja2~=3.0 + - torchvision + - pytorch~=2.1.0 + - cudatoolkit + - jsonschema + - scikit-image~=0.21.0 + - scikit-learn~=1.2.1 + - shapely~=1.8.5 + - pyvips + - coremltools + - pyarrow + - lightning~=2.2 + - torchmetrics>=1.1.0 + - conda-forge::threadpoolctl~=3.4.0 + - albumentations + - rich + +about: + homepage: https://kraken.re + license: Apache-2.0 + summary: 'OCR/HTR engine for all the languages' + repository: https://github.com/mittagessen/kraken + documentation: https://kraken.re diff --git a/docs/Makefile b/docs/Makefile index 8512ab244..d4bb2cbb9 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,192 +1,20 @@ -# Makefile for Sphinx documentation +# Minimal makefile for Sphinx documentation # -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . BUILDDIR = _build -# User-friendly check for sphinx-build -ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) -$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) -endif - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext - +# Put it first so that "make" without argument is like "make help". help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " applehelp to make an Apple Help Book" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " xml to make Docutils-native XML files" - @echo " pseudoxml to make pseudoxml-XML files for display purposes" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - @echo " coverage to run coverage check of the documentation (if enabled)" - -clean: - rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/kraken.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/kraken.qhc" - -applehelp: - $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp - @echo - @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." - @echo "N.B. You won't be able to view it unless you put it in" \ - "~/Library/Documentation/Help or install it in your application" \ - "bundle." - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/kraken" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/kraken" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -latexpdfja: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through platex and dvipdfmx..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." - -coverage: - $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage - @echo "Testing of coverage in the sources finished, look at the " \ - "results in $(BUILDDIR)/coverage/python.txt." + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) -xml: - $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml - @echo - @echo "Build finished. The XML files are in $(BUILDDIR)/xml." +.PHONY: help Makefile -pseudoxml: - $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml - @echo - @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/advanced.rst b/docs/advanced.rst index 533e1280f..93822e472 100644 --- a/docs/advanced.rst +++ b/docs/advanced.rst @@ -266,7 +266,7 @@ an additional option. Valid options consist of two parts, an initial principal line orientation (`horizontal` or `vertical`) followed by a block order (`lr` for left-to-right or `rl` for right-to-left). -.. warning: +.. warning:: The principal text direction is independent of the direction of the *inline text direction* (which is left-to-right for writing systems like diff --git a/docs/alto.xml b/docs/alto.xml index dbf0ca0a1..70185b516 100644 --- a/docs/alto.xml +++ b/docs/alto.xml @@ -13,18 +13,18 @@ - ... diff --git a/docs/api.rst b/docs/api.rst index 703829f3a..56d0fca81 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -1,10 +1,10 @@ -API Quickstart +API Quickstart ============== Kraken provides routines which are usable by third party tools to access all functionality of the OCR engine. Most functional blocks, binarization, segmentation, recognition, and serialization are encapsulated in one high -level method each. +level method each. Simple use cases of the API which are mostly useful for debugging purposes are contained in the `contrib` directory. In general it is recommended to look at @@ -59,17 +59,32 @@ scripts) and explicit masking of non-text image regions: >>> seg = pageseg.segment(bw_im) >>> seg - {'text_direction': 'horizontal-lr', - 'boxes': [[0, 29, 232, 56], - [28, 54, 121, 84], - [9, 73, 92, 117], - [103, 76, 145, 131], - [7, 105, 119, 230], - [10, 228, 126, 345], - ... - ], - 'script_detection': False} - + Segmentation(type='bbox', + imagename='foo.png', + text_direction='horizontal-lr', + script_detection=False, + lines=[BBoxLine(id='0ce11ad6-1f3b-4f7d-a8c8-0178e411df69', + bbox=[74, 61, 136, 101], + text=None, + base_dir=None, + type='bbox', + imagename=None, + tags=None, + split=None, + regions=None, + text_direction='horizontal-lr'), + BBoxLine(id='c4a751dc-6731-4eea-a287-d4b57683f5b0', ...), + ....], + regions={}, + line_orders=[]) + +All segmentation methods return a :class:`kraken.containers.Segmentation` +object that contains all elements of the segmentation: its type, a list of +lines (either :class:`kraken.containers.BBoxLine` or +:class:`kraken.containers.BaselineLine`), a dictionary mapping region types to +lists of regions (:class:`kraken.containers.Region`), and one or more line +reading orders. + Baseline segmentation ~~~~~~~~~~~~~~~~~~~~~ @@ -103,22 +118,35 @@ Afterwards they can be fed into the segmentation method >>> baseline_seg = blla.segment(im, model=model) >>> baseline_seg - {'text_direction': 'horizontal-lr', - 'type': 'baselines', - 'script_detection': False, - 'lines': [{'script': 'default', - 'baseline': [[471, 1408], [524, 1412], [509, 1397], [1161, 1412], [1195, 1412]], - 'boundary': [[471, 1408], [491, 1408], [515, 1385], [562, 1388], [575, 1377], ... [473, 1410]]}, - ...], - 'regions': {'$tip':[[[536, 1716], ... [522, 1708], [524, 1716], [536, 1716], ...] - '$par': ... - '$nop': ...}} - >>> alto = serialization.serialize_segmentation(baseline_seg, image_name=im.filename, image_size=im.size, template='alto') + Segmentation(type='baselines', + imagename='foo.png', + text_direction='horizontal-lr', + script_detection=False, + lines=[BaselineLine(id='22fee3d1-377e-4130-b9e5-5983a0c50ce8', + baseline=[[71, 93], [145, 92]], + boundary=[[71, 93], ..., [71, 93]], + text=None, + base_dir=None, + type='baselines', + imagename=None, + tags={'type': 'default'}, + split=None, + regions=['f17d03e0-50bb-4a35-b247-cb910c0aaf2b']), + BaselineLine(id='539eadce-f795-4bba-a785-c7767d10c407', ...), ...], + regions={'text': [Region(id='f17d03e0-50bb-4a35-b247-cb910c0aaf2b', + boundary=[[277, 54], ..., [277, 54]], + imagename=None, + tags={'type': 'text'})]}, + line_orders=[]) + >>> alto = serialization.serialize(baseline_seg, + image_size=im.size, + template='alto') >>> with open('segmentation_output.xml', 'w') as fp: fp.write(alto) -Optional parameters are largely the same as for the legacy segmenter, i.e. text -direction and masking. +A default segmentation model is supplied and will be used if none is specified +explicitly as an argument. Optional parameters are largely the same as for the +legacy segmenter, i.e. text direction and masking. Images are automatically converted into the proper mode for recognition, except in the case of models trained on binary images as there is a plethora of @@ -187,7 +215,7 @@ segmentation model loading. >>> model = models.load_any(rec_model_path) The sequence recognizer wrapper combines the neural network itself, a -:ref:`codec `, metadata such as the if the input is supposed to be +:ref:`codec `, metadata such as if the input is supposed to be grayscale or binarized, and an instance of a CTC decoder that performs the conversion of the raw output tensor of the network into a sequence of labels: @@ -198,7 +226,7 @@ Afterwards, given an image, a segmentation and the model one can perform text recognition. The code is identical for both legacy and baseline segmentations. Like for segmentation input images are auto-converted to the correct color mode, except in the case of binary models for which a warning will be raised if -there is a mismatch for binary input models. +there is a mismatch. There are two methods for recognition, a basic single model call :func:`kraken.rpred.rpred` and a multi-model recognizer @@ -210,12 +238,15 @@ a document. >>> from kraken import rpred # single model recognition - >>> pred_it = rpred(model, im, baseline_seg) + >>> pred_it = rpred(network=model, + im=im, + segmentation=baseline_seg) >>> for record in pred_it: print(record) -The output isn't just a sequence of characters but an -:class:`kraken.rpred.ocr_record` record object containing the character +The output isn't just a sequence of characters but, depending on the type of +segmentation supplied, a :class:`kraken.containers.BaselineOCRRecord` or +:class:`kraken.containers.BBoxOCRRecord` record object containing the character prediction, cuts (approximate locations), and confidences. .. code-block:: python @@ -237,7 +268,7 @@ it is also possible to access the original line information: # for box lines >>> record.type - 'box' + 'bbox' >>> record.line >>> record.script @@ -276,70 +307,179 @@ XML Parsing Sometimes it is desired to take the data in an existing XML serialization format like PageXML or ALTO and apply an OCR function on it. The :mod:`kraken.lib.xml` module includes parsers extracting information into data -structures processable with minimal transformtion by the functional blocks: +structures processable with minimal transformation by the functional blocks: + +Parsing is accessed is through the :class:`kraken.lib.xml.XMLPage` class. .. code-block:: python >>> from kraken.lib import xml >>> alto_doc = '/path/to/alto' - >>> xml.parse_alto(alto_doc) - {'image': '/path/to/image/file', - 'type': 'baselines', - 'lines': [{'baseline': [(24, 2017), (25, 2078)], - 'boundary': [(69, 2016), (70, 2077), (20, 2078), (19, 2017)], - 'text': '', - 'script': 'default'}, - {'baseline': [(79, 2016), (79, 2041)], - 'boundary': [(124, 2016), (124, 2041), (74, 2041), (74, 2016)], - 'text': '', - 'script': 'default'}, ...], - 'regions': {'Image/Drawing/Figure': [[(-5, 3398), (207, 3398), (207, 2000), (-5, 2000)], - [(253, 3292), (668, 3292), (668, 3455), (253, 3455)], - [(216, -4), (1015, -4), (1015, 534), (216, 534)]], - 'Handwritten text': [[(2426, 3367), (2483, 3367), (2483, 3414), (2426, 3414)], - [(1824, 3437), (2072, 3437), (2072, 3514), (1824, 3514)]], - ...} + >>> parsed_doc = xml.XMLPage(alto_doc) + >>> parsed_doc + XMLPage(filename='/path/to/alto', filetype=alto) + >>> parsed_doc.lines + {'line_1469098625593_463': BaselineLine(id='line_1469098625593_463', + baseline=[(2337, 226), (2421, 239)], + boundary=[(2344, 182), (2428, 195), (2420, 244), (2336, 231)], + text='$pag:39', + base_dir=None, + type='baselines', + imagename=None, + tags={'type': '$pag'}, + split=None, + regions=['region_1469098609000_462']), + + 'line_1469098649515_464': BaselineLine(id='line_1469098649515_464', + baseline=[(789, 269), (2397, 304)], + boundary=[(790, 224), (2398, 259), (2397, 309), (789, 274)], + text='$-nor su hijo, De todos sus bienes, con los pactos', + base_dir=None, + type='baselines', + imagename=None, + tags={'type': '$pac'}, + split=None, + regions=['region_1469098557906_461']), + ....} + >>> parsed_doc.regions + {'$pag': [Region(id='region_1469098609000_462', + boundary=[(2324, 171), (2437, 171), (2436, 258), (2326, 237)], + imagename=None, + tags={'type': '$pag'})], + '$pac': [Region(id='region_1469098557906_461', + boundary=[(738, 203), (2339, 245), (2398, 294), (2446, 345), (2574, 469), (2539, 1873), (2523, 2053), (2477, 2182), (738, 2243)], + imagename=None, + tags={'type': '$pac'})], + '$tip': [Region(id='TextRegion_1520586482298_194', + boundary=[(687, 2428), (688, 2422), (107, 2420), (106, 2264), (789, 2256), (758, 2404)], + imagename=None, + tags={'type': '$tip'})], + '$par': [Region(id='TextRegion_1520586482298_193', + boundary=[(675, 3772), (687, 2428), (758, 2404), (789, 2256), (2542, 2236), (2581, 3748)], + imagename=None, + tags={'type': '$par'})] } - >>> page_doc = '/path/to/page' - >>> xml.parse_page(page_doc) - {'image': '/path/to/image/file', - 'type': 'baselines', - 'lines': [{'baseline': [(24, 2017), (25, 2078)], - 'boundary': [(69, 2016), (70, 2077), (20, 2078), (19, 2017)], - 'text': '', - 'script': 'default'}, - {'baseline': [(79, 2016), (79, 2041)], - 'boundary': [(124, 2016), (124, 2041), (74, 2041), (74, 2016)], - 'text': '', - 'script': 'default'}, ...], - 'regions': {'Image/Drawing/Figure': [[(-5, 3398), (207, 3398), (207, 2000), (-5, 2000)], - [(253, 3292), (668, 3292), (668, 3455), (253, 3455)], - [(216, -4), (1015, -4), (1015, 534), (216, 534)]], - 'Handwritten text': [[(2426, 3367), (2483, 3367), (2483, 3414), (2426, 3414)], - [(1824, 3437), (2072, 3437), (2072, 3514), (1824, 3514)]], - ...} +The parser is aware of reading order(s), thus the basic properties accessing +lines and regions are unordered dictionaries. Reading orders can be accessed +separately through the `reading_orders` property: + +.. code-block:: python + + >>> parsed_doc.region_orders + {'line_implicit': {'order': ['line_1469098625593_463', + 'line_1469098649515_464', + ... + 'line_1469099255968_508'], + 'is_total': True, + 'description': 'Implicit line order derived from element sequence'}, + 'region_implicit': {'order': ['region_1469098609000_462', + ... + 'TextRegion_1520586482298_193'], + 'is_total': True, + 'description': 'Implicit region order derived from element sequence'}, + 'region_transkribus': {'order': ['region_1469098609000_462', + ... + 'TextRegion_1520586482298_193'], + 'is_total': True, + 'description': 'Explicit region order from `custom` attribute'}, + 'line_transkribus': {'order': ['line_1469098625593_463', + ... + 'line_1469099255968_508'], + 'is_total': True, + 'description': 'Explicit line order from `custom` attribute'}, + 'o_1530717944451': {'order': ['region_1469098609000_462', + ... + 'TextRegion_1520586482298_193'], + 'is_total': True, + 'description': 'Regions reading order'}} + +Reading orders are created from different sources, depending on the content of +the XML file. Every document will contain at least implicit orders for lines +and regions (`line_implicit` and `region_implicit`) sourced from the sequence +of line and region elements. There can also be explicit additional orders +defined by the standard reading order elements, for example `o_1530717944451` +in the above example. In Page XML files reading orders defined with the +Transkribus style custom attribute are also recognized. + +To access the lines or regions of a document in a particular order: + +.. code-block:: python + + >>> parsed_doc.get_sorted_lines(ro='line_implicit') + [BaselineLine(id='line_1469098625593_463', + baseline=[(2337, 226), (2421, 239)], + boundary=[(2344, 182), (2428, 195), (2420, 244), (2336, 231)], + text='$pag:39', + base_dir=None, + type='baselines', + imagename=None, + tags={'type': '$pag'}, + split=None, + regions=['region_1469098609000_462']), + BaselineLine(id='line_1469098649515_464', + baseline=[(789, 269), (2397, 304)], + boundary=[(790, 224), (2398, 259), (2397, 309), (789, 274)], + text='$-nor su hijo, De todos sus bienes, con los pactos', + base_dir=None, + type='baselines', + imagename=None, + tags={'type': '$pac'}, + split=None, + regions=['region_1469098557906_461']) + ...] + +The recognizer functions do not accept :class:`kraken.lib.xml.XMLPage` objects +directly which means that for most practical purposes these need to be +converted into :class:`container ` objects: + +.. code-block:: python + + >>> segmentation = parsed_doc.to_container() + >>> pred_it = rpred(network=model, + im=im, + segmentation=segmentation) + >>> for record in pred_it: + print(record) Serialization ------------- -The serialization module can be used to transform the :class:`ocr_records -` returned by the prediction iterator into a text -based (most often XML) format for archival. The module renders `jinja2 -`_ templates in `kraken/templates` through -the :func:`kraken.serialization.serialize` function. + +The serialization module can be used to transform results returned by the +segmenter or recognizer into a text based (most often XML) format for archival. +The module renders `jinja2 `_ templates, +either ones :ref:`packaged ` with kraken or supplied externally, +through the :func:`kraken.serialization.serialize` function. .. code-block:: python + >>> import dataclasses >>> from kraken.lib import serialization + >>> alto_seg_only = serialization.serialize(baseline_seg, image_size=im.size, template='alto') + >>> records = [record for record in pred_it] - >>> alto = serialization.serialize(records, image_name='path/to/image', image_size=im.size, template='alto') + >>> results = dataclasses.replace(pred_it.bounds, lines=records) + >>> alto = serialization.serialize(results, image_size=im.size, template='alto') >>> with open('output.xml', 'w') as fp: fp.write(alto) +The serialization function accepts arbitrary +:class:`kraken.containers.Segmentation` objects, which may contain textual or +only segmentation information. As the recognizer returns +:class:`ocr_records ` which cannot be serialized +directly it is necessary to either construct a new +:class:`kraken.containers.Segmentation` from scratch or insert them into the +segmentation fed into the recognizer (:class:`ocr_records +` subclass :class:`BaselineLine +`/:class:`BBoxLine +` The container classes are immutable data classes, +therefore it is necessary for simple insertion of the records to use +`dataclasses.replace` to create a new segmentation with a changed lines +attribute. Training -------- @@ -353,7 +493,7 @@ handling and verbosity options for the CLI. .. code-block:: python - >>> from kraken.lib.train import RecognitionModel, KrakenTrainer + >>> from kraken.lib.train import RecognitionModel, KrakenTrainer >>> ground_truth = glob.glob('training/*.xml') >>> training_files = ground_truth[:250] # training data is shuffled internally >>> evaluation_files = ground_truth[250:] @@ -382,14 +522,14 @@ can be attached to the trainer object: .. code-block:: python >>> from pytorch_lightning.callbacks import Callback - >>> from kraken.lib.train import RecognitionModel, KrakenTrainer + >>> from kraken.lib.train import RecognitionModel, KrakenTrainer >>> class MyPrintingCallback(Callback): def on_init_start(self, trainer): print("Starting to init trainer!") - + def on_init_end(self, trainer): print("trainer is init now") - + def on_train_end(self, trainer, pl_module): print("do something when training ends") >>> ground_truth = glob.glob('training/*.xml') diff --git a/docs/api_docs.rst b/docs/api_docs.rst index cb85ff91f..494232c09 100644 --- a/docs/api_docs.rst +++ b/docs/api_docs.rst @@ -53,28 +53,30 @@ kraken.serialization module Default templates ----------------- +.. _templates: + ALTO 4.4 ^^^^^^^^ -.. literalinclude:: ../../templates/alto +.. literalinclude:: ../kraken/templates/alto :language: xml+jinja PageXML ^^^^^^^ -.. literalinclude:: ../../templates/alto +.. literalinclude:: ../kraken/templates/alto :language: xml+jinja hOCR ^^^^ -.. literalinclude:: ../../templates/alto +.. literalinclude:: ../kraken/templates/alto :language: xml+jinja ABBYY XML ^^^^^^^^^ -.. literalinclude:: ../../templates/abbyyxml +.. literalinclude:: ../kraken/templates/abbyyxml :language: xml+jinja Containers and Helpers @@ -98,6 +100,9 @@ kraken.containers module .. autoapiclass:: kraken.containers.BBoxLine :members: +.. autoapiclass:: kraken.containers.Region + :members: + .. autoapiclass:: kraken.containers.ocr_record :members: diff --git a/docs/conf.py b/docs/conf.py index 22c7d6614..62c2b92bd 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,32 +1,19 @@ -# -*- coding: utf-8 -*- +# Configuration file for the Sphinx documentation builder. # -# kraken documentation build configuration file, created by -# sphinx-quickstart on Fri May 22 16:51:45 2015. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. +# For the full list of built-in configuration values, see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html -from subprocess import PIPE, Popen +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('../kraken')) +project = 'kraken' +copyright = '2015-2024, Benjamin Kiessling' +author = 'Benjamin Kiessling' -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -needs_sphinx = '2.0' +from subprocess import Popen, PIPE +pipe = Popen('git describe --tags --always main', stdout=PIPE, shell=True) +release = pipe.stdout.read().decode('utf-8') -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.autodoc.typehints', @@ -36,6 +23,9 @@ 'sphinx_multiversion', ] +templates_path = ['_templates'] +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + autodoc_typehints = 'description' autoapi_type = 'python' @@ -51,267 +41,34 @@ ] autoapi_generate_api_docs = False -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# source_suffix = ['.rst', '.md'] source_suffix = '.rst' -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. master_doc = 'index' -# General information about the project. -project = u'kraken' -copyright = u'2015, mittagessen' -author = u'mittagessen' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -pipe = Popen('git describe --tags --always main', stdout=PIPE, shell=True) -version = pipe.stdout.read().decode('utf-8') -release = version - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. language = 'en' -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ['_build'] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -#keep_warnings = False - -# If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. html_theme = 'alabaster' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. html_theme_options = { 'github_user': 'mittagessen', 'github_repo': 'kraken', } -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -html_logo = '_static/kraken.png' - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] html_css_files = [ 'custom.css', ] -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -#html_extra_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. html_sidebars = { 'index': ['sidebarintro.html', 'navigation.html', 'searchbox.html', 'versions.html'], '**': ['localtoc.html', 'relations.html', 'searchbox.html', 'versions.html'] } html_baseurl = 'kraken.re' -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Language to be used for generating the HTML full-text search index. -# Sphinx supports the following languages: -# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' -# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' -#html_search_language = 'en' - -# A dictionary with options for the search language support, empty by default. -# Now only 'ja' uses this config value -#html_search_options = {'type': 'default'} - -# The name of a javascript file (relative to the configuration directory) that -# implements a search results scorer. If empty, the default will be used. -#html_search_scorer = 'scorer.js' - -# Output file base name for HTML help builder. htmlhelp_basename = 'krakendoc' -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -#'papersize': 'letterpaper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -#'preamble': '', - -# Latex figure (float) alignment -#'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, 'kraken.tex', 'kraken Documentation', - 'mittagessen', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'kraken', 'kraken Documentation', - [author], 1) -] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - (master_doc, 'kraken', 'kraken Documentation', - author, 'kraken', 'One line description of project.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -#texinfo_no_detailmenu = False - smv_branch_whitelist = r'main' smv_tag_whitelist = r'^[2-9]\.\d+(\.0)?$' diff --git a/docs/index.rst b/docs/index.rst index 5713d8fdd..dda41e35e 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -30,7 +30,7 @@ kraken's main features are: - :ref:`Public repository ` of model files - :ref:`Variable recognition network architectures ` -Pull requests and code contributions are always welcome. +Pull requests and code contributions are always welcome. Installation ============ @@ -86,7 +86,7 @@ The git repository contains some environment files that aid in setting up the la .. code-block:: console - $ git clone https://github.com/mittagessen/kraken.git + $ git clone https://github.com/mittagessen/kraken.git $ cd kraken $ conda env create -f environment.yml @@ -94,7 +94,7 @@ or: .. code-block:: console - $ git clone https://github.com/mittagessen/kraken.git + $ git clone https://github.com/mittagessen/kraken.git $ cd kraken $ conda env create -f environment_cuda.yml @@ -103,13 +103,14 @@ for CUDA acceleration with the appropriate hardware. Finding Recognition Models -------------------------- -Finally you'll have to scrounge up a recognition model to do the actual -recognition of characters. To download the default English text recognition -model and place it in the user's kraken directory: +Finally you'll have to scrounge up a model to do the actual recognition of +characters. To download the default model for printed French text and place it +in the kraken directory for the current user: -.. code-block:: console +:: + + $ kraken get 10.5281/zenodo.10592716 - $ kraken get 10.5281/zenodo.2577813 A list of libre models available in the central repository can be retrieved by running: @@ -122,18 +123,22 @@ Model metadata can be extracted using: .. code-block:: console - $ kraken show 10.5281/zenodo.2577813 - name: 10.5281/zenodo.2577813 + $ kraken show 10.5281/zenodo.10592716 + name: 10.5281/zenodo.10592716 + + CATMuS-Print (Large, 2024-01-30) - Diachronic model for French prints and other languages - A generalized model for English printed text - - This model has been trained on a large corpus of modern printed English text\naugmented with ~10000 lines of historical p +

CATMuS-Print (Large) - Diachronic model for French prints and other West European languages

+

CATMuS (Consistent Approach to Transcribing ManuScript) Print is a Kraken HTR model trained on data produced by several projects, dealing with different languages (French, Spanish, German, English, Corsican, Catalan, Latin, Italian…) and different centuries (from the first prints of the 16th c. to digital documents of the 21st century).

+

Transcriptions follow graphematic principles and try to be as compatible as possible with guidelines previously published for French: no ligature (except those that still exist), no allographetic variants (except the long s), and preservation of the historical use of some letters (u/v, i/j). Abbreviations are not resolved. Inconsistencies might be present, because transcriptions have been done over several years and the norms have slightly evolved.

+

The model is trained with NFKD Unicode normalization: each diacritic (including superscripts) are transcribed as their own characters, separately from the "main" character.

+

This model is the result of the collaboration from researchers from the University of Geneva and Inria Paris and will be consolidated under the CATMuS Medieval Guidelines in an upcoming paper.

scripts: Latn - alphabet: !"#$%&'()+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]`abcdefghijklmnopqrstuvwxyz{} SPACE - accuracy: 99.95% - license: Apache-2.0 - author(s): Kiessling, Benjamin - date: 2019-02-26 + alphabet: !"#$%&'()*+,-./0123456789:;<=>?ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz|}~¡£¥§«¬°¶·»¿ÆßæđłŒœƀǝɇΑΒΓΔΕΖΘΙΚΛΜΝΟΠΡΣΤΥΦΧΩαβγδεζηθικλμνξοπρςστυφχωϛחלרᑕᗅᗞᚠẞ–—‘’‚“”„‟†•⁄⁊⁋℟←▽◊★☙✠✺✻⟦⟧⬪ꝑꝓꝗꝙꝟꝯꝵ SPACE, COMBINING GRAVE ACCENT, COMBINING ACUTE ACCENT, COMBINING CIRCUMFLEX ACCENT, COMBINING TILDE, COMBINING MACRON, COMBINING DOT ABOVE, COMBINING DIAERESIS, COMBINING RING ABOVE, COMBINING COMMA ABOVE, COMBINING REVERSED COMMA ABOVE, COMBINING CEDILLA, COMBINING OGONEK, COMBINING GREEK PERISPOMENI, COMBINING GREEK YPOGEGRAMMENI, COMBINING LATIN SMALL LETTER I, COMBINING LATIN SMALL LETTER U, 0xe682, 0xe68b, 0xe8bf, 0xf1a7 + accuracy: 98.56% + license: cc-by-4.0 + author(s): Gabay, Simon; Clérice, Thibault + date: 2024-01-30 Quickstart ========== @@ -154,7 +159,7 @@ prerequisite step of page segmentation: .. code-block:: console - $ kraken -i image.tif image.txt segment -bl ocr + $ kraken -i image.tif image.txt segment -bl ocr -m catmus-print-fondue-large.mlmodel Loading RNN ✓ Processing ⣻ @@ -164,18 +169,18 @@ To segment an image into reading-order sorted baselines and regions: $ kraken -i bw.tif lines.json segment -bl -To OCR an image using the default model: +To OCR an image using the previously downloaded model: .. code-block:: console - $ kraken -i bw.tif image.txt segment -bl ocr + $ kraken -i bw.tif image.txt segment -bl ocr -m catmus-print-fondue-large.mlmodel To OCR an image using the default model and serialize the output using the ALTO template: .. code-block:: console - $ kraken -a -i bw.tif image.txt segment -bl ocr + $ kraken -a -i bw.tif image.txt segment -bl ocr -m catmus-print-fondue-large.mlmodel All commands and their parameters are documented, just add the standard ``--help`` flag for further information. @@ -188,8 +193,8 @@ There is a training tutorial at :doc:`training`. Related Software ================ -These days kraken is quite closely linked to the `escriptorium -`_ project developed in the same eScripta research +These days kraken is quite closely linked to the `eScriptorium +`_ project developed in the same eScripta research group. eScriptorium provides a user-friendly interface for annotating data, training models, and inference (but also much more). There is a `gitter channel `_ that is mostly intended for diff --git a/docs/ketos.rst b/docs/ketos.rst index b1c23ae30..11f4d2a90 100644 --- a/docs/ketos.rst +++ b/docs/ketos.rst @@ -5,12 +5,12 @@ Training This page describes the training utilities available through the ``ketos`` command line utility in depth. For a gentle introduction on model training -please refer to the :ref:`tutorial `. +please refer to the :ref:`tutorial `. There are currently three trainable components in the kraken processing pipeline: * Segmentation: finding lines and regions in images * Reading Order: ordering lines found in the previous segmentation step. Reading order models are closely linked to segmentation models and both are usually trained on the same dataset. -* Recognition: recognition models transform images of lines into text. +* Recognition: recognition models transform images of lines into text. Depending on the use case it is not necessary to manually train new models for each material. The default segmentation model works well on quite a variety of @@ -26,6 +26,7 @@ Recognition model training * The default architecture works well for decently sized datasets. * Use precompiled binary datasets and put them in a place where they can be memory mapped during training (local storage, not NFS or similar). +* Fixed splits in precompiled datasets increase memory use and slow down startup as the dataset needs to be loaded once into the dataset. It is recommended to create explicit splits by compiling source XML files into separate datasets. * Use the ``--logger`` flag to track your training metrics across experiments using Tensorboard. * If the network doesn't converge before the early stopping aborts training, increase ``--min-epochs`` or ``--lag``. Use the ``--logger`` option to inspect your training loss. * Use the flag ``--augment`` to activate data augmentation. @@ -127,11 +128,19 @@ compile time: $ ketos compile --random-split 0.8 0.1 0.1 ... + The above line splits assigns 80% of the source lines to the training set, 10% to the validation set, and 10% to the test set. The training and validation sets in the dataset file are used automatically by `ketos train` (unless told otherwise) while the remaining 10% of the test set is selected by `ketos test`. +.. warning:: + Fixed splits in datasets are ignored during training and testing per + default as they require loading the entire dataset into main memory at + once, drastically increasing memory consumption and causing initial delays. + Use the `\-\-fixed-splits` option in `ketos train` and `ketos test` to + respect fixed splits. + Recognition training -------------------- @@ -246,7 +255,7 @@ would be: A better configuration for large and complicated datasets such as handwritten texts: -.. code-block:: console +.. code-block:: console $ ketos train --augment --workers 4 -d cuda -f binary --min-epochs 20 -w 0 -s '[1,120,0,1 Cr3,13,32 Do0.1,2 Mp2,2 Cr3,13,32 Do0.1,2 Mp2,2 Cr3,9,64 Do0.1,2 Mp2,2 Cr3,9,64 Do0.1,2 S1(1x0)1,3 Lbx200 Do0.1,2 Lbx200 Do.1,2 Lbx200 Do]' -r 0.0001 dataset_large.arrow @@ -273,10 +282,10 @@ an exact match. Otherwise an error will be raised: $ ketos train -i model_5.mlmodel kamil/*.png Building training set [####################################] 100% Building validation set [####################################] 100% - [0.8616] alphabet mismatch {'~', '»', '8', '9', 'ـ'} + [0.8616] alphabet mismatch {'~', '»', '8', '9', 'ـ'} Network codec not compatible with training set - [0.8620] Training data and model codec alphabets mismatch: {'ٓ', '؟', '!', 'ص', '،', 'ذ', 'ة', 'ي', 'و', 'ب', 'ز', 'ح', 'غ', '~', 'ف', ')', 'د', 'خ', 'م', '»', 'ع', 'ى', 'ق', 'ش', 'ا', 'ه', 'ك', 'ج', 'ث', '(', 'ت', 'ظ', 'ض', 'ل', 'ط', '؛', 'ر', 'س', 'ن', 'ء', 'ٔ', '«', 'ـ', 'ٕ'} - + [0.8620] Training data and model codec alphabets mismatch: {'ٓ', '؟', '!', 'ص', '،', 'ذ', 'ة', 'ي', 'و', 'ب', 'ز', 'ح', 'غ', '~', 'ف', ')', 'د', 'خ', 'م', '»', 'ع', 'ى', 'ق', 'ش', 'ا', 'ه', 'ك', 'ج', 'ث', '(', 'ت', 'ظ', 'ض', 'ل', 'ط', '؛', 'ر', 'س', 'ن', 'ء', 'ٔ', '«', 'ـ', 'ٕ'} + There are two modes dealing with mismatching alphabets, ``union`` and ``new``. ``union`` resizes the output layer and codec of the loaded model to include all characters in the new training set without removing any characters. ``new`` @@ -340,10 +349,10 @@ layers we define a network stub and index for appending: .. code-block:: console - $ ketos train -i model_1.mlmodel --append 7 -s '[Lbx256 Do]' syr/*.png + $ ketos train -i model_1.mlmodel --append 7 -s '[Lbx256 Do]' syr/*.png Building training set [####################################] 100% Building validation set [####################################] 100% - [0.8014] alphabet mismatch {'8', '3', '9', '7', '܇', '݀', '݂', '4', ':', '0'} + [0.8014] alphabet mismatch {'8', '3', '9', '7', '܇', '݀', '݂', '4', ':', '0'} Slicing and dicing model ✓ The new model will behave exactly like a new one, except potentially training a @@ -599,7 +608,7 @@ It is also possible to filter out baselines/regions selectively: Finally, we can merge baselines and regions into each other: -.. code-block:: console +.. code-block:: console $ ketos segtrain -f xml --merge-baselines default:foo training_data/*.xml Training line types: @@ -653,7 +662,7 @@ with their segmentation model in a subsequent step. The general sequence is therefore: .. code-block:: console - + $ ketos segtrain -o fr_manu_seg.mlmodel -f xml french/*.xml ... $ ketos rotrain -o fr_manu_ro.mlmodel -f xml french/*.xml @@ -671,8 +680,8 @@ serialized in the final XML output (in ALTO/PAGE XML). Reading order models work purely on the typology and geometric features of the lines and regions. They construct an approximate ordering matrix by feeding feature vectors of two lines (or regions) into the network - to decide which of those two lines precedes the other. - + to decide which of those two lines precedes the other. + These feature vectors are quite simple; just the lines' types, and their start, center, and end points. Therefore they can *not* reliably learn any ordering relying on graphical features of the input page such @@ -705,10 +714,10 @@ sufficiently large training datasets: │ 3 │ ro_net.relu │ ReLU │ 0 │ │ 4 │ ro_net.fc2 │ Linear │ 45 │ └───┴─────────────┴───────────────────┴────────┘ - Trainable params: 1.1 K - Non-trainable params: 0 - Total params: 1.1 K - Total estimated model params size (MB): 0 + Trainable params: 1.1 K + Non-trainable params: 0 + Total params: 1.1 K + Total estimated model params size (MB): 0 stage 0/∞ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0/35 0:00:00 • -:--:-- 0.00it/s val_spearman: 0.912 val_loss: 0.701 early_stopping: 0/300 inf During validation a metric called Spearman's footrule is computed. To calculate @@ -756,20 +765,20 @@ adding a number of image files as the final argument: Evaluating $model Evaluating [####################################] 100% === report test_model.mlmodel === - + 7012 Characters 6022 Errors 14.12% Accuracy - + 5226 Insertions 2 Deletions 794 Substitutions - + Count Missed %Right 1567 575 63.31% Common 5230 5230 0.00% Arabic 215 215 0.00% Inherited - + Errors Correct-Generated 773 { ا } - { } 536 { ل } - { } diff --git a/docs/make.bat b/docs/make.bat deleted file mode 100644 index e51ed814f..000000000 --- a/docs/make.bat +++ /dev/null @@ -1,263 +0,0 @@ -@ECHO OFF - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set BUILDDIR=_build -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . -set I18NSPHINXOPTS=%SPHINXOPTS% . -if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% - set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% -) - -if "%1" == "" goto help - -if "%1" == "help" ( - :help - echo.Please use `make ^` where ^ is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. singlehtml to make a single large HTML file - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. devhelp to make HTML files and a Devhelp project - echo. epub to make an epub - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. text to make text files - echo. man to make manual pages - echo. texinfo to make Texinfo files - echo. gettext to make PO message catalogs - echo. changes to make an overview over all changed/added/deprecated items - echo. xml to make Docutils-native XML files - echo. pseudoxml to make pseudoxml-XML files for display purposes - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - echo. coverage to run coverage check of the documentation if enabled - goto end -) - -if "%1" == "clean" ( - for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i - del /q /s %BUILDDIR%\* - goto end -) - - -REM Check if sphinx-build is available and fallback to Python version if any -%SPHINXBUILD% 2> nul -if errorlevel 9009 goto sphinx_python -goto sphinx_ok - -:sphinx_python - -set SPHINXBUILD=python -m sphinx.__init__ -%SPHINXBUILD% 2> nul -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -:sphinx_ok - - -if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/html. - goto end -) - -if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. - goto end -) - -if "%1" == "singlehtml" ( - %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. - goto end -) - -if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the pickle files. - goto end -) - -if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the JSON files. - goto end -) - -if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in %BUILDDIR%/htmlhelp. - goto end -) - -if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in %BUILDDIR%/qthelp, like this: - echo.^> qcollectiongenerator %BUILDDIR%\qthelp\kraken.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile %BUILDDIR%\qthelp\kraken.ghc - goto end -) - -if "%1" == "devhelp" ( - %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. - goto end -) - -if "%1" == "epub" ( - %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The epub file is in %BUILDDIR%/epub. - goto end -) - -if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdf" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf - cd %~dp0 - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdfja" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf-ja - cd %~dp0 - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "text" ( - %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The text files are in %BUILDDIR%/text. - goto end -) - -if "%1" == "man" ( - %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The manual pages are in %BUILDDIR%/man. - goto end -) - -if "%1" == "texinfo" ( - %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. - goto end -) - -if "%1" == "gettext" ( - %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The message catalogs are in %BUILDDIR%/locale. - goto end -) - -if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes - if errorlevel 1 exit /b 1 - echo. - echo.The overview file is in %BUILDDIR%/changes. - goto end -) - -if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck - if errorlevel 1 exit /b 1 - echo. - echo.Link check complete; look for any errors in the above output ^ -or in %BUILDDIR%/linkcheck/output.txt. - goto end -) - -if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest - if errorlevel 1 exit /b 1 - echo. - echo.Testing of doctests in the sources finished, look at the ^ -results in %BUILDDIR%/doctest/output.txt. - goto end -) - -if "%1" == "coverage" ( - %SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage - if errorlevel 1 exit /b 1 - echo. - echo.Testing of coverage in the sources finished, look at the ^ -results in %BUILDDIR%/coverage/python.txt. - goto end -) - -if "%1" == "xml" ( - %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The XML files are in %BUILDDIR%/xml. - goto end -) - -if "%1" == "pseudoxml" ( - %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. - goto end -) - -:end diff --git a/docs/training.rst b/docs/training.rst index aa63338f5..704727aa5 100644 --- a/docs/training.rst +++ b/docs/training.rst @@ -142,7 +142,7 @@ that can be adjusted: Training a network will take some time on a modern computer, even with the default parameters. While the exact time required is unpredictable as training is a somewhat random process a rough guide is that accuracy seldom improves -after 50 epochs reached between 8 and 24 hours of training. +after 50 epochs reached between 8 and 24 hours of training. When to stop training is a matter of experience; the default setting employs a fairly reliable approach known as `early stopping @@ -150,10 +150,10 @@ fairly reliable approach known as `early stopping the error rate on the validation set doesn't improve anymore. This will prevent `overfitting `_, i.e. fitting the model to recognize only the training data properly instead of the -general patterns contained therein. +general patterns contained therein. .. code-block:: console - + $ ketos train output_dir/*.png Building training set [####################################] 100% Building validation set [####################################] 100% @@ -164,7 +164,7 @@ general patterns contained therein. Accuracy report (1) 0.0245 3504 3418 epoch 1/-1 [####################################] 788/788 Accuracy report (2) 0.8445 3504 545 - epoch 2/-1 [####################################] 788/788 + epoch 2/-1 [####################################] 788/788 Accuracy report (3) 0.9541 3504 161 epoch 3/-1 [------------------------------------] 13/788 0d 00:22:09 ... @@ -212,8 +212,8 @@ information by appending one or more ``-v`` to the command: .. code-block:: console $ ketos -vv train syr/*.png - [0.7272] Building ground truth set from 876 line images - [0.7281] Taking 88 lines from training for evaluation + [0.7272] Building ground truth set from 876 line images + [0.7281] Taking 88 lines from training for evaluation ... [0.8479] Training set 788 lines, validation set 88 lines, alphabet 48 symbols [0.8481] alphabet mismatch {'\xa0', '0', ':', '݀', '܇', '݂', '5'} @@ -314,20 +314,20 @@ After all lines have been processed a evaluation report will be printed: .. code-block:: console === report === - + 35619 Characters 336 Errors 99.06% Accuracy - + 157 Insertions 81 Deletions 98 Substitutions - + Count Missed %Right 27046 143 99.47% Syriac 7015 52 99.26% Common 1558 60 96.15% Inherited - + Errors Correct-Generated 25 { } - { COMBINING DOT BELOW } 25 { COMBINING DOT BELOW } - { } @@ -433,16 +433,16 @@ Retrieving model metadata for a particular model: $ kraken show arabic-alam-al-kutub name: arabic-alam-al-kutub.mlmodel - + An experimental model for Classical Arabic texts. - + Network trained on 889 lines of [0] as a test case for a general Classical Arabic model. Ground truth was prepared by Sarah Savant and Maxim Romanov . - + Vocalization was omitted in the ground truth. Training was stopped at ~35000 iterations with an accuracy of 97%. - + [0] Ibn al-Faqīh (d. 365 AH). Kitāb al-buldān. Edited by Yūsuf al-Hādī, 1st edition. Bayrūt: ʿĀlam al-kutub, 1416 AH/1996 CE. alphabet: !()-.0123456789:[] «»،؟ءابةتثجحخدذرزسشصضطظعغفقكلمنهوىي ARABIC diff --git a/docs/vgsl.rst b/docs/vgsl.rst index 8a956b213..6a0c42de4 100644 --- a/docs/vgsl.rst +++ b/docs/vgsl.rst @@ -55,11 +55,11 @@ Examples [1,1,0,48 Lbx100 Do 01c59] - Creating new model [1,1,0,48 Lbx100 Do] with 59 outputs - layer type params + Creating new model [1,1,0,48 Lbx100 Do] with 59 outputs + layer type params 0 rnn direction b transposed False summarize False out 100 legacy None - 1 dropout probability 0.5 dims 1 - 2 linear augmented False out 59 + 1 dropout probability 0.5 dims 1 + 2 linear augmented False out 59 A simple recurrent recognition model with a single LSTM layer classifying lines normalized to 48 pixels in height. @@ -68,18 +68,18 @@ normalized to 48 pixels in height. [1,48,0,1 Cr3,3,32 Do0.1,2 Mp2,2 Cr3,3,64 Do0.1,2 Mp2,2 S1(1x12)1,3 Lbx100 Do 01c59] - Creating new model [1,48,0,1 Cr3,3,32 Do0.1,2 Mp2,2 Cr3,3,64 Do0.1,2 Mp2,2 S1(1x12)1,3 Lbx100 Do] with 59 outputs - layer type params - 0 conv kernel 3 x 3 filters 32 activation r - 1 dropout probability 0.1 dims 2 - 2 maxpool kernel 2 x 2 stride 2 x 2 - 3 conv kernel 3 x 3 filters 64 activation r - 4 dropout probability 0.1 dims 2 - 5 maxpool kernel 2 x 2 stride 2 x 2 - 6 reshape from 1 1 x 12 to 1/3 - 7 rnn direction b transposed False summarize False out 100 legacy None - 8 dropout probability 0.5 dims 1 - 9 linear augmented False out 59 + Creating new model [1,48,0,1 Cr3,3,32 Do0.1,2 Mp2,2 Cr3,3,64 Do0.1,2 Mp2,2 S1(1x12)1,3 Lbx100 Do] with 59 outputs + layer type params + 0 conv kernel 3 x 3 filters 32 activation r + 1 dropout probability 0.1 dims 2 + 2 maxpool kernel 2 x 2 stride 2 x 2 + 3 conv kernel 3 x 3 filters 64 activation r + 4 dropout probability 0.1 dims 2 + 5 maxpool kernel 2 x 2 stride 2 x 2 + 6 reshape from 1 1 x 12 to 1/3 + 7 rnn direction b transposed False summarize False out 100 legacy None + 8 dropout probability 0.5 dims 1 + 9 linear augmented False out 59 A model with a small convolutional stack before a recurrent LSTM layer. The extended dropout layer syntax is used to reduce drop probability on the depth @@ -129,7 +129,7 @@ other branch simply passes through the output of the first convolution layer. The input of the last convolutional layer is then the output of the two branches of the parallel block concatenated, i.e. the output of the first convolutional layer together with the output of the transposed convolutional layer, -giving `32 + 32 = 64` feature dimensions. +giving `32 + 32 = 64` feature dimensions. Convolutional Layers -------------------- diff --git a/environment.yml b/environment.yml index 93bd5b800..be2050ffa 100644 --- a/environment.yml +++ b/environment.yml @@ -14,7 +14,7 @@ dependencies: - scipy~=1.10.0 - jinja2~=3.0 - conda-forge::torchvision-cpu>=0.5.0 - - conda-forge::pytorch-cpu~=2.0.0 + - conda-forge::pytorch-cpu~=2.1.0 - jsonschema - scikit-learn~=1.2.1 - scikit-image~=0.21.0 @@ -23,12 +23,13 @@ dependencies: - imagemagick>=7.1.0 - pyarrow - importlib-resources>=1.3.0 - - conda-forge::pytorch-lightning~=2.0.0 + - conda-forge::lightning~=2.2.0 - conda-forge::torchmetrics>=1.1.0 - - conda-forge::threadpoolctl~=3.2 + - conda-forge::threadpoolctl~=3.4 - pip - albumentations - rich + - setuptools>=36.6.0,<70.0.0 - pip: - coremltools~=6.0 - file:. diff --git a/environment_cuda.yml b/environment_cuda.yml index 50da33e79..392284508 100644 --- a/environment_cuda.yml +++ b/environment_cuda.yml @@ -1,4 +1,4 @@ -name: kraken_2 +name: kraken channels: - defaults - conda-forge @@ -14,7 +14,7 @@ dependencies: - scipy~=1.10.0 - jinja2~=3.0 - conda-forge::torchvision>=0.5.0 - - conda-forge::pytorch~=2.0.0 + - conda-forge::pytorch~=2.1.0 - cudatoolkit>=9.2 - jsonschema - scikit-learn~=1.2.1 @@ -24,12 +24,13 @@ dependencies: - imagemagick>=7.1.0 - pyarrow - importlib-resources>=1.3.0 - - conda-forge::pytorch-lightning~=2.0.0 + - conda-forge::lightning~=2.2.0 - conda-forge::torchmetrics>=1.1.0 - - conda-forge::threadpoolctl~=3.2 + - conda-forge::threadpoolctl~=3.4 - pip - albumentations - rich + - setuptools>=36.6.0,<70.0.0 - pip: - coremltools~=6.0 - file:. diff --git a/kraken/blla.py b/kraken/blla.py index 3d0e961f4..d78ee55af 100644 --- a/kraken/blla.py +++ b/kraken/blla.py @@ -274,23 +274,10 @@ def segment(im: PIL.Image.Image, autocast: Runs the model with automatic mixed precision Returns: - A :class:`kraken.containers.Segmentation` class containing reading order - sorted baselines (polylines) and their respective polygonal boundaries - as :class:`kraken.containers.BaselineLine` records. - The format of the line and region records is shown below. The last and - first point of each boundary polygon are connected. - - .. code-block:: - :force: - - 'lines': [ - {'baseline': [[x0, y0], [x1, y1], ..., [x_n, y_n]], 'boundary': [[x0, y0], [x1, y1], ... [x_m, y_m]]}, - {'baseline': [[x0, ...]], 'boundary': [[x0, ...]]} - ] - 'regions': [ - {'region': [[x0, y0], [x1, y1], ..., [x_n, y_n]], 'type': 'image'}, - {'region': [[x0, ...]], 'type': 'text'} - ] + A :class:`kraken.containers.Segmentation` class containing reading + order sorted baselines (polylines) and their respective polygonal + boundaries as :class:`kraken.containers.BaselineLine` records. The + last and first point of each boundary polygon are connected. Raises: KrakenInvalidModelException: if the given model is not a valid diff --git a/kraken/containers.py b/kraken/containers.py index b649a5ced..1a5be2230 100644 --- a/kraken/containers.py +++ b/kraken/containers.py @@ -36,6 +36,7 @@ __all__ = ['BaselineLine', 'BBoxLine', 'Segmentation', + 'Region', 'ocr_record', 'BaselineOCRRecord', 'BBoxOCRRecord', @@ -193,11 +194,14 @@ def __post_init__(self): if len(self.lines) and not isinstance(self.lines[0], BBoxLine) and not isinstance(self.lines[0], BaselineLine): line_cls = BBoxLine if self.type == 'bbox' else BaselineLine self.lines = [line_cls(**line) for line in self.lines] - if len(self.regions) and not isinstance(next(iter(self.regions.values()))[0], Region): - regs = {} - for k, v in self.regions.items(): - regs[k] = [Region(**reg) for reg in v] - self.regions = regs + if len(self.regions): + for regs in self.regions.values(): + if regs and not isinstance(regs[0], Region): + regs = {} + for k, v in self.regions.items(): + regs[k] = [Region(**reg) for reg in v] + self.regions = regs + break class ocr_record(ABC): diff --git a/kraken/contrib/extract_lines.py b/kraken/contrib/extract_lines.py index 95233263c..053d48f97 100755 --- a/kraken/contrib/extract_lines.py +++ b/kraken/contrib/extract_lines.py @@ -9,8 +9,9 @@ 'link to source images.') @click.option('-i', '--model', default=None, show_default=True, type=click.Path(exists=True), help='Baseline detection model to use. Overrides format type and expects image files as input.') +@click.option('--legacy-polygons', is_flag=True, help='Use the legacy polygon extractor.') @click.argument('files', nargs=-1) -def cli(format_type, model, files): +def cli(format_type, model, legacy_polygons, files): """ A small script extracting rectified line polygons as defined in either ALTO or PageXML files or run a model to do the same. @@ -37,7 +38,7 @@ def cli(format_type, model, files): data = xml.XMLPage(doc, format_type) if len(data.lines) > 0: bounds = data.to_container() - for idx, (im, box) in enumerate(segmentation.extract_polygons(Image.open(bounds.imagename), bounds)): + for idx, (im, box) in enumerate(segmentation.extract_polygons(Image.open(bounds.imagename), bounds, legacy=legacy_polygons)): click.echo('.', nl=False) im.save('{}.{}.jpg'.format(splitext(bounds.imagename)[0], idx)) with open('{}.{}.gt.txt'.format(splitext(bounds.imagename)[0], idx), 'w') as fp: @@ -55,15 +56,17 @@ def cli(format_type, model, files): im.save('{}.{}.jpg'.format(splitext(doc)[0], idx)) with open('{}.{}.gt.txt'.format(splitext(doc)[0], idx), 'w') as fp: fp.write(sample['text']) + click.echo() else: net = vgsl.TorchVGSLModel.load_model(model) for doc in files: click.echo(f'Processing {doc} ', nl=False) full_im = Image.open(doc) bounds = blla.segment(full_im, model=net) - for idx, (im, box) in enumerate(segmentation.extract_polygons(full_im, bounds)): + for idx, (im, box) in enumerate(segmentation.extract_polygons(full_im, bounds, legacy=legacy_polygons)): click.echo('.', nl=False) im.save('{}.{}.jpg'.format(splitext(doc)[0], idx)) + click.echo() if __name__ == '__main__': diff --git a/kraken/contrib/forced_alignment_overlay.py b/kraken/contrib/forced_alignment_overlay.py index 2610d84c4..23bae3fd2 100755 --- a/kraken/contrib/forced_alignment_overlay.py +++ b/kraken/contrib/forced_alignment_overlay.py @@ -50,7 +50,9 @@ def _repl_alto(fname, cuts): for chld in el: if chld.tag.endswith('Glyph'): el.remove(chld) - for char in line_cuts[idx:str_len]: + for char in zip(line_cuts.prediction[idx:str_len], + line_cuts.cuts[idx:str_len], + line_cuts.confidences[idx:str_len]): glyph = etree.SubElement(el, 'Glyph') glyph.set('ID', f'char_{char_idx}') char_idx += 1 @@ -117,7 +119,7 @@ def cli(format_type, model, normalization, output, files): click.echo(f'Processing {doc} ', nl=False) data = XMLPage(doc) im = Image.open(data.imagename).convert('RGBA') - result = align.forced_align(data.to_container, net) + result = align.forced_align(data.to_container(), net) if normalization: for line in data._lines: line["text"] = normalize(normalization, line["text"]) diff --git a/kraken/contrib/hyperparameters/tune_pretraining.py b/kraken/contrib/hyperparameters/tune_pretraining.py deleted file mode 100644 index 5564b521d..000000000 --- a/kraken/contrib/hyperparameters/tune_pretraining.py +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/env python -""" -A script for a grid search over pretraining hyperparameters. -""" -from functools import partial - -import click -import pytorch_lightning as pl -from pytorch_lightning import seed_everything -from ray import tune -from ray.tune.integration.pytorch_lightning import TuneReportCallback - -from kraken.ketos.util import _validate_manifests -from kraken.lib.default_specs import (RECOGNITION_PRETRAIN_HYPER_PARAMS, - RECOGNITION_SPEC) -from kraken.lib.pretrain.model import (PretrainDataModule, - RecognitionPretrainModel) - -config = {'lrate': tune.loguniform(1e-8, 1e-2), - 'num_negatives': tune.qrandint(1, 4, 1), - 'mask_prob': tune.loguniform(0.01, 0.2), - 'mask_width': tune.qrandint(2, 8, 2)} - -resources_per_trial = {"cpu": 8, "gpu": 0.5} - - -def train_tune(config, training_data=None, epochs=100, spec=RECOGNITION_SPEC): - - hyper_params = RECOGNITION_PRETRAIN_HYPER_PARAMS.copy() - hyper_params.update(config) - - model = RecognitionPretrainModel(hyper_params=hyper_params, - output='./model', - spec=spec) - - data_module = PretrainDataModule(batch_size=hyper_params.pop('batch_size'), - pad=hyper_params.pop('pad'), - augment=hyper_params.pop('augment'), - training_data=training_data, - num_workers=resources_per_trial['cpu'], - height=model.height, - width=model.width, - channels=model.channels, - format_type='binary') - - callback = TuneReportCallback({'loss': 'CE'}, on='validation_end') - trainer = pl.Trainer(max_epochs=epochs, - accelerator='gpu', - devices=1, - callbacks=[callback], - enable_progress_bar=False) - trainer.fit(model, datamodule=data_module) - - -@click.command() -@click.option('-v', '--verbose', default=0, count=True) -@click.option('-s', '--seed', default=42, type=click.INT, - help='Seed for numpy\'s and torch\'s RNG. Set to a fixed value to ' - 'ensure reproducible random splits of data') -@click.option('-o', '--output', show_default=True, type=click.Path(), default='pretrain_hyper', help='output directory') -@click.option('-n', '--num-samples', show_default=True, type=int, default=100, help='Number of samples to train') -@click.option('-N', '--epochs', show_default=True, type=int, default=10, help='Maximum number of epochs to train per sample') -@click.option('-s', '--spec', show_default=True, default=RECOGNITION_SPEC, help='VGSL spec of the network to train.') -@click.option('-t', '--training-files', show_default=True, default=None, multiple=True, - callback=_validate_manifests, type=click.File(mode='r', lazy=True), - help='File(s) with additional paths to training data') -@click.argument('files', nargs=-1) -def cli(verbose, seed, output, num_samples, epochs, spec, training_files, files): - - files = list(files) - - if training_files: - files.extend(training_files) - - if not files: - raise click.UsageError('No training data was provided to the search command. Use `-t` or the `files` argument.') - - seed_everything(seed, workers=True) - - analysis = tune.run(partial(train_tune, - training_data=files, - epochs=epochs, - spec=spec), local_dir=output, num_samples=num_samples, resources_per_trial=resources_per_trial, config=config) - - click.echo("Best hyperparameters found were: ", analysis.get_best_config(metric='accuracy', mode='max')) - - -if __name__ == '__main__': - cli() diff --git a/kraken/contrib/hyperparameters/tune_training.py b/kraken/contrib/hyperparameters/tune_training.py deleted file mode 100644 index e123c3754..000000000 --- a/kraken/contrib/hyperparameters/tune_training.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python -""" -A script for a grid search over pretraining hyperparameters. -""" -import sys -from functools import partial - -import pytorch_lightning as pl -from ray import tune -from ray.tune.integration.pytorch_lightning import TuneReportCallback - -from kraken.lib.default_spec import (RECOGNITION_PRETRAIN_HYPER_PARAMS, - RECOGNITION_SPEC) -from kraken.lib.pretrain.model import (PretrainDataModule, - RecognitionPretrainModel) - -config = {'lrate': tune.loguniform(1e-8, 1e-2), - 'num_negatives': tune.qrandint(2, 100, 8), - 'mask_prob': tune.loguniform(0.01, 0.2), - 'mask_width': tune.qrandint(2, 8, 2)} - -resources_per_trial = {"cpu": 8, "gpu": 0.5} - - -def train_tune(config, training_data=None, epochs=100): - - hyper_params = RECOGNITION_PRETRAIN_HYPER_PARAMS.copy() - hyper_params.update(config) - - model = RecognitionPretrainModel(hyper_params=hyper_params, - output='model', - spec=RECOGNITION_SPEC) - - _ = PretrainDataModule(batch_size=hyper_params.pop('batch_size'), - pad=hyper_params.pop('pad'), - augment=hyper_params.pop('augment'), - training_data=training_data, - num_workers=resources_per_trial['cpu'], - height=model.height, - width=model.width, - channels=model.channels, - format_type='binary') - - callback = TuneReportCallback({'loss': 'CE'}, on='validation_end') - trainer = pl.Trainer(max_epochs=epochs, - gpus=1, - callbacks=[callback], - enable_progress_bar=False) - trainer.fit(model) - - -analysis = tune.run(partial(train_tune, training_data=sys.argv[2:]), - local_dir=sys.argv[1], - num_samples=100, - resources_per_trial=resources_per_trial, - config=config) - -print("Best hyperparameters found were: ", analysis.get_best_config(metric='accuracy', mode='max')) diff --git a/kraken/contrib/segmentation_overlay.py b/kraken/contrib/segmentation_overlay.py index 4a91081be..1d49621c4 100755 --- a/kraken/contrib/segmentation_overlay.py +++ b/kraken/contrib/segmentation_overlay.py @@ -46,8 +46,14 @@ def slugify(value): 'be ignored in `path` mode. Note, that this option will be slow ' 'and will not scale input images to the same size as the segmenter ' 'does.') +@click.option('-tl', '--topline', 'topline', show_default=True, flag_value='topline', + help='Switch for the baseline location in the scripts. ') +@click.option('-cl', '--centerline', 'topline', flag_value='centerline') +@click.option('-bl', '--baseline', 'topline', flag_value='baseline', default='baseline') +@click.option('--height-scale', default=1800, show_default=True, + help='Maximum height of input image in height dimension') @click.argument('files', nargs=-1) -def cli(model, text_direction, repolygonize, files): +def cli(model, text_direction, repolygonize, topline, height_scale, files): """ A script producing overlays of lines and regions from either ALTO or PageXML files or run a model to do the same. @@ -62,14 +68,23 @@ def cli(model, text_direction, repolygonize, files): from kraken import blla from kraken.lib import segmentation, vgsl, xml + loc = {'topline': True, + 'baseline': False, + 'centerline': None} + + topline = loc[topline] + if model is None: for doc in files: click.echo(f'Processing {doc} ', nl=False) - data = xml.XMLPage(doc) + data = xml.XMLPage(doc).to_container() if repolygonize: im = Image.open(data.imagename).convert('L') lines = data.lines - polygons = segmentation.calculate_polygonal_environment(im, [x.baseline for x in lines], scale=(1200, 0)) + polygons = segmentation.calculate_polygonal_environment(im, + [x.baseline for x in lines], + scale=(height_scale, 0), + topline=topline) data.lines = [dataclasses.replace(orig, boundary=polygon) for orig, polygon in zip(lines, polygons)] # reorder lines by type lines = defaultdict(list) diff --git a/kraken/ketos/__init__.py b/kraken/ketos/__init__.py index 9edb8d005..2d246ec41 100644 --- a/kraken/ketos/__init__.py +++ b/kraken/ketos/__init__.py @@ -36,11 +36,10 @@ from .segmentation import segtest, segtrain from .transcription import extract, transcription -APP_NAME = 'kraken' - logging.captureWarnings(True) logger = logging.getLogger('kraken') - +# disable annoying lightning worker seeding log messages +logging.getLogger("lightning.fabric.utilities.seed").setLevel(logging.ERROR) # install rich traceback handler install(suppress=[click]) @@ -60,10 +59,10 @@ def cli(ctx, verbose, seed, deterministic): ctx.meta['deterministic'] = False if not deterministic else 'warn' if seed: - from pytorch_lightning import seed_everything + from lightning.pytorch import seed_everything seed_everything(seed, workers=True) elif deterministic: - from pytorch_lightning import seed_everything + from lightning.pytorch import seed_everything seed_everything(42, workers=True) ctx.meta['verbose'] = verbose diff --git a/kraken/ketos/dataset.py b/kraken/ketos/dataset.py index a4df23400..af0feb394 100644 --- a/kraken/ketos/dataset.py +++ b/kraken/ketos/dataset.py @@ -55,9 +55,11 @@ help='Minimum number of records per RecordBatch written to the ' 'output file. Larger batches require more transient memory ' 'but slightly improve reading performance.') +@click.option('--legacy-polygons', show_default=True, default=False, is_flag=True, + help='Use the old polygon extractor.') @click.argument('ground_truth', nargs=-1, type=click.Path(exists=True, dir_okay=False)) def compile(ctx, output, workers, format_type, files, random_split, force_type, - save_splits, skip_empty_lines, recordbatch_size, ground_truth): + save_splits, skip_empty_lines, recordbatch_size, ground_truth, legacy_polygons): """ Precompiles a binary dataset from a collection of XML files. """ @@ -82,6 +84,11 @@ def compile(ctx, output, workers, format_type, files, random_split, force_type, with KrakenProgressBar() as progress: extract_task = progress.add_task('Extracting lines', total=0, start=False, visible=True if not ctx.meta['verbose'] else False) + def _update_bar(advance, total): + if not progress.tasks[0].started: + progress.start_task(extract_task) + progress.update(extract_task, total=total, advance=advance) + arrow_dataset.build_binary_dataset(ground_truth, output, format_type, @@ -91,6 +98,7 @@ def compile(ctx, output, workers, format_type, files, random_split, force_type, force_type, recordbatch_size, skip_empty_lines, - lambda advance, total: progress.update(extract_task, total=total, advance=advance)) + _update_bar, + legacy_polygons=legacy_polygons) message(f'Output file written to {output}') diff --git a/kraken/ketos/pretrain.py b/kraken/ketos/pretrain.py index a8c404dac..89fdd92c2 100644 --- a/kraken/ketos/pretrain.py +++ b/kraken/ketos/pretrain.py @@ -123,6 +123,10 @@ show_default=True, default=RECOGNITION_PRETRAIN_HYPER_PARAMS['cos_t_max'], help='Epoch of minimal learning rate for cosine LR scheduler.') +@click.option('--cos-min-lr', + show_default=True, + default=RECOGNITION_PRETRAIN_HYPER_PARAMS['cos_min_lr'], + help='Minimal final learning rate for cosine LR scheduler.') @click.option('-p', '--partition', show_default=True, default=0.9, help='Ground truth data partition ratio between train/validation set') @click.option('--fixed-splits/--ignore-fixed-splits', show_default=True, default=False, @@ -133,19 +137,10 @@ @click.option('-e', '--evaluation-files', show_default=True, default=None, multiple=True, callback=_validate_manifests, type=click.File(mode='r', lazy=True), help='File(s) with paths to evaluation data. Overrides the `-p` parameter') -@click.option('--workers', show_default=True, default=1, type=click.IntRange(1), help='Number of worker processes.') +@click.option('--workers', show_default=True, default=1, type=click.IntRange(0), help='Number of worker processes.') @click.option('--threads', show_default=True, default=1, type=click.IntRange(1), help='Maximum size of OpenMP/BLAS thread pool.') @click.option('--load-hyper-parameters/--no-load-hyper-parameters', show_default=True, default=False, help='When loading an existing model, retrieve hyperparameters from the model') -@click.option('--repolygonize/--no-repolygonize', show_default=True, - default=False, help='Repolygonizes line data in ALTO/PageXML ' - 'files. This ensures that the trained model is compatible with the ' - 'segmenter in kraken even if the original image files either do ' - 'not contain anything but transcriptions and baseline information ' - 'or the polygon data was created using a different method. Will ' - 'be ignored in `path` mode. Note that this option will be slow ' - 'and will not scale input images to the same size as the segmenter ' - 'does.') @click.option('--force-binarization/--no-binarization', show_default=True, default=False, help='Forces input images to be binary, otherwise ' 'the appropriate color format will be auto-determined through the ' @@ -179,14 +174,15 @@ default=RECOGNITION_PRETRAIN_HYPER_PARAMS['logit_temp'], help='Multiplicative factor for the logits used in contrastive loss.') @click.argument('ground_truth', nargs=-1, callback=_expand_gt, type=click.Path(exists=False, dir_okay=False)) +@click.option('--legacy-polygons', show_default=True, default=False, is_flag=True, help='Use the legacy polygon extractor.') def pretrain(ctx, batch_size, pad, output, spec, load, freq, quit, epochs, min_epochs, lag, min_delta, device, precision, optimizer, lrate, momentum, weight_decay, warmup, schedule, gamma, step_size, sched_patience, - cos_max, partition, fixed_splits, training_files, - evaluation_files, workers, threads, load_hyper_parameters, repolygonize, + cos_max, cos_min_lr, partition, fixed_splits, training_files, + evaluation_files, workers, threads, load_hyper_parameters, force_binarization, format_type, augment, mask_probability, mask_width, num_negatives, logit_temp, - ground_truth): + ground_truth, legacy_polygons): """ Trains a model from image-text pairs. """ @@ -226,6 +222,7 @@ def pretrain(ctx, batch_size, pad, output, spec, load, freq, quit, epochs, 'step_size': step_size, 'rop_patience': sched_patience, 'cos_t_max': cos_max, + 'cos_min_lr': cos_min_lr, 'augment': augment, 'mask_prob': mask_probability, 'mask_width': mask_width, @@ -258,7 +255,8 @@ def pretrain(ctx, batch_size, pad, output, spec, load, freq, quit, epochs, output=output, spec=spec, model=load, - load_hyper_parameters=load_hyper_parameters) + load_hyper_parameters=load_hyper_parameters, + legacy_polygons=legacy_polygons) data_module = PretrainDataModule(batch_size=hyper_params.pop('batch_size'), pad=hyper_params.pop('pad'), @@ -271,9 +269,9 @@ def pretrain(ctx, batch_size, pad, output, spec, load, freq, quit, epochs, height=model.height, width=model.width, channels=model.channels, - repolygonize=repolygonize, force_binarization=force_binarization, - format_type=format_type) + format_type=format_type, + legacy_polygons=legacy_polygons,) model.len_train_set = len(data_module.train_dataloader()) diff --git a/kraken/ketos/recognition.py b/kraken/ketos/recognition.py index 849408162..1296135c8 100644 --- a/kraken/ketos/recognition.py +++ b/kraken/ketos/recognition.py @@ -21,6 +21,8 @@ import logging import pathlib from typing import List +from functools import partial +import warnings import click from threadpoolctl import threadpool_limits @@ -125,6 +127,10 @@ show_default=True, default=RECOGNITION_HYPER_PARAMS['cos_t_max'], help='Epoch of minimal learning rate for cosine LR scheduler.') +@click.option('--cos-min-lr', + show_default=True, + default=RECOGNITION_HYPER_PARAMS['cos_min_lr'], + help='Minimal final learning rate for cosine LR scheduler.') @click.option('-p', '--partition', show_default=True, default=0.9, help='Ground truth data partition ratio between train/validation set') @click.option('--fixed-splits/--ignore-fixed-split', show_default=True, default=False, @@ -157,19 +163,10 @@ @click.option('-e', '--evaluation-files', show_default=True, default=None, multiple=True, callback=_validate_manifests, type=click.File(mode='r', lazy=True), help='File(s) with paths to evaluation data. Overrides the `-p` parameter') -@click.option('--workers', show_default=True, default=1, type=click.IntRange(1), help='Number of worker processes.') +@click.option('--workers', show_default=True, default=1, type=click.IntRange(0), help='Number of worker processes.') @click.option('--threads', show_default=True, default=1, type=click.IntRange(1), help='Maximum size of OpenMP/BLAS thread pool.') @click.option('--load-hyper-parameters/--no-load-hyper-parameters', show_default=True, default=False, help='When loading an existing model, retrieve hyperparameters from the model') -@click.option('--repolygonize/--no-repolygonize', show_default=True, - default=False, help='Repolygonizes line data in ALTO/PageXML ' - 'files. This ensures that the trained model is compatible with the ' - 'segmenter in kraken even if the original image files either do ' - 'not contain anything but transcriptions and baseline information ' - 'or the polygon data was created using a different method. Will ' - 'be ignored in `path` mode. Note that this option will be slow ' - 'and will not scale input images to the same size as the segmenter ' - 'does.') @click.option('--force-binarization/--no-binarization', show_default=True, default=False, help='Forces input images to be binary, otherwise ' 'the appropriate color format will be auto-determined through the ' @@ -190,14 +187,16 @@ @click.option('--log-dir', show_default=True, type=click.Path(exists=True, dir_okay=True, writable=True), help='Path to directory where the logger will store the logs. If not set, a directory will be created in the current working directory.') @click.argument('ground_truth', nargs=-1, callback=_expand_gt, type=click.Path(exists=False, dir_okay=False)) +@click.option('--legacy-polygons', show_default=True, default=False, is_flag=True, help='Use the legacy polygon extractor.') def train(ctx, batch_size, pad, output, spec, append, load, freq, quit, epochs, - min_epochs, lag, min_delta, device, precision, optimizer, lrate, momentum, - weight_decay, warmup, freeze_backbone, schedule, gamma, step_size, - sched_patience, cos_max, partition, fixed_splits, normalization, - normalize_whitespace, codec, resize, reorder, base_dir, - training_files, evaluation_files, workers, threads, load_hyper_parameters, - repolygonize, force_binarization, format_type, augment, - pl_logger, log_dir, ground_truth): + min_epochs, lag, min_delta, device, precision, optimizer, lrate, + momentum, weight_decay, warmup, freeze_backbone, schedule, gamma, + step_size, sched_patience, cos_max, cos_min_lr, partition, + fixed_splits, normalization, normalize_whitespace, codec, resize, + reorder, base_dir, training_files, evaluation_files, workers, + threads, load_hyper_parameters, force_binarization, + format_type, augment, pl_logger, log_dir, ground_truth, + legacy_polygons): """ Trains a model from image-text pairs. """ @@ -250,6 +249,7 @@ def train(ctx, batch_size, pad, output, spec, append, load, freq, quit, epochs, 'step_size': step_size, 'rop_patience': sched_patience, 'cos_t_max': cos_max, + 'cos_min_lr': cos_min_lr, 'normalization': normalization, 'normalize_whitespace': normalize_whitespace, 'augment': augment, @@ -296,11 +296,22 @@ def train(ctx, batch_size, pad, output, spec, append, load, freq, quit, epochs, binary_dataset_split=fixed_splits, num_workers=workers, load_hyper_parameters=load_hyper_parameters, - repolygonize=repolygonize, force_binarization=force_binarization, format_type=format_type, codec=codec, - resize=resize) + resize=resize, + legacy_polygons=legacy_polygons) + + # Force upgrade to new polygon extractor if model was not trained with it + if model.nn and model.nn.use_legacy_polygons: + if not legacy_polygons and not model.legacy_polygons: + # upgrade to new polygon extractor + logger.warning('The model will be flagged to use new polygon extractor.') + model.nn.use_legacy_polygons = False + if not model.nn and legacy_polygons != model.legacy_polygons: + logger.warning(f'Dataset was compiled with legacy polygon extractor: {model.legacy_polygons}, ' + f'the new model will be flagged to use {"legacy" if model.legacy_polygons else "new"} method.') + legacy_polygons = model.legacy_polygons trainer = KrakenTrainer(accelerator=accelerator, devices=device, @@ -349,7 +360,7 @@ def train(ctx, batch_size, pad, output, spec, append, load, freq, quit, epochs, @click.option('--pad', show_default=True, type=click.INT, default=16, help='Left and right ' 'padding around lines') @click.option('--workers', show_default=True, default=1, - type=click.IntRange(1), + type=click.IntRange(0), help='Number of worker processes when running on CPU.') @click.option('--threads', show_default=True, default=1, type=click.IntRange(1), @@ -364,15 +375,6 @@ def train(ctx, batch_size, pad, output, spec, append, load, freq, quit, epochs, default=None, help='Ground truth normalization') @click.option('-n', '--normalize-whitespace/--no-normalize-whitespace', show_default=True, default=True, help='Normalizes unicode whitespace') -@click.option('--repolygonize/--no-repolygonize', show_default=True, - default=False, help='Repolygonizes line data in ALTO/PageXML ' - 'files. This ensures that the trained model is compatible with the ' - 'segmenter in kraken even if the original image files either do ' - 'not contain anything but transcriptions and baseline information ' - 'or the polygon data was created using a different method. Will ' - 'be ignored in `path` mode. Note, that this option will be slow ' - 'and will not scale input images to the same size as the segmenter ' - 'does.') @click.option('--force-binarization/--no-binarization', show_default=True, default=False, help='Forces input images to be binary, otherwise ' 'the appropriate color format will be auto-determined through the ' @@ -387,9 +389,10 @@ def train(ctx, batch_size, pad, output, spec, append, load, freq, quit, epochs, @click.option('--fixed-splits/--ignore-fixed-split', show_default=True, default=False, help='Whether to honor fixed splits in binary datasets.') @click.argument('test_set', nargs=-1, callback=_expand_gt, type=click.Path(exists=False, dir_okay=False)) +@click.option('--no-legacy-polygons', show_default=True, default=False, is_flag=True, help='Force disable the legacy polygon extractor.') def test(ctx, batch_size, model, evaluation_files, device, pad, workers, threads, reorder, base_dir, normalization, normalize_whitespace, - repolygonize, force_binarization, format_type, fixed_splits, test_set): + force_binarization, format_type, fixed_splits, test_set, no_legacy_polygons): """ Evaluate on a test set. """ @@ -399,6 +402,8 @@ def test(ctx, batch_size, model, evaluation_files, device, pad, workers, import numpy as np from torch.utils.data import DataLoader + from torchmetrics.text import CharErrorRate, WordErrorRate + from kraken.lib import models, util from kraken.lib.dataset import (ArrowIPCRecognitionDataset, GroundTruthDataset, ImageInputTransforms, @@ -410,11 +415,28 @@ def test(ctx, batch_size, model, evaluation_files, device, pad, workers, logger.info('Building test set from {} line images'.format(len(test_set) + len(evaluation_files))) + legacy_polygons = None + incoherent_legacy_polygons = False + nn = {} for p in model: message('Loading model {}\t'.format(p), nl=False) nn[p] = models.load_any(p, device) message('\u2713', fg='green') + model_legacy_polygons = nn[p].nn.use_legacy_polygons + if legacy_polygons is None: + legacy_polygons = model_legacy_polygons + elif legacy_polygons != model_legacy_polygons: + incoherent_legacy_polygons = True + + if incoherent_legacy_polygons and not no_legacy_polygons: + logger.warning('Models use different polygon extractors. Legacy polygon extractor will be used ; use --no-legacy-polygons to force disable it.') + legacy_polygons = True + elif no_legacy_polygons: + legacy_polygons = False + + if legacy_polygons: + warnings.warn('Using legacy polygon extractor, as the model was not trained with the new method. Please retrain your model to get performance improvements.') pin_ds_mem = False if device != 'cpu': @@ -436,15 +458,11 @@ def test(ctx, batch_size, model, evaluation_files, device, pad, workers, dataset_kwargs["split_filter"] = "test" if format_type in ['xml', 'page', 'alto']: - if repolygonize: - message('Repolygonizing data') test_set = [{'page': XMLPage(file, filetype=format_type).to_container()} for file in test_set] valid_norm = False - DatasetClass = PolygonGTDataset + DatasetClass = partial(PolygonGTDataset, legacy_polygons=legacy_polygons) elif format_type == 'binary': DatasetClass = ArrowIPCRecognitionDataset - if repolygonize: - logger.warning('Repolygonization enabled in `binary` mode. Will be ignored.') test_set = [{'file': file} for file in test_set] valid_norm = False else: @@ -452,8 +470,6 @@ def test(ctx, batch_size, model, evaluation_files, device, pad, workers, if force_binarization: logger.warning('Forced binarization enabled in `path` mode. Will be ignored.') force_binarization = False - if repolygonize: - logger.warning('Repolygonization enabled in `path` mode. Will be ignored.') test_set = [{'line': util.parse_gt_path(img)} for img in test_set] valid_norm = True @@ -463,7 +479,8 @@ def test(ctx, batch_size, model, evaluation_files, device, pad, workers, if reorder and base_dir != 'auto': reorder = base_dir - acc_list = [] + cer_list = [] + wer_list = [] with threadpool_limits(limits=threads): for p, net in nn.items(): @@ -485,6 +502,13 @@ def test(ctx, batch_size, model, evaluation_files, device, pad, workers, ds.add(**line) except ValueError as e: logger.info(e) + + if hasattr(ds, 'legacy_polygon_status'): + if ds.legacy_polygons_status != legacy_polygons: + warnings.warn( + f'Binary dataset was compiled with legacy polygon extractor: {ds.legacy_polygon_status}, ' + f'while expecting data extracted with {"legacy" if legacy_polygons else "new"} method. Results may be inaccurate.') + # don't encode validation set as the alphabets may not match causing encoding failures ds.no_encode() ds_loader = DataLoader(ds, @@ -493,6 +517,9 @@ def test(ctx, batch_size, model, evaluation_files, device, pad, workers, pin_memory=pin_ds_mem, collate_fn=collate_sequences) + test_cer = CharErrorRate() + test_wer = WordErrorRate() + with KrakenProgressBar() as progress: batches = len(ds_loader) pred_task = progress.add_task('Evaluating', total=batches, visible=True if not ctx.meta['verbose'] else False) @@ -509,6 +536,9 @@ def test(ctx, batch_size, model, evaluation_files, device, pad, workers, algn_gt.extend(algn1) algn_pred.extend(algn2) error += c + test_cer.update(x, y) + test_wer.update(x, y) + except FileNotFoundError as e: batches -= 1 progress.update(pred_task, total=batches) @@ -519,10 +549,23 @@ def test(ctx, batch_size, model, evaluation_files, device, pad, workers, logger.warning(str(e)) progress.update(pred_task, advance=1) - acc_list.append((chars - error) / chars) + cer_list.append(1.0 - test_cer.compute()) + wer_list.append(1.0 - test_wer.compute()) confusions, scripts, ins, dels, subs = compute_confusions(algn_gt, algn_pred) - rep = render_report(p, chars, error, confusions, scripts, ins, dels, subs) + rep = render_report(p, + chars, + error, + cer_list[-1], + wer_list[-1], + confusions, + scripts, + ins, + dels, + subs) logger.info(rep) message(rep) - logger.info('Average accuracy: {:0.2f}%, (stddev: {:0.2f})'.format(np.mean(acc_list) * 100, np.std(acc_list) * 100)) - message('Average accuracy: {:0.2f}%, (stddev: {:0.2f})'.format(np.mean(acc_list) * 100, np.std(acc_list) * 100)) + + logger.info('Average character accuracy: {:0.2f}%, (stddev: {:0.2f})'.format(np.mean(cer_list) * 100, np.std(cer_list) * 100)) + message('Average character accuracy: {:0.2f}%, (stddev: {:0.2f})'.format(np.mean(cer_list) * 100, np.std(cer_list) * 100)) + logger.info('Average word accuracy: {:0.2f}%, (stddev: {:0.2f})'.format(np.mean(wer_list) * 100, np.std(wer_list) * 100)) + message('Average word accuracy: {:0.2f}%, (stddev: {:0.2f})'.format(np.mean(wer_list) * 100, np.std(wer_list) * 100)) diff --git a/kraken/ketos/ro.py b/kraken/ketos/ro.py index 9ff26d57e..055d86d29 100644 --- a/kraken/ketos/ro.py +++ b/kraken/ketos/ro.py @@ -115,6 +115,10 @@ show_default=True, default=READING_ORDER_HYPER_PARAMS['cos_t_max'], help='Epoch of minimal learning rate for cosine LR scheduler.') +@click.option('--cos-min-lr', + show_default=True, + default=READING_ORDER_HYPER_PARAMS['cos_min_lr'], + help='Minimal final learning rate for cosine LR scheduler.') @click.option('-p', '--partition', show_default=True, default=0.9, help='Ground truth data partition ratio between train/validation set') @click.option('-t', '--training-files', show_default=True, default=None, multiple=True, @@ -123,7 +127,7 @@ @click.option('-e', '--evaluation-files', show_default=True, default=None, multiple=True, callback=_validate_manifests, type=click.File(mode='r', lazy=True), help='File(s) with paths to evaluation data. Overrides the `-p` parameter') -@click.option('--workers', show_default=True, default=1, type=click.IntRange(1), help='Number of worker proesses.') +@click.option('--workers', show_default=True, default=1, type=click.IntRange(0), help='Number of worker proesses.') @click.option('--threads', show_default=True, default=1, type=click.IntRange(1), help='Maximum size of OpenMP/BLAS thread pool.') @click.option('--load-hyper-parameters/--no-load-hyper-parameters', show_default=True, default=False, help='When loading an existing model, retrieve hyper-parameters from the model') @@ -143,9 +147,9 @@ def rotrain(ctx, batch_size, output, load, freq, quit, epochs, min_epochs, lag, min_delta, device, precision, optimizer, lrate, momentum, weight_decay, warmup, schedule, gamma, step_size, sched_patience, - cos_max, partition, training_files, evaluation_files, workers, - threads, load_hyper_parameters, format_type, pl_logger, log_dir, - level, reading_order, ground_truth): + cos_max, cos_min_lr, partition, training_files, evaluation_files, + workers, threads, load_hyper_parameters, format_type, pl_logger, + log_dir, level, reading_order, ground_truth): """ Trains a baseline labeling model for layout analysis """ @@ -189,6 +193,7 @@ def rotrain(ctx, batch_size, output, load, freq, quit, epochs, min_epochs, lag, 'step_size': step_size, 'rop_patience': sched_patience, 'cos_t_max': cos_max, + 'cos_min_lr': cos_min_lr, 'pl_logger': pl_logger, } ) diff --git a/kraken/ketos/segmentation.py b/kraken/ketos/segmentation.py index 4d6cdfaeb..a98a4f667 100644 --- a/kraken/ketos/segmentation.py +++ b/kraken/ketos/segmentation.py @@ -151,6 +151,10 @@ def _validate_merging(ctx, param, value): show_default=True, default=SEGMENTATION_HYPER_PARAMS['cos_t_max'], help='Epoch of minimal learning rate for cosine LR scheduler.') +@click.option('--cos-min-lr', + show_default=True, + default=SEGMENTATION_HYPER_PARAMS['cos_min_lr'], + help='Minimal final learning rate for cosine LR scheduler.') @click.option('-p', '--partition', show_default=True, default=0.9, help='Ground truth data partition ratio between train/validation set') @click.option('-t', '--training-files', show_default=True, default=None, multiple=True, @@ -159,7 +163,7 @@ def _validate_merging(ctx, param, value): @click.option('-e', '--evaluation-files', show_default=True, default=None, multiple=True, callback=_validate_manifests, type=click.File(mode='r', lazy=True), help='File(s) with paths to evaluation data. Overrides the `-p` parameter') -@click.option('--workers', show_default=True, default=1, type=click.IntRange(1), help='Number of worker proesses.') +@click.option('--workers', show_default=True, default=1, type=click.IntRange(0), help='Number of worker proesses.') @click.option('--threads', show_default=True, default=1, type=click.IntRange(1), help='Maximum size of OpenMP/BLAS thread pool.') @click.option('--load-hyper-parameters/--no-load-hyper-parameters', show_default=True, default=False, help='When loading an existing model, retrieve hyper-parameters from the model') @@ -226,12 +230,12 @@ def _validate_merging(ctx, param, value): def segtrain(ctx, output, spec, line_width, pad, load, freq, quit, epochs, min_epochs, lag, min_delta, device, precision, optimizer, lrate, momentum, weight_decay, warmup, schedule, gamma, step_size, - sched_patience, cos_max, partition, training_files, + sched_patience, cos_max, cos_min_lr, partition, training_files, evaluation_files, workers, threads, load_hyper_parameters, force_binarization, format_type, suppress_regions, suppress_baselines, valid_regions, valid_baselines, merge_regions, - merge_baselines, bounding_regions, - augment, resize, topline, pl_logger, log_dir, ground_truth): + merge_baselines, bounding_regions, augment, resize, topline, + pl_logger, log_dir, ground_truth): """ Trains a baseline labeling model for layout analysis """ @@ -285,6 +289,7 @@ def segtrain(ctx, output, spec, line_width, pad, load, freq, quit, epochs, 'step_size': step_size, 'rop_patience': sched_patience, 'cos_t_max': cos_max, + 'cos_min_lr': cos_min_lr, }) # disable automatic partition when given evaluation set explicitly @@ -382,7 +387,7 @@ def segtrain(ctx, output, spec, line_width, pad, load, freq, quit, epochs, callback=_validate_manifests, type=click.File(mode='r', lazy=True), help='File(s) with paths to evaluation data.') @click.option('-d', '--device', show_default=True, default='cpu', help='Select device to use (cpu, cuda:0, cuda:1, ...)') -@click.option('--workers', default=1, show_default=True, type=click.IntRange(1), +@click.option('--workers', default=1, show_default=True, type=click.IntRange(0), help='Number of worker processes for data loading.') @click.option('--threads', default=1, show_default=True, type=click.IntRange(1), help='Size of thread pools for intra-op parallelization') diff --git a/kraken/kraken.py b/kraken/kraken.py index fc5d65faa..22429d05d 100644 --- a/kraken/kraken.py +++ b/kraken/kraken.py @@ -21,6 +21,7 @@ import dataclasses import logging import os +import uuid import shlex import warnings from functools import partial @@ -162,12 +163,11 @@ def segmenter(legacy, model, text_direction, scale, maxcolseps, black_colseps, fp = cast('IO[Any]', fp) logger.info('Serializing as {} into {}'.format(ctx.meta['output_mode'], output)) from kraken import serialization - fp.write(serialization.serialize_segmentation(res, - image_name=ctx.meta['base_image'], - image_size=im.size, - template=ctx.meta['output_template'], - template_source='custom' if ctx.meta['output_mode'] == 'template' else 'native', - processing_steps=ctx.meta['steps'])) + fp.write(serialization.serialize(res, + image_size=im.size, + template=ctx.meta['output_template'], + template_source='custom' if ctx.meta['output_mode'] == 'template' else 'native', + processing_steps=ctx.meta['steps'])) else: with click.open_file(output, 'w') as fp: fp = cast('IO[Any]', fp) @@ -179,7 +179,6 @@ def recognizer(model, pad, no_segmentation, bidi_reordering, tags_ignore, input, import dataclasses import json - import uuid from kraken import rpred from kraken.containers import BBoxLine, Segmentation @@ -215,8 +214,10 @@ def recognizer(model, pad, no_segmentation, bidi_reordering, tags_ignore, input, if no_segmentation: bounds = Segmentation(type='bbox', text_direction='horizontal-lr', - lines=[BBoxLine(id=uuid.uuid4(), - bbox=((0, 0), (0, im.size[1]), im.size, (im.size[0], 0)))]) + imagename=ctx.meta['base_image'], + script_detection=False, + lines=[BBoxLine(id=str(uuid.uuid4()), + bbox=(0, 0, im.size[1], im.size[0]))]) else: raise click.UsageError('No line segmentation given. Add one with the input or run `segment` first.') elif no_segmentation: @@ -227,10 +228,12 @@ def recognizer(model, pad, no_segmentation, bidi_reordering, tags_ignore, input, if bounds.script_detection: it = rpred.mm_rpred(model, im, bounds, pad, bidi_reordering=bidi_reordering, - tags_ignore=tags_ignore) + tags_ignore=tags_ignore, + no_legacy_polygons=ctx.meta['no_legacy_polygons']) else: it = rpred.rpred(model['default'], im, bounds, pad, - bidi_reordering=bidi_reordering) + bidi_reordering=bidi_reordering, + no_legacy_polygons=ctx.meta['no_legacy_polygons']) preds = [] @@ -302,8 +305,10 @@ def recognizer(model, pad, no_segmentation, bidi_reordering, tags_ignore, input, help='On compatible devices, uses autocast for `segment` which lower the memory usage.') @click.option('--threads', default=1, show_default=True, type=click.IntRange(1), help='Size of thread pools for intra-op parallelization') +@click.option('--no-legacy-polygons', 'no_legacy_polygons', is_flag=True, default=False, + help="Force disable legacy polygon extraction") def cli(input, batch_input, suffix, verbose, format_type, pdf_format, - serializer, template, device, raise_on_error, autocast, threads): + serializer, template, device, raise_on_error, autocast, threads, no_legacy_polygons): """ Base command for recognition functionality. @@ -334,6 +339,8 @@ def cli(input, batch_input, suffix, verbose, format_type, pdf_format, ctx.meta['steps'] = [] ctx.meta["autocast"] = autocast ctx.meta['threads'] = threads + ctx.meta['no_legacy_polygons'] = no_legacy_polygons + log.set_logger(logger, level=30 - min(10 * verbose, 20)) @@ -345,10 +352,10 @@ def process_pipeline(subcommands, input, batch_input, suffix, verbose, format_ty """ import glob import tempfile - import uuid from threadpoolctl import threadpool_limits + from kraken.containers import ProcessingStep from kraken.lib.progress import KrakenProgressBar ctx = click.get_current_context() @@ -399,7 +406,10 @@ def process_pipeline(subcommands, input, batch_input, suffix, verbose, format_ty progress.update(pdf_parse_task, total=num_pages) logger.warning(f'{fpath} is not a PDF file. Skipping.') input = new_input - ctx.meta['steps'].insert(0, {'category': 'preprocessing', 'description': 'PDF image extraction', 'settings': {}}) + ctx.meta['steps'].insert(0, ProcessingStep(id=str(uuid.uuid4()), + category='preprocessing', + description='PDF image extraction', + settings={})) for io_pair in input: ctx.meta['first_process'] = True @@ -444,16 +454,19 @@ def binarize(ctx, threshold, zoom, escale, border, perc, range, low, high): """ Binarizes page images. """ - ctx.meta['steps'].append({'category': 'preprocessing', - 'description': 'Image binarization', - 'settings': {'threshold': threshold, - 'zoom': zoom, - 'escale': escale, - 'border': border, - 'perc': perc, - 'range': range, - 'low': low, - 'high': high}}) + from kraken.containers import ProcessingStep + + ctx.meta['steps'].append(ProcessingStep(id=str(uuid.uuid4()), + category='preprocessing', + description='Image binarization', + settings={'threshold': threshold, + 'zoom': zoom, + 'escale': escale, + 'border': border, + 'perc': perc, + 'range': range, + 'low': low, + 'high': high})) return partial(binarizer, threshold, zoom, escale, border, perc, range, low, high) @@ -486,6 +499,8 @@ def segment(ctx, model, boxes, text_direction, scale, maxcolseps, """ Segments page images into text lines. """ + from kraken.containers import ProcessingStep + if model and boxes: logger.warning(f'Baseline model ({model}) given but legacy segmenter selected. Forcing to -bl.') boxes = False @@ -493,10 +508,11 @@ def segment(ctx, model, boxes, text_direction, scale, maxcolseps, if boxes is False: if not model: model = SEGMENTATION_DEFAULT_MODEL - ctx.meta['steps'].append({'category': 'processing', - 'description': 'Baseline and region segmentation', - 'settings': {'model': os.path.basename(model), - 'text_direction': text_direction}}) + ctx.meta['steps'].append(ProcessingStep(id=str(uuid.uuid4()), + category='processing', + description='Baseline and region segmentation', + settings={'model': os.path.basename(model), + 'text_direction': text_direction})) # first try to find the segmentation model by its given name, # then look in the kraken config folder @@ -522,14 +538,15 @@ def segment(ctx, model, boxes, text_direction, scale, maxcolseps, message('\u2713', fg='green') else: - ctx.meta['steps'].append({'category': 'processing', - 'description': 'bounding box segmentation', - 'settings': {'text_direction': text_direction, - 'scale': scale, - 'maxcolseps': maxcolseps, - 'black_colseps': black_colseps, - 'remove_hlines': remove_hlines, - 'pad': pad}}) + ctx.meta['steps'].append(ProcessingStep(id=str(uuid.uuid4()), + category='processing', + description='bounding box segmentation', + settings={'text_direction': text_direction, + 'scale': scale, + 'maxcolseps': maxcolseps, + 'black_colseps': black_colseps, + 'remove_hlines': remove_hlines, + 'pad': pad})) return partial(segmenter, boxes, model, text_direction, scale, maxcolseps, black_colseps, remove_hlines, pad, mask, ctx.meta['device']) @@ -594,6 +611,8 @@ def ocr(ctx, model, pad, reorder, base_dir, no_segmentation, text_direction): """ from kraken.lib import models + from kraken.containers import ProcessingStep + if ctx.meta['input_format_type'] != 'image' and no_segmentation: raise click.BadParameter('no_segmentation mode is incompatible with page/alto inputs') @@ -631,12 +650,13 @@ def ocr(ctx, model, pad, reorder, base_dir, no_segmentation, text_direction): nn.update(nm) nm = nn - ctx.meta['steps'].append({'category': 'processing', - 'description': 'Text line recognition', - 'settings': {'text_direction': text_direction, - 'models': ' '.join(os.path.basename(v) for v in model.values()), - 'pad': pad, - 'bidi_reordering': reorder}}) + ctx.meta['steps'].append(ProcessingStep(id=str(uuid.uuid4()), + category='processing', + description='Text line recognition', + settings={'text_direction': text_direction, + 'models': ' '.join(os.path.basename(v) for v in model.values()), + 'pad': pad, + 'bidi_reordering': reorder})) # set output mode ctx.meta['text_direction'] = text_direction diff --git a/kraken/lib/arrow_dataset.py b/kraken/lib/arrow_dataset.py old mode 100755 new mode 100644 index c9159a916..310cd0fe0 --- a/kraken/lib/arrow_dataset.py +++ b/kraken/lib/arrow_dataset.py @@ -23,7 +23,7 @@ from collections import Counter from functools import partial from multiprocessing import Pool -from typing import TYPE_CHECKING, Callable, Dict, List, Optional, Tuple, Union +from typing import TYPE_CHECKING, Literal, Callable, List, Optional, Tuple, Union import numpy as np import pyarrow as pa @@ -44,7 +44,7 @@ logger = logging.getLogger(__name__) -def _extract_line(xml_record, skip_empty_lines: bool = True): +def _extract_line(xml_record, skip_empty_lines: bool = True, legacy_polygons: bool = False): lines = [] try: im = Image.open(xml_record.imagename) @@ -52,8 +52,7 @@ def _extract_line(xml_record, skip_empty_lines: bool = True): return lines, None, None if is_bitonal(im): im = im.convert('1') - recs = xml_record.lines.values() - for idx, rec in enumerate(recs): + for idx, rec in enumerate(xml_record.lines): seg = Segmentation(text_direction='horizontal-lr', imagename=xml_record.imagename, type=xml_record.type, @@ -62,12 +61,12 @@ def _extract_line(xml_record, skip_empty_lines: bool = True): script_detection=False, line_orders=[]) try: - line_im, line = next(extract_polygons(im, seg)) + line_im, line = next(extract_polygons(im, seg, legacy=legacy_polygons)) except KrakenInputException: - logger.warning(f'Invalid line {idx} in {im.filename}') + logger.warning(f'Invalid line {idx} in {xml_record.imagename}') continue except Exception as e: - logger.warning(f'Unexpected exception {e} from line {idx} in {im.filename}') + logger.warning(f'Unexpected exception {e} from line {idx} in {xml_record.imagename}') continue if not line.text and skip_empty_lines: continue @@ -104,27 +103,27 @@ def parse_path(path: Union[str, 'PathLike'], return {'image': path, 'lines': [{'text': gt}]} -def build_binary_dataset(files: Optional[List[Union[str, 'PathLike', Dict]]] = None, +def build_binary_dataset(files: Optional[List[Union[str, 'PathLike', 'Segmentation']]] = None, output_file: Union[str, 'PathLike'] = None, - format_type: str = 'xml', + format_type: Literal['xml', 'alto', 'page', None] = 'xml', num_workers: int = 0, ignore_splits: bool = False, random_split: Optional[Tuple[float, float, float]] = None, force_type: Optional[str] = None, recordbatch_size: int = 100, skip_empty_lines: bool = True, - callback: Callable[[int, int], None] = lambda chunk, lines: None) -> None: + callback: Callable[[int, int], None] = lambda chunk, lines: None, + legacy_polygons: bool = False) -> None: """ Parses XML files and dumps the baseline-style line images and text into a binary dataset. Args: - files: List of XML input files. + files: List of XML input files or Segmentation container objects. output_file: Path to the output file. format_type: One of `xml`, `alto`, `page`, `path`, or None. In `None` mode, the files argument is expected to be a list of - dictionaries in the output format of the - `kraken.lib.xml.parse_{alto,page,xml}` functions. + `kraken.containers.Segmentation` objects. num_workers: Number of workers for parallelized extraction of line images. Set to `0` to disable parallelism. ignore_splits: Switch to disable serialization of the explicit @@ -141,10 +140,11 @@ def build_binary_dataset(files: Optional[List[Union[str, 'PathLike', Dict]]] = N skip_empty_lines: Do not compile empty text lines into the dataset. callback: Function called every time a new recordbatch is flushed into the Arrow IPC file. + legacy_polygons: Use legacy polygon extraction code. """ logger.info('Parsing XML files') - extract_fn = partial(_extract_line, skip_empty_lines=skip_empty_lines) + extract_fn = partial(_extract_line, skip_empty_lines=skip_empty_lines, legacy_polygons=legacy_polygons) parse_fn = None if format_type in ['xml', 'alto', 'page']: parse_fn = XMLPage @@ -166,6 +166,8 @@ def build_binary_dataset(files: Optional[List[Union[str, 'PathLike', Dict]]] = N for doc in files: try: data = parse_fn(doc) + if format_type in ['xml', 'alto', 'page']: + data = data.to_container() except (FileNotFoundError, KrakenInputException, ValueError): logger.warning(f'Invalid input file {doc}') continue @@ -189,13 +191,13 @@ def build_binary_dataset(files: Optional[List[Union[str, 'PathLike', Dict]]] = N alphabet = Counter() num_lines = 0 for doc in docs: - if format_type in ['xml', 'alto', 'page']: - lines = doc.lines.values() - else: + if format_type in ['xml', 'alto', 'page', None]: + lines = doc.lines + elif format_type == 'path': lines = doc['lines'] for line in lines: num_lines += 1 - alphabet.update(line.text if format_type in ['xml', 'alto', 'page'] else line['text']) + alphabet.update(line.text if format_type in ['xml', 'alto', 'page', None] else line['text']) callback(0, num_lines) @@ -216,6 +218,7 @@ def build_binary_dataset(files: Optional[List[Union[str, 'PathLike', Dict]]] = N 'image_type': 'raw', 'splits': ['train', 'eval', 'test'], 'im_mode': '1', + 'legacy_polygons': legacy_polygons, 'counts': Counter({'all': 0, 'train': 0, 'validation': 0, @@ -309,6 +312,7 @@ def _make_record_batch(line_cache): f"image_type: {metadata['lines']['image_type']}\n" f"splits: {metadata['lines']['splits']}\n" f"im_mode: {metadata['lines']['im_mode']}\n" + f"legacy_polygons: {metadata['lines']['legacy_polygons']}\n" f"lines: {metadata['lines']['counts']}\n") with pa.memory_map(tmp_file, 'rb') as source: diff --git a/kraken/lib/dataset/recognition.py b/kraken/lib/dataset/recognition.py index a80f6cd89..75a3bb9a8 100644 --- a/kraken/lib/dataset/recognition.py +++ b/kraken/lib/dataset/recognition.py @@ -15,21 +15,24 @@ """ Utility functions for data loading and training of VGSL networks. """ -import dataclasses import io import json +import torch +import numpy as np +import pyarrow as pa import traceback +import dataclasses +import multiprocessing as mp + from collections import Counter from functools import partial from typing import (TYPE_CHECKING, Any, Callable, List, Literal, Optional, Tuple, Union) -import numpy as np -import pyarrow as pa -import torch from PIL import Image -from torch.utils.data import Dataset +from ctypes import c_char from torchvision import transforms +from torch.utils.data import Dataset from kraken.containers import BaselineLine, BBoxLine, Segmentation from kraken.lib import functional_im_transforms as F_t @@ -121,6 +124,7 @@ def __init__(self, self.arrow_table = None self.codec = None self.skip_empty_lines = skip_empty_lines + self.legacy_polygons_status = None self.seg_type = None # built text transformations @@ -174,6 +178,12 @@ def add(self, file: Union[str, 'PathLike']) -> None: if self.seg_type == 'bbox' and metadata['image_type'] == 'raw': self.transforms.valid_norm = True + legacy_polygons = metadata.get('legacy_polygons', True) + if self.legacy_polygons_status is None: + self.legacy_polygons_status = legacy_polygons + elif self.legacy_polygons_status != legacy_polygons: + self.legacy_polygons_status = "mixed" + self.alphabet.update(metadata['alphabet']) num_lines = metadata['counts'][self._split_filter] if self._split_filter else metadata['counts']['all'] if self._split_filter: @@ -284,7 +294,8 @@ def __init__(self, skip_empty_lines: bool = True, reorder: Union[bool, Literal['L', 'R']] = True, im_transforms: Callable[[Any], torch.Tensor] = transforms.Compose([]), - augmentation: bool = False) -> None: + augmentation: bool = False, + legacy_polygons: bool = False) -> None: """ Creates a dataset for a polygonal (baseline) transcription model. @@ -307,6 +318,7 @@ def __init__(self, self.aug = None self.skip_empty_lines = skip_empty_lines self.failed_samples = set() + self.legacy_polygons = legacy_polygons self.seg_type = 'baselines' # built text transformations @@ -322,7 +334,7 @@ def __init__(self, if augmentation: self.aug = DefaultAugmenter() - self.im_mode = '1' + self._im_mode = mp.Value(c_char, b'1') def add(self, line: Optional[BaselineLine] = None, @@ -424,19 +436,20 @@ def __getitem__(self, index: int) -> Tuple[torch.Tensor, torch.Tensor]: boundary=item[0][2])], script_detection=True, regions={}, - line_orders=[]) - )) + line_orders=[]), + legacy=self.legacy_polygons)) im = self.transforms(im) if im.shape[0] == 3: - im_mode = 'RGB' + im_mode = b'R' elif im.shape[0] == 1: - im_mode = 'L' + im_mode = b'L' if is_bitonal(im): - im_mode = '1' + im_mode = b'1' - if im_mode > self.im_mode: - logger.info(f'Upgrading "im_mode" from {self.im_mode} to {im_mode}') - self.im_mode = im_mode + with self._im_mode.get_lock(): + if im_mode > self._im_mode.value: + logger.info(f'Upgrading "im_mode" from {self._im_mode.value} to {im_mode}') + self._im_mode.value = im_mode if self.aug: im = im.permute((1, 2, 0)).numpy() o = self.aug(image=im) @@ -452,6 +465,12 @@ def __getitem__(self, index: int) -> Tuple[torch.Tensor, torch.Tensor]: def __len__(self) -> int: return len(self._images) + @property + def im_mode(self): + return {b'1': '1', + b'L': 'L', + b'R': 'RGB'}[self._im_mode.value] + class GroundTruthDataset(Dataset): """ @@ -511,7 +530,7 @@ def __init__(self, if augmentation: self.aug = DefaultAugmenter() - self.im_mode = '1' + self._im_mode = mp.Value(c_char, b'1') def add(self, line: Optional[BBoxLine] = None, @@ -607,14 +626,15 @@ def __getitem__(self, index: int) -> Tuple[torch.Tensor, torch.Tensor]: im = im.crop((xmin, ymin, xmax, ymax)) im = self.transforms(im) if im.shape[0] == 3: - im_mode = 'RGB' + im_mode = b'R' elif im.shape[0] == 1: - im_mode = 'L' + im_mode = b'L' if is_bitonal(im): - im_mode = '1' - if im_mode > self.im_mode: - logger.info(f'Upgrading "im_mode" from {self.im_mode} to {im_mode}') - self.im_mode = im_mode + im_mode = b'1' + with self._im_mode.get_lock(): + if im_mode > self._im_mode.value: + logger.info(f'Upgrading "im_mode" from {self._im_mode.value} to {im_mode}') + self._im_mode.value = im_mode if self.aug: im = im.permute((1, 2, 0)).numpy() o = self.aug(image=im) @@ -630,3 +650,9 @@ def __getitem__(self, index: int) -> Tuple[torch.Tensor, torch.Tensor]: def __len__(self) -> int: return len(self._images) + + @property + def im_mode(self): + return {b'1': '1', + b'L': 'L', + b'R': 'RGB'}[self._im_mode.value] diff --git a/kraken/lib/dataset/segmentation.py b/kraken/lib/dataset/segmentation.py index b52fe7ddc..a9f962226 100644 --- a/kraken/lib/dataset/segmentation.py +++ b/kraken/lib/dataset/segmentation.py @@ -165,7 +165,6 @@ def __getitem__(self, idx): im, target = self.transform(im, target) return {'image': im, 'target': target} except Exception: - raise self.failed_samples.add(idx) idx = np.random.randint(0, len(self.imgs)) logger.debug(traceback.format_exc()) diff --git a/kraken/lib/default_specs.py b/kraken/lib/default_specs.py index af08fd1e5..aab5a3e78 100644 --- a/kraken/lib/default_specs.py +++ b/kraken/lib/default_specs.py @@ -40,6 +40,7 @@ 'rop_patience': 5, # cosine 'cos_t_max': 100, + 'cos_min_lr': 0.001, 'warmup': 0, } @@ -67,6 +68,7 @@ 'rop_patience': 5, # cosine 'cos_t_max': 100, + 'cos_min_lr': 1e-7, # masking parameters 'mask_width': 4, 'mask_prob': 0.5, @@ -101,6 +103,7 @@ 'rop_patience': 5, # cosine 'cos_t_max': 50, + 'cos_min_lr': 1e-4, 'warmup': 0, 'freeze_backbone': 0, } @@ -129,5 +132,6 @@ 'rop_patience': 5, # cosine 'cos_t_max': 50, + 'cos_min_lr': 2e-5, 'warmup': 0, } diff --git a/kraken/lib/models.py b/kraken/lib/models.py index fbc1c32bb..4ec8daa62 100644 --- a/kraken/lib/models.py +++ b/kraken/lib/models.py @@ -109,7 +109,7 @@ def forward(self, line: torch.Tensor, lens: torch.Tensor = None) -> Union[np.nda o, olens = self.nn.nn(line, lens) if o.size(2) != 1: raise KrakenInputException('Expected dimension 3 to be 1, actual {}'.format(o.size())) - self.outputs = o.detach().squeeze(2).cpu().numpy() + self.outputs = o.detach().squeeze(2).float().cpu().numpy() if olens is not None: olens = olens.cpu().numpy() return self.outputs, olens diff --git a/kraken/lib/pretrain/model.py b/kraken/lib/pretrain/model.py index 4685e1851..97b220751 100644 --- a/kraken/lib/pretrain/model.py +++ b/kraken/lib/pretrain/model.py @@ -32,14 +32,15 @@ import math import re from itertools import chain +from functools import partial from typing import TYPE_CHECKING, Any, Dict, Optional, Sequence, Union import numpy as np -import pytorch_lightning as pl +import lightning as L import torch import torch.nn.functional as F -from pytorch_lightning.callbacks import EarlyStopping -from pytorch_lightning.utilities.memory import (garbage_collection_cuda, +from lightning.pytorch.callbacks import EarlyStopping +from lightning.pytorch.utilities.memory import (garbage_collection_cuda, is_oom_error) from torch.optim import lr_scheduler from torch.utils.data import DataLoader, Subset, random_split @@ -72,7 +73,7 @@ def _star_fun(fun, kwargs): return None -class PretrainDataModule(pl.LightningDataModule): +class PretrainDataModule(L.LightningDataModule): def __init__(self, training_data: Union[Sequence[Union['PathLike', str]], Sequence[Dict[str, Any]]] = None, evaluation_data: Optional[Union[Sequence[Union['PathLike', str]], Sequence[Dict[str, Any]]]] = None, @@ -83,11 +84,11 @@ def __init__(self, width: int = 0, channels: int = 1, num_workers: int = 1, - repolygonize: bool = False, force_binarization: bool = False, format_type: str = 'path', pad: int = 16, - augment: bool = default_specs.RECOGNITION_PRETRAIN_HYPER_PARAMS['augment']): + augment: bool = default_specs.RECOGNITION_PRETRAIN_HYPER_PARAMS['augment'], + legacy_polygons: bool = False): """ A LightningDataModule encapsulating text-less training data for unsupervised recognition model pretraining. @@ -106,6 +107,8 @@ def __init__(self, super().__init__() self.save_hyperparameters() + self.legacy_polygons = legacy_polygons + DatasetClass = GroundTruthDataset valid_norm = True if format_type in ['xml', 'page', 'alto']: @@ -117,12 +120,10 @@ def __init__(self, if binary_dataset_split: logger.warning('Internal binary dataset splits are enabled but using non-binary dataset files. Will be ignored.') binary_dataset_split = False - DatasetClass = PolygonGTDataset + DatasetClass = partial(PolygonGTDataset, legacy_polygons=legacy_polygons) valid_norm = False elif format_type == 'binary': DatasetClass = ArrowIPCRecognitionDataset - if repolygonize: - logger.warning('Repolygonization enabled in `binary` mode. Will be ignored.') valid_norm = False logger.info(f'Got {len(training_data)} binary dataset files for training data') training_data = [{'file': file} for file in training_data] @@ -133,8 +134,6 @@ def __init__(self, if force_binarization: logger.warning('Forced binarization enabled in `path` mode. Will be ignored.') force_binarization = False - if repolygonize: - logger.warning('Repolygonization enabled in `path` mode. Will be ignored.') if binary_dataset_split: logger.warning('Internal binary dataset splits are enabled but using non-binary dataset files. Will be ignored.') binary_dataset_split = False @@ -147,14 +146,12 @@ def __init__(self, # format_type is None. Determine training type from length of training data entry elif not format_type: if training_data[0].type == 'baselines': - DatasetClass = PolygonGTDataset + DatasetClass = partial(PolygonGTDataset, legacy_polygons=legacy_polygons) valid_norm = False else: if force_binarization: logger.warning('Forced binarization enabled with box lines. Will be ignored.') force_binarization = False - if repolygonize: - logger.warning('Repolygonization enabled with box lines. Will be ignored.') if binary_dataset_split: logger.warning('Internal binary dataset splits are enabled but using non-binary dataset files. Will be ignored.') binary_dataset_split = False @@ -205,6 +202,20 @@ def __init__(self, 'set. (Will disable alphabet mismatch detection.)') self.train_set, self.val_set = random_split(train_set, (train_len, val_len)) + if format_type == 'binary': + legacy_train_status = train_set.legacy_polygons_status + if val_set and val_set.legacy_polygons_status != legacy_train_status: + logger.warning('Train and validation set have different legacy ' + f'polygon status: {legacy_train_status} and ' + f'{val_set.legacy_polygons_status}. Train set ' + 'status prevails.') + if legacy_train_status == "mixed": + logger.warning('Mixed legacy polygon status in training dataset. Consider recompilation.') + legacy_train_status = False + if legacy_polygons != legacy_train_status: + logger.warning(f'Setting dataset legacy polygon status to {legacy_train_status} based on training set.') + self.legacy_polygons = legacy_train_status + if len(self.train_set) == 0 or len(self.val_set) == 0: raise ValueError('No valid training data was provided to the train ' 'command. Please add valid XML, line, or binary data.') @@ -248,14 +259,15 @@ def setup(self, stage: Optional[str] = None): self.val_set.dataset.no_encode() -class RecognitionPretrainModel(pl.LightningModule): +class RecognitionPretrainModel(L.LightningModule): def __init__(self, hyper_params: Dict[str, Any] = None, output: str = 'model', spec: str = default_specs.RECOGNITION_SPEC, model: Optional[Union['PathLike', str]] = None, load_hyper_parameters: bool = False, - len_train_set: int = -1): + len_train_set: int = -1, + legacy_polygons: bool = False): """ A LightningModule encapsulating the unsupervised pretraining setup for a text recognition model. @@ -273,10 +285,15 @@ def __init__(self, """ super().__init__() hyper_params_ = default_specs.RECOGNITION_PRETRAIN_HYPER_PARAMS + self.legacy_polygons = legacy_polygons + if model: logger.info(f'Loading existing model from {model} ') self.nn = vgsl.TorchVGSLModel.load_model(model) + # apply legacy polygon parameter + self.nn.use_legacy_polygons = legacy_polygons + if self.nn.model_type not in [None, 'recognition']: raise ValueError(f'Model {model} is of type {self.nn.model_type} while `recognition` is expected.') @@ -377,16 +394,17 @@ def validation_step(self, batch, batch_idx): self.log('CE', loss, on_step=True, on_epoch=True) def on_validation_epoch_end(self): - ce = np.mean(self.val_ce) + if not self.trainer.sanity_checking: + ce = np.mean(self.val_ce) + + if ce < self.best_metric: + logger.debug(f'Updating best metric from {self.best_metric} ({self.best_epoch}) to {ce} ({self.current_epoch})') + self.best_epoch = self.current_epoch + self.best_metric = ce + logger.info(f'validation run: cross_enctropy: {ce}') + self.log('val_ce', ce, on_step=False, on_epoch=True, prog_bar=True, logger=True) self.val_ce.clear() - if ce < self.best_metric: - logger.debug(f'Updating best metric from {self.best_metric} ({self.best_epoch}) to {ce} ({self.current_epoch})') - self.best_epoch = self.current_epoch - self.best_metric = ce - logger.info(f'validation run: cross_enctropy: {ce}') - self.log('val_ce', ce, on_step=False, on_epoch=True, prog_bar=True, logger=True) - def training_step(self, batch, batch_idx): o = self._step(batch, batch_idx) if o is not None: @@ -430,6 +448,7 @@ def setup(self, stage: Optional[str] = None): else: logger.info(f'Creating new model {self.spec}') self.nn = vgsl.TorchVGSLModel(self.spec) + self.nn.use_legacy_polygons = self.legacy_polygons # initialize weights self.nn.init_weights() diff --git a/kraken/lib/pretrain/util.py b/kraken/lib/pretrain/util.py index 7bf3760a8..ce29c4b00 100644 --- a/kraken/lib/pretrain/util.py +++ b/kraken/lib/pretrain/util.py @@ -139,7 +139,7 @@ def arrange(s, e, length, keep_length): for length in sorted(lengths, reverse=True): lens = np.fromiter( (e - s if e - s >= length + mask_min_space else 0 for s, e in parts), - np.int, + int, ) l_sum = np.sum(lens) if l_sum == 0: diff --git a/kraken/lib/progress.py b/kraken/lib/progress.py index 25201a9be..4c6052944 100644 --- a/kraken/lib/progress.py +++ b/kraken/lib/progress.py @@ -18,7 +18,7 @@ from dataclasses import dataclass from typing import TYPE_CHECKING, Union -from pytorch_lightning.callbacks.progress.rich_progress import ( +from lightning.pytorch.callbacks.progress.rich_progress import ( CustomProgress, MetricsTextColumn, RichProgressBar) from rich import get_console, reconfigure from rich.default_styles import DEFAULT_STYLES @@ -110,7 +110,10 @@ def _init_progress(self, trainer): reconfigure(**self._console_kwargs) self._console = get_console() self._console.clear_live() - self._metric_component = MetricsTextColumn(trainer, self.theme.metrics) + self._metric_component = MetricsTextColumn(trainer, + self.theme.metrics, + self.theme.metrics_text_delimiter, + self.theme.metrics_format) columns = self.configure_columns(trainer) columns.append(self._metric_component) @@ -158,3 +161,5 @@ class RichProgressBarTheme: time: Union[str, 'Style'] = DEFAULT_STYLES['progress.elapsed'] processing_speed: Union[str, 'Style'] = DEFAULT_STYLES['progress.data.speed'] metrics: Union[str, 'Style'] = DEFAULT_STYLES['progress.description'] + metrics_text_delimiter: str = ' ' + metrics_format: str = '.3f' diff --git a/kraken/lib/ro/model.py b/kraken/lib/ro/model.py index cba78bd13..d5ef0927c 100644 --- a/kraken/lib/ro/model.py +++ b/kraken/lib/ro/model.py @@ -23,10 +23,10 @@ Sequence, Union) import numpy as np -import pytorch_lightning as pl +import lightning as L import torch import torch.nn.functional as F -from pytorch_lightning.callbacks import EarlyStopping, LearningRateMonitor +from lightning.pytorch.callbacks import EarlyStopping, LearningRateMonitor from torch.optim import lr_scheduler from torch.utils.data import DataLoader, Subset @@ -64,7 +64,7 @@ def spearman_footrule_distance(s, t): return (s - t).abs().sum() / (0.5 * (len(s) ** 2 - (len(s) % 2))) -class ROModel(pl.LightningModule): +class ROModel(L.LightningModule): def __init__(self, hyper_params: Dict[str, Any] = None, output: str = 'model', @@ -164,20 +164,22 @@ def validation_step(self, batch, batch_idx): self.val_spearman.append(spearman_dist.cpu()) def on_validation_epoch_end(self): - val_metric = np.mean(self.val_spearman) - val_loss = np.mean(self.val_losses) + if not self.trainer.sanity_checking: + val_metric = np.mean(self.val_spearman) + val_loss = np.mean(self.val_losses) + + if val_metric < self.best_metric: + logger.debug(f'Updating best metric from {self.best_metric} ({self.best_epoch}) to {val_metric} ({self.current_epoch})') + self.best_epoch = self.current_epoch + self.best_metric = val_metric + logger.info(f'validation run: val_spearman {val_metric} val_loss {val_loss}') + self.log('val_spearman', val_metric, on_step=False, on_epoch=True, prog_bar=True, logger=True) + self.log('val_metric', val_metric, on_step=False, on_epoch=True, prog_bar=False, logger=True) + self.log('val_loss', val_loss, on_step=False, on_epoch=True, prog_bar=True, logger=True) + self.val_spearman.clear() self.val_losses.clear() - if val_metric < self.best_metric: - logger.debug(f'Updating best metric from {self.best_metric} ({self.best_epoch}) to {val_metric} ({self.current_epoch})') - self.best_epoch = self.current_epoch - self.best_metric = val_metric - logger.info(f'validation run: val_spearman {val_metric} val_loss {val_loss}') - self.log('val_spearman', val_metric, on_step=False, on_epoch=True, prog_bar=True, logger=True) - self.log('val_metric', val_metric, on_step=False, on_epoch=True, prog_bar=False, logger=True) - self.log('val_loss', val_loss, on_step=False, on_epoch=True, prog_bar=True, logger=True) - def training_step(self, batch, batch_idx): x, y = batch['sample'], batch['target'] logits = self.ro_net(x) diff --git a/kraken/lib/segmentation.py b/kraken/lib/segmentation.py index 87870562a..44ec18b30 100644 --- a/kraken/lib/segmentation.py +++ b/kraken/lib/segmentation.py @@ -18,15 +18,16 @@ import logging from collections import defaultdict from typing import (TYPE_CHECKING, Dict, List, Literal, Optional, Sequence, - Tuple, Union) + Tuple, Union, TypeVar, Any, Generator) import numpy as np import shapely.geometry as geom import torch import torch.nn.functional as F -from PIL import Image +from PIL import Image, ImageDraw +from PIL.Image import Resampling, Transform from scipy.ndimage import (binary_erosion, distance_transform_cdt, - gaussian_filter, maximum_filter) + gaussian_filter, maximum_filter, affine_transform) from scipy.signal import convolve2d from scipy.spatial.distance import pdist, squareform from shapely.ops import nearest_points, unary_union @@ -37,16 +38,18 @@ from skimage.measure import (approximate_polygon, label, regionprops, subdivide_polygon) from skimage.morphology import skeletonize -from skimage.transform import (AffineTransform, PiecewiseAffineTransform, - SimilarityTransform, warp) +from skimage.transform import (AffineTransform, PiecewiseAffineTransform, warp) from kraken.lib import default_specs from kraken.lib.exceptions import KrakenInputException if TYPE_CHECKING: - from kraken.containers import Segmentation + from kraken.containers import Segmentation, BBoxLine, BaselineLine from kraken.lib.vgsl import TorchVGSLModel + +_T_pil_or_np = TypeVar('_T_pil_or_np', Image.Image, np.ndarray) + logger = logging.getLogger('kraken') __all__ = ['reading_order', @@ -60,6 +63,27 @@ 'extract_polygons'] +# faster implementation of PiecewiseAffineTransform - see +# https://github.com/scikit-image/scikit-image/issues/6864 and +# https://github.com/scikit-image/scikit-image/pull/6963 +class FastPiecewiseAffineTransform(PiecewiseAffineTransform): + def __call__(self, coords): + coords = np.asarray(coords) + + simplex = self._tesselation.find_simplex(coords) + + affines = np.array( + [self.affines[i].params for i in range(len(self._tesselation.simplices))] + )[simplex] + + pts = np.c_[coords, np.ones((coords.shape[0], 1))] + + result = np.einsum("ij,ikj->ik", pts, affines) + result[simplex == -1, :] = -1 + + return result + + def reading_order(lines: Sequence[Tuple[slice, slice]], text_direction: Literal['lr', 'rl'] = 'lr') -> np.ndarray: """Given the list of lines (a list of 2D slices), computes the partial reading order. The output is a binary 2D array @@ -369,19 +393,34 @@ def vectorize_regions(im: np.ndarray, threshold: float = 0.5): return [np.array(x.coords, dtype=np.uint)[:, [1, 0]].tolist() for x in boundaries] -def _rotate(image, angle, center, scale, cval=0): +def _rotate(image: _T_pil_or_np, + angle: float, + center: Any, + scale: float, + cval: int = 0, + order: int = 0, + use_skimage_warp: bool = False) -> Tuple[AffineTransform, _T_pil_or_np]: """ - Rotate function taken mostly from scikit image. Main difference is that - this one allows dimensional scaling and records the final translation - to ensure no image content is lost. This is needed to rotate the seam - back into the original image. + Rotate an image at an angle with optional scaling + + Args: + image (PIL.Image.Image or (H, W, C) np.ndarray): Input image + angle (float): Angle in radians + center (tuple): unused + scale (float): x-Axis scaling factor + cval (int): Padding value + order (int): Interpolation order + Returns: + A tuple containing the transformation matrix and the rotated image. + Note: this function is much faster applied on PIL images than on numpy ndarrays. """ - rows, cols = image.shape[0], image.shape[1] - tform1 = SimilarityTransform(translation=center) - tform2 = SimilarityTransform(rotation=angle) - tform3 = SimilarityTransform(translation=-center) - tform4 = AffineTransform(scale=(1/scale, 1)) - tform = tform4 + tform3 + tform2 + tform1 + if isinstance(image, Image.Image): + rows, cols = image.height, image.width + else: + rows, cols = image.shape[:2] + assert len(image.shape) == 3 or len(image.shape) == 2, 'Image must be 2D or 3D' + + tform = AffineTransform(rotation=angle, scale=(1/scale, 1)) corners = np.array([ [0, 0], [0, rows - 1], @@ -395,13 +434,28 @@ def _rotate(image, angle, center, scale, cval=0): maxr = corners[:, 1].max() out_rows = maxr - minr + 1 out_cols = maxc - minc + 1 - output_shape = np.around((out_rows, out_cols)) + output_shape = tuple(int(o) for o in np.around((out_rows, out_cols))) # fit output image in new shape - translation = (minc, minr) - tform5 = SimilarityTransform(translation=translation) - tform = tform5 + tform - tform.params[2] = (0, 0, 1) - return tform, warp(image, tform, output_shape=output_shape, order=0, cval=cval, clip=False, preserve_range=True) + translation = tform([[minc, minr]]) + tform = AffineTransform(rotation=angle, scale=(1/scale, 1), translation=[f for f in translation.flatten()]) + + if isinstance(image, Image.Image): + # PIL is much faster than scipy + pdata = tform.params.flatten().tolist()[:6] + resample = {0: Resampling.NEAREST, 1: Resampling.BILINEAR, 2: Resampling.BICUBIC, 3: Resampling.BICUBIC}.get(order, Resampling.NEAREST) + return tform, image.transform(output_shape[::-1], Transform.AFFINE, data=pdata, resample=resample, fillcolor=cval) + + # params for scipy + # swap X and Y axis for scipy + pdata = tform.params.copy()[[1, 0, 2], :][:, [1, 0, 2]] + # we copy the translation vector + offset = pdata[:2, 2].copy() + # scipy expects a 3x3 *linear* matrix (to include channel axis), we don't want the channel axis to be modified + pdata[:2, 2] = 0 + if use_skimage_warp: + return tform, warp(image, tform, output_shape=output_shape, order=order, cval=cval, clip=False, preserve_range=True) + else: + return tform, affine_transform(image, pdata, offset=(*offset, 0), output_shape=(*output_shape, *image.shape[2:]), cval=cval, order=order) def line_regions(line, regions): @@ -456,7 +510,6 @@ def _calc_seam(baseline, polygon, angle, im_feats, bias=150): level. """ MASK_VAL = 99999 - r, c = draw.polygon(polygon[:, 1], polygon[:, 0]) c_min, c_max = int(polygon[:, 0].min()), int(polygon[:, 0].max()) r_min, r_max = int(polygon[:, 1].min()), int(polygon[:, 1].max()) patch = im_feats[r_min:r_max+2, c_min:c_max+2].copy() @@ -470,8 +523,7 @@ def _calc_seam(baseline, polygon, angle, im_feats, bias=150): mask[line_locs] = 0 dist_bias = distance_transform_cdt(mask) # absolute mask - mask = np.ones_like(patch, dtype=bool) - mask[r-r_min, c-c_min] = False + mask = np.array(make_polygonal_mask(polygon-(r_min, c_min), patch.shape[::-1])) > 128 # dilate mask to compensate for aliasing during rotation mask = binary_erosion(mask, border_value=True, iterations=2) # combine weights with features @@ -480,7 +532,12 @@ def _calc_seam(baseline, polygon, angle, im_feats, bias=150): extrema = baseline[(0, -1), :] - (c_min, r_min) # scale line image to max 600 pixel width scale = min(1.0, 600/(c_max-c_min)) - tform, rotated_patch = _rotate(patch, angle, center=extrema[0], scale=scale, cval=MASK_VAL) + tform, rotated_patch = _rotate(patch, + angle, + center=extrema[0], + scale=scale, + cval=MASK_VAL, + use_skimage_warp=True) # ensure to cut off padding after rotation x_offsets = np.sort(np.around(tform.inverse(extrema)[:, 0]).astype('int')) rotated_patch = rotated_patch[:, x_offsets[0]:x_offsets[1]+1] @@ -1023,7 +1080,99 @@ def compute_polygon_section(baseline: Sequence[Tuple[int, int]], return tuple(o) -def extract_polygons(im: Image.Image, bounds: 'Segmentation') -> Image.Image: +def _bevelled_warping_envelope(baseline: np.ndarray, + output_bl_start: Tuple[float, float], + output_shape: Tuple[int, int]) -> Tuple[List[Tuple[int, int]], List[Tuple[int, int]]]: + """ + Calculates the source and target envelope for a piecewise affine transform + """ + def _as_int_tuple(x): + return tuple(int(i) for i in x) + + envelope_dy = [-output_bl_start[1], output_shape[0] - output_bl_start[1]] + diff_bl = np.diff(baseline, axis=0) + diff_bl_normed = diff_bl / np.linalg.norm(diff_bl, axis=1)[:, None] + l_bl = len(baseline) + cum_lens = np.cumsum([0] + np.linalg.norm(diff_bl, axis=1).tolist()) + + bl_seg_normals = np.array([-diff_bl_normed[:, 1], diff_bl_normed[:, 0]]).T + ini_point = baseline[0] - diff_bl_normed[0] * output_bl_start[0] + source_envelope = [ + _as_int_tuple(ini_point + envelope_dy[0]*bl_seg_normals[0]), + _as_int_tuple(ini_point + envelope_dy[1]*bl_seg_normals[0]), + ] + target_envelope = [ + (0, 0), + (0, output_shape[0]) + ] + MAX_BEVEL_WIDTH = output_shape[0] / 3 + BEVEL_STEP_WIDTH = MAX_BEVEL_WIDTH / 2 + + for k in range(l_bl-2): + pt = baseline[k+1] + seg_prev = baseline[k] - pt + seg_next = baseline[k+2] - pt + bevel_prev = seg_prev / max(2., np.linalg.norm(seg_prev) / MAX_BEVEL_WIDTH) + bevel_next = seg_next / max(2., np.linalg.norm(seg_next) / MAX_BEVEL_WIDTH) + bevel_nsteps = max(1, np.round((np.linalg.norm(bevel_prev) + np.linalg.norm(bevel_next)) / BEVEL_STEP_WIDTH)) + l_prev = np.linalg.norm(bevel_prev) + l_next = np.linalg.norm(bevel_next) + for i in range(int(bevel_nsteps)+1): + # bezier interp + t = i / bevel_nsteps + tpt = pt + (1-t)**2 * bevel_prev + t**2 * bevel_next + tx = output_bl_start[0] + cum_lens[k+1] - (1-t)**2 * l_prev + t**2 * l_next + tnormal = (1-t) * bl_seg_normals[k] + t * bl_seg_normals[k+1] + tnormal /= np.linalg.norm(tnormal) + source_points = [_as_int_tuple(tpt + envelope_dy[0]*tnormal), _as_int_tuple(tpt + envelope_dy[1]*tnormal)] + target_points = [(int(tx), 0), (int(tx), output_shape[0])] + # avoid duplicate points leading to singularities + if source_points[0] == source_envelope[-2] or source_points[1] == source_envelope[-1] or target_points[0] == target_envelope[-2]: + continue + source_envelope += source_points + target_envelope += target_points + + end_point = baseline[-1] + diff_bl_normed[-1]*(output_shape[1]-cum_lens[-1]-output_bl_start[0]) + source_envelope += [ + end_point + envelope_dy[0]*bl_seg_normals[-1], + end_point + envelope_dy[1]*bl_seg_normals[-1], + ] + target_envelope += [ + (output_shape[1], 0), + (output_shape[1], output_shape[0]) + ] + return source_envelope, target_envelope + + +def make_polygonal_mask(polygon: np.ndarray, shape: Tuple[int, int]) -> Image.Image: + """ + Creates a mask from a polygon. + + Args: + polygon: A polygon as a list of points. + shape: The shape of the mask to create. + + Returns: + A PIL.Image.Image instance containing the mask. + """ + mask = Image.new('L', shape, 0) + ImageDraw.Draw(mask).polygon([tuple(p) for p in polygon.astype(int).tolist()], fill=255, width=2) + return mask + + +def apply_polygonal_mask(img: Image.Image, polygon: np.ndarray, cval: int = 0) -> Image.Image: + """ + Extract the polygonal mask of an image. + """ + mask = make_polygonal_mask(polygon, img.size) + out = Image.new(img.mode, (img.width, img.height), cval) + out.paste(img, mask=mask) + return out + + +def extract_polygons(im: Image.Image, + bounds: "Segmentation", + legacy: bool = False) -> Generator[Tuple[Image.Image, Union["BBoxLine", "BaselineLine"],], None, None]: """ Yields the subimages of image im defined in the list of bounding polygons with baselines preserving order. @@ -1032,9 +1181,10 @@ def extract_polygons(im: Image.Image, bounds: 'Segmentation') -> Image.Image: im: Input image bounds: A Segmentation class containing a bounding box or baseline segmentation. + legacy: Use the old, slow, and deprecated path Yields: - The extracted subimage + The extracted subimage, and the corresponding bounding box or baseline """ if bounds.type == 'baselines': # select proper interpolation scheme depending on shape @@ -1043,95 +1193,183 @@ def extract_polygons(im: Image.Image, bounds: 'Segmentation') -> Image.Image: im = im.convert('L') else: order = 1 - im = np.array(im) for line in bounds.lines: if line.boundary is None: raise KrakenInputException('No boundary given for line') + if len(line.baseline) < 2 or geom.LineString(line.baseline).length < 5: + raise KrakenInputException('Baseline length below minimum 5px') pl = np.array(line.boundary) baseline = np.array(line.baseline) c_min, c_max = int(pl[:, 0].min()), int(pl[:, 0].max()) r_min, r_max = int(pl[:, 1].min()), int(pl[:, 1].max()) - if (pl < 0).any() or (pl.max(axis=0)[::-1] >= im.shape[:2]).any(): + imshape = np.array([im.height, im.width]) + + if (pl < 0).any() or (pl.max(axis=0)[::-1] >= imshape).any(): raise KrakenInputException('Line polygon outside of image bounds') - if (baseline < 0).any() or (baseline.max(axis=0)[::-1] >= im.shape[:2]).any(): + if (baseline < 0).any() or (baseline.max(axis=0)[::-1] >= imshape).any(): raise KrakenInputException('Baseline outside of image bounds') - # fast path for straight baselines requiring only rotation - if len(baseline) == 2: - baseline = baseline.astype(float) - # calculate direction vector - lengths = np.linalg.norm(np.diff(baseline.T), axis=0) - p_dir = np.mean(np.diff(baseline.T) * lengths/lengths.sum(), axis=1) - p_dir = (p_dir.T / np.sqrt(np.sum(p_dir**2, axis=-1))) - angle = np.arctan2(p_dir[1], p_dir[0]) - patch = im[r_min:r_max+1, c_min:c_max+1].copy() - offset_polygon = pl - (c_min, r_min) - r, c = draw.polygon(offset_polygon[:, 1], offset_polygon[:, 0]) - mask = np.zeros(patch.shape[:2], dtype=bool) - mask[r, c] = True - patch[np.invert(mask)] = 0 - extrema = offset_polygon[(0, -1), :] - # scale line image to max 600 pixel width - tform, rotated_patch = _rotate(patch, angle, center=extrema[0], scale=1.0, cval=0) - i = Image.fromarray(rotated_patch.astype('uint8')) - # normal slow path with piecewise affine transformation - else: - if len(pl) > 50: - pl = approximate_polygon(pl, 2) - full_polygon = subdivide_polygon(pl, preserve_ends=True) - pl = geom.MultiPoint(full_polygon) - - bl = zip(baseline[:-1:], baseline[1::]) - bl = [geom.LineString(x) for x in bl] - cum_lens = np.cumsum([0] + [line.length for line in bl]) - # distance of intercept from start point and number of line segment - control_pts = [] - for point in pl.geoms: - npoint = np.array(point.coords)[0] - line_idx, dist, intercept = min(((idx, line.project(point), - np.array(line.interpolate(line.project(point)).coords)) for idx, line in enumerate(bl)), - key=lambda x: np.linalg.norm(npoint-x[2])) - # absolute distance from start of line - line_dist = cum_lens[line_idx] + dist - intercept = np.array(intercept) - # side of line the point is at - side = np.linalg.det(np.array([[baseline[line_idx+1][0]-baseline[line_idx][0], - npoint[0]-baseline[line_idx][0]], - [baseline[line_idx+1][1]-baseline[line_idx][1], - npoint[1]-baseline[line_idx][1]]])) - side = np.sign(side) - # signed perpendicular distance from the rectified distance - per_dist = side * np.linalg.norm(npoint-intercept) - control_pts.append((line_dist, per_dist)) - # calculate baseline destination points - bl_dst_pts = baseline[0] + np.dstack((cum_lens, np.zeros_like(cum_lens)))[0] - # calculate bounding polygon destination points - pol_dst_pts = np.array([baseline[0] + (line_dist, per_dist) for line_dist, per_dist in control_pts]) - # extract bounding box patch - c_dst_min, c_dst_max = int(pol_dst_pts[:, 0].min()), int(pol_dst_pts[:, 0].max()) - r_dst_min, r_dst_max = int(pol_dst_pts[:, 1].min()), int(pol_dst_pts[:, 1].max()) - output_shape = np.around((r_dst_max - r_dst_min + 1, c_dst_max - c_dst_min + 1)) - patch = im[r_min:r_max+1, c_min:c_max+1].copy() - # offset src points by patch shape - offset_polygon = full_polygon - (c_min, r_min) - offset_baseline = baseline - (c_min, r_min) - # offset dst point by dst polygon shape - offset_bl_dst_pts = bl_dst_pts - (c_dst_min, r_dst_min) - offset_pol_dst_pts = pol_dst_pts - (c_dst_min, r_dst_min) - # mask out points outside bounding polygon - mask = np.zeros(patch.shape[:2], dtype=bool) - r, c = draw.polygon(offset_polygon[:, 1], offset_polygon[:, 0]) - mask[r, c] = True - patch[np.invert(mask)] = 0 - # estimate piecewise transform - src_points = np.concatenate((offset_baseline, offset_polygon)) - dst_points = np.concatenate((offset_bl_dst_pts, offset_pol_dst_pts)) - tform = PiecewiseAffineTransform() - tform.estimate(src_points, dst_points) - o = warp(patch, tform.inverse, output_shape=output_shape, preserve_range=True, order=order) - i = Image.fromarray(o.astype('uint8')) + if legacy: + im = np.asarray(im) + # Old, slow, and deprecated path + # fast path for straight baselines requiring only rotation + if len(baseline) == 2: + baseline = baseline.astype(float) + # calculate direction vector + lengths = np.linalg.norm(np.diff(baseline.T), axis=0) + p_dir = np.mean(np.diff(baseline.T) * lengths/lengths.sum(), axis=1) + p_dir = (p_dir.T / np.sqrt(np.sum(p_dir**2, axis=-1))) + angle = np.arctan2(p_dir[1], p_dir[0]) + patch = im[r_min:r_max+1, c_min:c_max+1].copy() + offset_polygon = pl - (c_min, r_min) + offset_polygon2 = offset_polygon.flatten().tolist() + img = Image.new('L', patch.shape[:2][::-1], 0) + ImageDraw.Draw(img).polygon(offset_polygon2, outline=1, fill=1) + mask = np.asarray(img, dtype=bool) + patch[np.invert(mask)] = 0 + extrema = offset_polygon[(0, -1), :] + # scale line image to max 600 pixel width + tform, rotated_patch = _rotate(patch, angle, center=extrema[0], scale=1.0, cval=0) + i = Image.fromarray(rotated_patch.astype('uint8')) + # normal slow path with piecewise affine transformation + else: + if len(pl) > 50: + pl = approximate_polygon(pl, 2) + full_polygon = subdivide_polygon(pl, preserve_ends=True) + pl = geom.MultiPoint(full_polygon) + + bl = zip(baseline[:-1:], baseline[1::]) + bl = [geom.LineString(x) for x in bl] + cum_lens = np.cumsum([0] + [line.length for line in bl]) + # distance of intercept from start point and number of line segment + control_pts = [] + for point in pl.geoms: + npoint = np.array(point.coords)[0] + line_idx, dist, intercept = min(((idx, line.project(point), + np.array(line.interpolate(line.project(point)).coords)) for idx, line in enumerate(bl)), + key=lambda x: np.linalg.norm(npoint-x[2])) + # absolute distance from start of line + line_dist = cum_lens[line_idx] + dist + intercept = np.array(intercept) + # side of line the point is at + side = np.linalg.det(np.array([[baseline[line_idx+1][0]-baseline[line_idx][0], + npoint[0]-baseline[line_idx][0]], + [baseline[line_idx+1][1]-baseline[line_idx][1], + npoint[1]-baseline[line_idx][1]]])) + side = np.sign(side) + # signed perpendicular distance from the rectified distance + per_dist = side * np.linalg.norm(npoint-intercept) + control_pts.append((line_dist, per_dist)) + # calculate baseline destination points + bl_dst_pts = baseline[0] + np.dstack((cum_lens, np.zeros_like(cum_lens)))[0] + # calculate bounding polygon destination points + pol_dst_pts = np.array([baseline[0] + (line_dist, per_dist) for line_dist, per_dist in control_pts]) + # extract bounding box patch + c_dst_min, c_dst_max = int(pol_dst_pts[:, 0].min()), int(pol_dst_pts[:, 0].max()) + r_dst_min, r_dst_max = int(pol_dst_pts[:, 1].min()), int(pol_dst_pts[:, 1].max()) + output_shape = np.around((r_dst_max - r_dst_min + 1, c_dst_max - c_dst_min + 1)) + patch = im[r_min:r_max+1, c_min:c_max+1].copy() + # offset src points by patch shape + offset_polygon = full_polygon - (c_min, r_min) + offset_baseline = baseline - (c_min, r_min) + # offset dst point by dst polygon shape + offset_bl_dst_pts = bl_dst_pts - (c_dst_min, r_dst_min) + offset_pol_dst_pts = pol_dst_pts - (c_dst_min, r_dst_min) + # mask out points outside bounding polygon + offset_polygon2 = offset_polygon.flatten().tolist() + img = Image.new('L', patch.shape[:2][::-1], 0) + ImageDraw.Draw(img).polygon(offset_polygon2, outline=1, fill=1) + mask = np.asarray(img, dtype=bool) + patch[np.invert(mask)] = 0 + # estimate piecewise transform + src_points = np.concatenate((offset_baseline, offset_polygon)) + dst_points = np.concatenate((offset_bl_dst_pts, offset_pol_dst_pts)) + tform = FastPiecewiseAffineTransform() + tform.estimate(src_points, dst_points) + o = warp(patch, tform.inverse, output_shape=output_shape, preserve_range=True, order=order) + i = Image.fromarray(o.astype('uint8')) + + else: # if not legacy + # new, fast, and efficient path + # fast path for straight baselines requiring only rotation + if len(baseline) == 2: + baseline = baseline.astype(float) + # calculate direction vector + lengths = np.linalg.norm(np.diff(baseline.T), axis=0) + p_dir = np.mean(np.diff(baseline.T) * lengths/lengths.sum(), axis=1) + p_dir = (p_dir.T / np.sqrt(np.sum(p_dir**2, axis=-1))) + angle = np.arctan2(p_dir[1], p_dir[0]) + # crop out bounding box + patch = im.crop((c_min, r_min, c_max+1, r_max+1)) + offset_polygon = pl - (c_min, r_min) + patch = apply_polygonal_mask(patch, offset_polygon, cval=0) + extrema = offset_polygon[(0, -1), :] + tform, i = _rotate(patch, angle, center=extrema[0], scale=1.0, cval=0, order=order) + # normal slow path with piecewise affine transformation + else: + if len(pl) > 50: + pl = approximate_polygon(pl, 2) + full_polygon = subdivide_polygon(pl, preserve_ends=True) + + # baseline segment vectors + diff_bl = np.diff(baseline, axis=0) + diff_bl_norms = np.linalg.norm(diff_bl, axis=1) + diff_bl_normed = diff_bl / diff_bl_norms[:, None] + + l_poly = len(full_polygon) + cum_lens = np.cumsum([0] + np.linalg.norm(diff_bl, axis=1).tolist()) + + # calculate baseline destination points : + bl_dst_pts = baseline[0] + np.dstack((cum_lens, np.zeros_like(cum_lens)))[0] + + # calculate bounding polygon destination points : + # diff[k, p] = baseline[k] - polygon[p] + poly_bl_diff = full_polygon[None, :] - baseline[:-1, None] + # local x coordinates of polygon points on baseline segments + # x[k, p] = (baseline[k] - polygon[p]) . (baseline[k+1] - baseline[k]) / |baseline[k+1] - baseline[k]| + poly_bl_x = np.einsum('kpm,km->kp', poly_bl_diff, diff_bl_normed) + # distance to baseline segments + poly_bl_segdist = np.maximum(-poly_bl_x, poly_bl_x - diff_bl_norms[:, None]) + # closest baseline segment index + poly_closest_bl = np.argmin((poly_bl_segdist), axis=0) + poly_bl_x = poly_bl_x[poly_closest_bl, np.arange(l_poly)] + poly_bl_diff = poly_bl_diff[poly_closest_bl, np.arange(l_poly)] + # signed distance between polygon points and baseline segments (to get y coordinates) + poly_bl_y = np.cross(diff_bl_normed[poly_closest_bl], poly_bl_diff) + # final destination points + pol_dst_pts = np.array( + [cum_lens[poly_closest_bl] + poly_bl_x, poly_bl_y] + ).T + baseline[:1] + + # extract bounding box patch + c_dst_min, c_dst_max = int(pol_dst_pts[:, 0].min()), int(pol_dst_pts[:, 0].max()) + r_dst_min, r_dst_max = int(pol_dst_pts[:, 1].min()), int(pol_dst_pts[:, 1].max()) + output_shape = np.around((r_dst_max - r_dst_min + 1, c_dst_max - c_dst_min + 1)) + patch = im.crop((c_min, r_min, c_max+1, r_max+1)) + # offset src points by patch shape + offset_polygon = full_polygon - (c_min, r_min) + offset_baseline = baseline - (c_min, r_min) + # offset dst point by dst polygon shape + offset_bl_dst_pts = bl_dst_pts - (c_dst_min, r_dst_min) + # mask out points outside bounding polygon + patch = apply_polygonal_mask(patch, offset_polygon, cval=0) + + # estimate piecewise transform by beveling angles + source_envelope, target_envelope = _bevelled_warping_envelope(offset_baseline, offset_bl_dst_pts[0], output_shape) + # mesh for PIL, as (box, quad) tuples : box is (NW, SE) and quad is (NW, SW, SE, NE) + deform_mesh = [ + ( + (*target_envelope[i], *target_envelope[i+3]), + (*source_envelope[i], *source_envelope[i+1], *source_envelope[i+3], *source_envelope[i+2]) + ) + for i in range(0, len(source_envelope)-3, 2) + ] + # warp + resample = {0: Resampling.NEAREST, 1: Resampling.BILINEAR, 2: Resampling.BICUBIC, 3: Resampling.BICUBIC}.get(order, Resampling.NEAREST) + i = patch.transform((output_shape[1], output_shape[0]), Image.MESH, data=deform_mesh, resample=resample) + yield i.crop(i.getbbox()), line else: if bounds.text_direction.startswith('vertical'): diff --git a/kraken/lib/train.py b/kraken/lib/train.py index fa7dd5450..1e5a41e80 100644 --- a/kraken/lib/train.py +++ b/kraken/lib/train.py @@ -20,12 +20,13 @@ import warnings from typing import (TYPE_CHECKING, Any, Callable, Dict, Literal, Optional, Sequence, Union) +from functools import partial import numpy as np -import pytorch_lightning as pl +import lightning as L import torch import torch.nn.functional as F -from pytorch_lightning.callbacks import (BaseFinetuning, Callback, +from lightning.pytorch.callbacks import (BaseFinetuning, Callback, EarlyStopping, LearningRateMonitor) from torch.optim import lr_scheduler from torch.utils.data import DataLoader, Subset, random_split @@ -65,21 +66,18 @@ def _validation_worker_init_fn(worker_id): results when validating. Temporarily increase the logging level for lightning because otherwise it will display a message at info level about the seed being changed. """ - from pytorch_lightning import seed_everything - level = logging.getLogger("lightning_fabric.utilities.seed").level - logging.getLogger("lightning_fabric.utilities.seed").setLevel(logging.WARN) + from lightning.pytorch import seed_everything seed_everything(42) - logging.getLogger("lightning_fabric.utilities.seed").setLevel(level) -class KrakenTrainer(pl.Trainer): +class KrakenTrainer(L.Trainer): def __init__(self, enable_progress_bar: bool = True, enable_summary: bool = True, min_epochs: int = 5, max_epochs: int = 100, freeze_backbone=-1, - pl_logger: Union[pl.loggers.logger.Logger, str, None] = None, + pl_logger: Union[L.pytorch.loggers.logger.Logger, str, None] = None, log_dir: Optional['PathLike'] = None, *args, **kwargs): @@ -92,14 +90,14 @@ def __init__(self, kwargs['callbacks'] = [kwargs['callbacks']] if pl_logger: - if 'logger' in kwargs and isinstance(kwargs['logger'], pl.loggers.logger.Logger): + if 'logger' in kwargs and isinstance(kwargs['logger'], L.pytorch.loggers.logger.Logger): logger.debug('Experiment logger has been provided outside KrakenTrainer as `logger`') - elif isinstance(pl_logger, pl.loggers.logger.Logger): + elif isinstance(pl_logger, L.pytorch.loggers.logger.Logger): logger.debug('Experiment logger has been provided outside KrakenTrainer as `pl_logger`') kwargs['logger'] = pl_logger elif pl_logger == 'tensorboard': logger.debug('Creating default experiment logger') - kwargs['logger'] = pl.loggers.TensorBoardLogger(log_dir) + kwargs['logger'] = L.pytorch.loggers.TensorBoardLogger(log_dir) else: logger.error('`pl_logger` was set, but %s is not an accepted value', pl_logger) raise ValueError(f'{pl_logger} is not acceptable as logger') @@ -112,7 +110,7 @@ def __init__(self, kwargs['callbacks'].append(progress_bar_cb) if enable_summary: - from pytorch_lightning.callbacks import RichModelSummary + from lightning.pytorch.callbacks import RichModelSummary summary_cb = RichModelSummary(max_depth=2) kwargs['callbacks'].append(summary_cb) kwargs['enable_model_summary'] = False @@ -145,10 +143,10 @@ def freeze_before_training(self, pl_module): def finetune_function(self, pl_module, current_epoch, optimizer): pass - def on_train_start(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None: + def on_train_start(self, trainer: "L.Trainer", pl_module: "L.LightningModule") -> None: self.freeze(pl_module.net[:-1]) - def on_train_batch_start(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule", batch, batch_idx) -> None: + def on_train_batch_start(self, trainer: "L.Trainer", pl_module: "L.LightningModule", batch, batch_idx) -> None: """ Called for each training batch. """ @@ -161,7 +159,7 @@ def on_train_batch_start(self, trainer: "pl.Trainer", pl_module: "pl.LightningMo current_param_groups = optimizer.param_groups self._store(pl_module, opt_idx, num_param_groups, current_param_groups) - def on_train_epoch_start(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None: + def on_train_epoch_start(self, trainer: "L.Trainer", pl_module: "L.LightningModule") -> None: """Called when the epoch begins.""" pass @@ -170,7 +168,7 @@ class KrakenSetOneChannelMode(Callback): """ Callback that sets the one_channel_mode of the model after the first epoch. """ - def on_train_epoch_end(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None: + def on_train_epoch_end(self, trainer: "L.Trainer", pl_module: "L.LightningModule") -> None: # fill one_channel_mode after 1 iteration over training data set if not trainer.sanity_checking and trainer.current_epoch == 0 and trainer.model.nn.model_type == 'recognition': ds = getattr(pl_module, 'train_set', None) @@ -186,7 +184,7 @@ class KrakenSaveModel(Callback): """ Kraken's own serialization callback instead of pytorch's. """ - def on_validation_end(self, trainer: "pl.Trainer", pl_module: "pl.LightningModule") -> None: + def on_validation_end(self, trainer: "L.Trainer", pl_module: "L.LightningModule") -> None: if not trainer.sanity_checking: trainer.model.nn.hyper_params['completed_epochs'] += 1 metric = float(trainer.logged_metrics['val_metric']) if 'val_metric' in trainer.logged_metrics else -1.0 @@ -198,7 +196,7 @@ def on_validation_end(self, trainer: "pl.Trainer", pl_module: "pl.LightningModul trainer.model.best_model = f'{trainer.model.output}_{trainer.model.best_epoch}.mlmodel' -class RecognitionModel(pl.LightningModule): +class RecognitionModel(L.LightningModule): def __init__(self, hyper_params: Dict[str, Any] = None, output: str = 'model', @@ -212,11 +210,11 @@ def __init__(self, binary_dataset_split: bool = False, num_workers: int = 1, load_hyper_parameters: bool = False, - repolygonize: bool = False, force_binarization: bool = False, format_type: Literal['path', 'alto', 'page', 'xml', 'binary'] = 'path', codec: Optional[Dict] = None, - resize: Literal['fail', 'both', 'new', 'add', 'union'] = 'fail'): + resize: Literal['fail', 'both', 'new', 'add', 'union'] = 'fail', + legacy_polygons: bool = False): """ A LightningModule encapsulating the training setup for a text recognition model. @@ -233,6 +231,7 @@ def __init__(self, **kwargs: Setup parameters, i.e. CLI parameters of the train() command. """ super().__init__() + self.legacy_polygons = legacy_polygons hyper_params_ = default_specs.RECOGNITION_HYPER_PARAMS.copy() if model: logger.info(f'Loading existing model from {model} ') @@ -284,12 +283,10 @@ def __init__(self, if binary_dataset_split: logger.warning('Internal binary dataset splits are enabled but using non-binary dataset files. Will be ignored.') binary_dataset_split = False - DatasetClass = PolygonGTDataset + DatasetClass = partial(PolygonGTDataset, legacy_polygons=legacy_polygons) valid_norm = False elif format_type == 'binary': DatasetClass = ArrowIPCRecognitionDataset - if repolygonize: - logger.warning('Repolygonization enabled in `binary` mode. Will be ignored.') valid_norm = False logger.info(f'Got {len(training_data)} binary dataset files for training data') training_data = [{'file': file} for file in training_data] @@ -300,8 +297,6 @@ def __init__(self, if force_binarization: logger.warning('Forced binarization enabled in `path` mode. Will be ignored.') force_binarization = False - if repolygonize: - logger.warning('Repolygonization enabled in `path` mode. Will be ignored.') if binary_dataset_split: logger.warning('Internal binary dataset splits are enabled but using non-binary dataset files. Will be ignored.') binary_dataset_split = False @@ -314,14 +309,12 @@ def __init__(self, # format_type is None. Determine training type from container class types elif not format_type: if training_data[0].type == 'baselines': - DatasetClass = PolygonGTDataset + DatasetClass = partial(PolygonGTDataset, legacy_polygons=legacy_polygons) valid_norm = False else: if force_binarization: logger.warning('Forced binarization enabled with box lines. Will be ignored.') force_binarization = False - if repolygonize: - logger.warning('Repolygonization enabled with box lines. Will be ignored.') if binary_dataset_split: logger.warning('Internal binary dataset splits are enabled but using non-binary dataset files. Will be ignored.') binary_dataset_split = False @@ -375,6 +368,7 @@ def __init__(self, logger.debug('Setting multiprocessing tensor sharing strategy to file_system') torch.multiprocessing.set_sharing_strategy('file_system') + val_set = None if evaluation_data: train_set = self._build_dataset(DatasetClass, training_data) self.train_set = Subset(train_set, range(len(train_set))) @@ -399,6 +393,20 @@ def __init__(self, raise ValueError('No valid training data was provided to the train ' 'command. Please add valid XML, line, or binary data.') + if format_type == 'binary': + legacy_train_status = train_set.legacy_polygons_status + if val_set and val_set.legacy_polygons_status != legacy_train_status: + logger.warning('Train and validation set have different legacy ' + f'polygon status: {legacy_train_status} and ' + f'{val_set.legacy_polygons_status}. Train set ' + 'status prevails.') + if legacy_train_status == "mixed": + logger.warning('Mixed legacy polygon status in training dataset. Consider recompilation.') + legacy_train_status = False + if legacy_polygons != legacy_train_status: + logger.warning(f'Setting dataset legacy polygon status to {legacy_train_status} based on training set.') + self.legacy_polygons = legacy_train_status + logger.info(f'Training set {len(self.train_set)} lines, validation set ' f'{len(self.val_set)} lines, alphabet {len(train_set.alphabet)} ' 'symbols') @@ -494,9 +502,9 @@ def validation_step(self, batch, batch_idx): self.val_cer.update(pred, decoded_targets) self.val_wer.update(pred, decoded_targets) - if self.logger and self.trainer.state.stage != 'sanity_check' and self.hparams.batch_size * batch_idx < 16: - for i in range(self.hparams.batch_size): - count = self.hparams.batch_size * batch_idx + i + if self.logger and self.trainer.state.stage != 'sanity_check' and self.hparams.hyper_params["batch_size"] * batch_idx < 16: + for i in range(self.hparams.hyper_params["batch_size"]): + count = self.hparams.hyper_params["batch_size"] * batch_idx + i if count < 16: self.logger.experiment.add_image(f'Validation #{count}, target: {decoded_targets[i]}', batch['image'][i], @@ -507,17 +515,19 @@ def validation_step(self, batch, batch_idx): self.global_step) def on_validation_epoch_end(self): - accuracy = 1.0 - self.val_cer.compute() - word_accuracy = 1.0 - self.val_wer.compute() - - if accuracy > self.best_metric: - logger.debug(f'Updating best metric from {self.best_metric} ({self.best_epoch}) to {accuracy} ({self.current_epoch})') - self.best_epoch = self.current_epoch - self.best_metric = accuracy - logger.info(f'validation run: total chars {self.val_cer.total} errors {self.val_cer.errors} accuracy {accuracy}') - self.log('val_accuracy', accuracy, on_step=False, on_epoch=True, prog_bar=True, logger=True) - self.log('val_word_accuracy', word_accuracy, on_step=False, on_epoch=True, prog_bar=True, logger=True) - self.log('val_metric', accuracy, on_step=False, on_epoch=True, prog_bar=False, logger=True) + if not self.trainer.sanity_checking: + accuracy = 1.0 - self.val_cer.compute() + word_accuracy = 1.0 - self.val_wer.compute() + + if accuracy > self.best_metric: + logger.debug(f'Updating best metric from {self.best_metric} ({self.best_epoch}) to {accuracy} ({self.current_epoch})') + self.best_epoch = self.current_epoch + self.best_metric = accuracy + logger.info(f'validation run: total chars {self.val_cer.total} errors {self.val_cer.errors} accuracy {accuracy}') + self.log('val_accuracy', accuracy, on_step=False, on_epoch=True, prog_bar=True, logger=True) + self.log('val_word_accuracy', word_accuracy, on_step=False, on_epoch=True, prog_bar=True, logger=True) + self.log('val_metric', accuracy, on_step=False, on_epoch=True, prog_bar=False, logger=True) + # reset metrics even if not sanity checking self.val_cer.reset() self.val_wer.reset() @@ -592,6 +602,7 @@ def setup(self, stage: Optional[str] = None): logger.info(f'Creating new model {self.spec} with {self.train_set.dataset.codec.max_label+1} outputs') self.spec = '[{} O1c{}]'.format(self.spec[1:-1], self.train_set.dataset.codec.max_label + 1) self.nn = vgsl.TorchVGSLModel(self.spec) + self.nn.use_legacy_polygons = self.legacy_polygons # initialize weights self.nn.init_weights() self.nn.add_codec(self.train_set.dataset.codec) @@ -687,7 +698,7 @@ def lr_scheduler_step(self, scheduler, metric): scheduler.step(metric) -class SegmentationModel(pl.LightningModule): +class SegmentationModel(L.LightningModule): def __init__(self, hyper_params: Dict = None, load_hyper_parameters: bool = False, @@ -696,12 +707,12 @@ def __init__(self, output: str = 'model', spec: str = default_specs.SEGMENTATION_SPEC, model: Optional[Union['PathLike', str]] = None, - training_data: Union[Sequence[Union['PathLike', str]], Sequence[Dict[str, Any]]] = None, - evaluation_data: Optional[Union[Sequence[Union['PathLike', str]], Sequence[Dict[str, Any]]]] = None, + training_data: Union[Sequence[Union['PathLike', str]], Sequence[Segmentation]] = None, + evaluation_data: Optional[Union[Sequence[Union['PathLike', str]], Sequence[Segmentation]]] = None, partition: Optional[float] = 0.9, num_workers: int = 1, force_binarization: bool = False, - format_type: Literal['path', 'alto', 'page', 'xml'] = 'path', + format_type: Literal['path', 'alto', 'page', 'xml', None] = 'path', suppress_regions: bool = False, suppress_baselines: bool = False, valid_regions: Optional[Sequence[str]] = None, @@ -839,8 +850,7 @@ def __init__(self, train_set.add(page) if evaluation_data: - val_set = BaselineSet(evaluation_data, - line_width=self.hparams.hyper_params['line_width'], + val_set = BaselineSet(line_width=self.hparams.hyper_params['line_width'], im_transforms=transforms, augmentation=False, valid_baselines=valid_baselines, @@ -897,25 +907,26 @@ def validation_step(self, batch, batch_idx): self.val_freq_iu.update(pred, y) def on_validation_epoch_end(self): - - pixel_accuracy = self.val_px_accuracy.compute() - mean_accuracy = self.val_mean_accuracy.compute() - mean_iu = self.val_mean_iu.compute() - freq_iu = self.val_freq_iu.compute() - - if mean_iu > self.best_metric: - logger.debug(f'Updating best metric from {self.best_metric} ({self.best_epoch}) to {mean_iu} ({self.current_epoch})') - self.best_epoch = self.current_epoch - self.best_metric = mean_iu - - logger.info(f'validation run: accuracy {pixel_accuracy} mean_acc {mean_accuracy} mean_iu {mean_iu} freq_iu {freq_iu}') - - self.log('val_accuracy', pixel_accuracy, on_step=False, on_epoch=True, prog_bar=True, logger=True) - self.log('val_mean_acc', mean_accuracy, on_step=False, on_epoch=True, prog_bar=True, logger=True) - self.log('val_mean_iu', mean_iu, on_step=False, on_epoch=True, prog_bar=True, logger=True) - self.log('val_freq_iu', freq_iu, on_step=False, on_epoch=True, prog_bar=True, logger=True) - self.log('val_metric', mean_iu, on_step=False, on_epoch=True, prog_bar=False, logger=True) - + if not self.trainer.sanity_checking: + pixel_accuracy = self.val_px_accuracy.compute() + mean_accuracy = self.val_mean_accuracy.compute() + mean_iu = self.val_mean_iu.compute() + freq_iu = self.val_freq_iu.compute() + + if mean_iu > self.best_metric: + logger.debug(f'Updating best metric from {self.best_metric} ({self.best_epoch}) to {mean_iu} ({self.current_epoch})') + self.best_epoch = self.current_epoch + self.best_metric = mean_iu + + logger.info(f'validation run: accuracy {pixel_accuracy} mean_acc {mean_accuracy} mean_iu {mean_iu} freq_iu {freq_iu}') + + self.log('val_accuracy', pixel_accuracy, on_step=False, on_epoch=True, prog_bar=True, logger=True) + self.log('val_mean_acc', mean_accuracy, on_step=False, on_epoch=True, prog_bar=True, logger=True) + self.log('val_mean_iu', mean_iu, on_step=False, on_epoch=True, prog_bar=True, logger=True) + self.log('val_freq_iu', freq_iu, on_step=False, on_epoch=True, prog_bar=True, logger=True) + self.log('val_metric', mean_iu, on_step=False, on_epoch=True, prog_bar=False, logger=True) + + # reset metrics even if sanity checking self.val_px_accuracy.reset() self.val_mean_accuracy.reset() self.val_mean_iu.reset() @@ -1008,7 +1019,7 @@ def setup(self, stage: Optional[str] = None): self.val_set.dataset.class_mapping = self.nn.user_metadata['class_mapping'] # updates model's hyper params with user-defined ones - self.nn.hyper_params = self.hparams + self.nn.hyper_params = self.hparams.hyper_params # change topline/baseline switch loc = {None: 'centerline', @@ -1111,6 +1122,8 @@ def _configure_optimizer_and_lr_scheduler(hparams, params, len_train_set=None, l weight_decay = hparams.get("weight_decay") schedule = hparams.get("schedule") gamma = hparams.get("gamma") + cos_t_max = hparams.get("cos_t_max") + cos_min_lr = hparams.get("cos_min_lr") step_size = hparams.get("step_size") rop_factor = hparams.get("rop_factor") rop_patience = hparams.get("rop_patience") @@ -1131,7 +1144,10 @@ def _configure_optimizer_and_lr_scheduler(hparams, params, len_train_set=None, l lr_sched = {'scheduler': lr_scheduler.ExponentialLR(optim, gamma, last_epoch=completed_epochs-1), 'interval': 'step'} elif schedule == 'cosine': - lr_sched = {'scheduler': lr_scheduler.CosineAnnealingLR(optim, gamma, last_epoch=completed_epochs-1), + lr_sched = {'scheduler': lr_scheduler.CosineAnnealingLR(optim, + cos_t_max, + cos_min_lr, + last_epoch=completed_epochs-1), 'interval': 'step'} elif schedule == 'step': lr_sched = {'scheduler': lr_scheduler.StepLR(optim, step_size, gamma, last_epoch=completed_epochs-1), diff --git a/kraken/lib/util.py b/kraken/lib/util.py index 609e924fe..267b4545b 100644 --- a/kraken/lib/util.py +++ b/kraken/lib/util.py @@ -56,7 +56,7 @@ def is_bitonal(im: Union[Image.Image, torch.Tensor]) -> bool: if isinstance(im, Image.Image): return im.getcolors(2) is not None and len(im.getcolors(2)) == 2 elif isinstance(im, torch.Tensor): - return len(im.int().unique()) == 2 + return len(im.unique()) == 2 def get_im_str(im: Image.Image) -> str: diff --git a/kraken/lib/vgsl.py b/kraken/lib/vgsl.py index 9d1cfc6cc..9a4f0759b 100644 --- a/kraken/lib/vgsl.py +++ b/kraken/lib/vgsl.py @@ -140,7 +140,8 @@ def __init__(self, spec: str) -> None: 'seg_type': None, 'one_channel_mode': None, 'model_type': None, - 'hyper_params': {}} + 'hyper_params': {}, + 'legacy_polygons': False} # enable new polygons by default on new models self._aux_layers = nn.ModuleDict() self.idx = -1 @@ -311,7 +312,8 @@ def _deserialize_layers(name, layer): 'seg_type': 'bbox', 'one_channel_mode': '1', 'model_type': None, - 'hyper_params': {}} + 'hyper_params': {}, + 'legacy_polygons': True} # disable new polygons by default on load if 'kraken_meta' in mlmodel.user_defined_metadata: nn.user_metadata.update(json.loads(mlmodel.user_defined_metadata['kraken_meta'])) @@ -363,6 +365,14 @@ def aux_layers(self, **kwargs): def aux_layers(self, val: Dict[str, torch.nn.Module]): self._aux_layers.update(val) + @property + def use_legacy_polygons(self): + return self.user_metadata.get('legacy_polygons', True) + + @use_legacy_polygons.setter + def use_legacy_polygons(self, val: bool): + self.user_metadata['legacy_polygons'] = val + def save_model(self, path: str): """ Serializes the model into path. diff --git a/kraken/pageseg.py b/kraken/pageseg.py index c29742620..12fe28d02 100644 --- a/kraken/pageseg.py +++ b/kraken/pageseg.py @@ -25,8 +25,7 @@ import numpy as np import PIL -from scipy.ndimage.filters import (gaussian_filter, maximum_filter, - uniform_filter) +from scipy.ndimage import gaussian_filter, maximum_filter, uniform_filter from kraken.containers import BBoxLine, Segmentation from kraken.lib import morph, sl diff --git a/kraken/repo.py b/kraken/repo.py index 628c327fb..f902e9f80 100644 --- a/kraken/repo.py +++ b/kraken/repo.py @@ -125,7 +125,7 @@ def get_model(model_id: str, path: str, callback: Callable[[int, int], Any] = la Will usually be the file name of the model. """ logger.info(f'Saving model {model_id} to {path}') - r = requests.get(f'{MODEL_REPO}records', params={'q': f'doi:"{model_id}"'}) + r = requests.get(f'{MODEL_REPO}records', params={'q': f'doi:"{model_id}"', 'allversions': '1'}) r.raise_for_status() callback(0, 0) resp = r.json() @@ -164,7 +164,7 @@ def get_description(model_id: str, callback: Callable[..., Any] = lambda: None) Dict """ logger.info(f'Retrieving metadata for {model_id}') - r = requests.get(f'{MODEL_REPO}records', params={'q': f'doi:"{model_id}"'}) + r = requests.get(f'{MODEL_REPO}records', params={'q': f'doi:"{model_id}"', 'allversions': '1'}) r.raise_for_status() callback() resp = r.json() diff --git a/kraken/rpred.py b/kraken/rpred.py index 96dff4fdd..179d9e872 100644 --- a/kraken/rpred.py +++ b/kraken/rpred.py @@ -24,6 +24,7 @@ from functools import partial from typing import (TYPE_CHECKING, Dict, Generator, List, Optional, Sequence, Tuple, Union) +import warnings from kraken.containers import BaselineOCRRecord, BBoxOCRRecord, ocr_record from kraken.lib.dataset import ImageInputTransforms @@ -52,7 +53,8 @@ def __init__(self, bounds: 'Segmentation', pad: int = 16, bidi_reordering: Union[bool, str] = True, - tags_ignore: Optional[List[Tuple[str, str]]] = None) -> Generator[ocr_record, None, None]: + tags_ignore: Optional[List[Tuple[str, str]]] = None, + no_legacy_polygons: bool = False) -> Generator[ocr_record, None, None]: """ Multi-model version of kraken.rpred.rpred. @@ -159,6 +161,7 @@ def __init__(self, self.pad = pad self.bounds = bounds self.tags_ignore = tags_ignore + self.no_legacy_polygons = no_legacy_polygons def _recognize_box_line(self, line): xmin, ymin, xmax, ymax = line.bbox @@ -175,8 +178,10 @@ def _recognize_box_line(self, line): tag, net = self._resolve_tags_to_model(line.tags, self.nets) + use_legacy_polygons = self._choose_legacy_polygon_extractor(net) + seg = dataclasses.replace(self.bounds, lines=[line]) - box, coords = next(extract_polygons(self.im, seg)) + box, coords = next(extract_polygons(self.im, seg, legacy=use_legacy_polygons)) self.box = box # check if boxes are non-zero in any dimension @@ -242,14 +247,17 @@ def _recognize_baseline_line(self, line): seg = dataclasses.replace(self.bounds, lines=[line]) + tag, net = self._resolve_tags_to_model(line.tags, self.nets) + + use_legacy_polygons = self._choose_legacy_polygon_extractor(net) + try: - box, coords = next(extract_polygons(self.im, seg)) + box, coords = next(extract_polygons(self.im, seg, legacy=use_legacy_polygons)) except KrakenInputException as e: logger.warning(f'Extracting line failed: {e}') return BaselineOCRRecord('', [], [], line) self.box = box - tag, net = self._resolve_tags_to_model(line.tags, self.nets) # check if boxes are non-zero in any dimension if 0 in box.size: logger.warning(f'{line} with zero dimension. Emitting empty record.') @@ -277,8 +285,8 @@ def _recognize_baseline_line(self, line): pos = [] conf = [] for _, start, end, c in preds: - pos.append((self._scale_val(start, 0, self.box.size[0]), - self._scale_val(end, 0, self.box.size[0]))) + pos.append([self._scale_val(start, 0, self.box.size[0]), + self._scale_val(end, 0, self.box.size[0])]) conf.append(c) rec = BaselineOCRRecord(pred, pos, conf, line) if self.bidi_reordering: @@ -300,12 +308,25 @@ def __len__(self): def _scale_val(self, val, min_val, max_val): return int(round(min(max(((val*self.net_scale)-self.pad)*self.in_scale, min_val), max_val-1))) + def _choose_legacy_polygon_extractor(self, net) -> bool: + # grouping the checks here to display warnings only once + if net.nn.use_legacy_polygons: + if self.no_legacy_polygons: + warnings.warn('Enforcing use of the new polygon extractor for models trained with old version. Accuracy may be affected.') + return False + else: + warnings.warn('Using legacy polygon extractor, as the model was not trained with the new method. Please retrain your model to get speed improvement.') + return True + return False + + def rpred(network: 'TorchSeqRecognizer', im: 'Image.Image', bounds: 'Segmentation', pad: int = 16, - bidi_reordering: Union[bool, str] = True) -> Generator[ocr_record, None, None]: + bidi_reordering: Union[bool, str] = True, + no_legacy_polygons: bool = False) -> Generator[ocr_record, None, None]: """ Uses a TorchSeqRecognizer and a segmentation to recognize text @@ -325,7 +346,7 @@ def rpred(network: 'TorchSeqRecognizer', An ocr_record containing the recognized text, absolute character positions, and confidence values for each character. """ - return mm_rpred(defaultdict(lambda: network), im, bounds, pad, bidi_reordering) + return mm_rpred(defaultdict(lambda: network), im, bounds, pad, bidi_reordering, no_legacy_polygons=no_legacy_polygons) def _resolve_tags_to_model(tags: Optional[Sequence[Dict[str, str]]], diff --git a/kraken/serialization.py b/kraken/serialization.py index 639f09d48..9666e344c 100644 --- a/kraken/serialization.py +++ b/kraken/serialization.py @@ -163,10 +163,10 @@ def serialize(results: 'Segmentation', # set field to indicate the availability of baseline segmentation in # addition to bounding boxes - line = {'index': idx, + line = {'id': record.id, 'bbox': max_bbox([record.boundary]) if record.type == 'baselines' else record.bbox, - 'cuts': record.cuts, - 'confidences': record.confidences, + 'cuts': [list(x) for x in getattr(record, 'cuts', [])], + 'confidences': getattr(record, 'confidences', []), 'recognition': [], 'boundary': [list(x) for x in record.boundary] if record.type == 'baselines' else [[record.bbox[0], record.bbox[1]], [record.bbox[2], record.bbox[1]], @@ -179,7 +179,7 @@ def serialize(results: 'Segmentation', if record.type == 'baselines': line['baseline'] = [list(x) for x in record.baseline] - splits = regex.split(r'(\s+)', record.prediction) + splits = regex.split(r'(\s+)', getattr(record, 'prediction', '')) line_offset = 0 logger.debug(f'Record contains {len(splits)} segments') for segment in splits: @@ -247,6 +247,8 @@ def _load_template(name): def render_report(model: str, chars: int, errors: int, + char_accuracy: float, + word_accuracy: float, char_confusions: 'Counter', scripts: 'Counter', insertions: 'Counter', @@ -275,7 +277,8 @@ def render_report(model: str, report = {'model': model, 'chars': chars, 'errors': errors, - 'accuracy': (chars-errors)/chars * 100, + 'character_accuracy': char_accuracy * 100, + 'word_accuracy': word_accuracy * 100, 'insertions': sum(insertions.values()), 'deletions': deletions, 'substitutions': sum(substitutions.values()), diff --git a/kraken/templates/alto b/kraken/templates/alto index 6e093c42f..9b8f45efb 100644 --- a/kraken/templates/alto +++ b/kraken/templates/alto @@ -3,7 +3,7 @@ 'postprocessing': 'postOperation'} %} {%+ macro render_line(page, line) +%} - + {% if line.boundary %} @@ -72,10 +72,10 @@ {% for type, label in page.line_types %} - + {% endfor %} {% for label in page.region_types %} - + {% endfor %} {% if page.line_orders|length() > 0 %} @@ -107,7 +107,7 @@ {% if loop.previtem and loop.previtem.type == 'line' %}
{% endif %} - + diff --git a/kraken/templates/hocr b/kraken/templates/hocr index 110632f37..81b31c480 100644 --- a/kraken/templates/hocr +++ b/kraken/templates/hocr @@ -1,5 +1,5 @@ {% macro render_line(line) -%} - + {% for segment in line.recognition %} {{ segment.text }} {% endfor -%} @@ -20,7 +20,7 @@
{% for entity in page.entities -%} {% if entity.type == "region" -%} -
+
{% for line in entity.lines -%} {{ render_line(line) }} {% endfor %} diff --git a/kraken/templates/layout.html b/kraken/templates/layout.html index 4a7d14dbd..9ca212e0b 100644 --- a/kraken/templates/layout.html +++ b/kraken/templates/layout.html @@ -1,6 +1,6 @@ - + diff --git a/kraken/templates/pagexml b/kraken/templates/pagexml index 417c8538b..596503065 100644 --- a/kraken/templates/pagexml +++ b/kraken/templates/pagexml @@ -1,5 +1,5 @@ {%+ macro render_line(line) +%} - + {% if line.boundary %} {% endif %} @@ -38,7 +38,7 @@ {% if loop.previtem and loop.previtem.type == 'line' %} {% endif %} - + {% if entity.boundary %}{% endif %} {%- for line in entity.lines -%} {{ render_line(line) }} diff --git a/kraken/templates/report b/kraken/templates/report index 264b8b6aa..abd81fbb2 100644 --- a/kraken/templates/report +++ b/kraken/templates/report @@ -2,7 +2,8 @@ {{ report.chars }} Characters {{ report.errors }} Errors -{{ '%0.2f'| format(report.accuracy) }}% Accuracy +{{ '%0.2f'| format(report.character_accuracy) }}% Character Accuracy +{{ '%0.2f'| format(report.word_accuracy) }}% Word Accuracy {{ report.insertions }} Insertions {{ report.deletions }} Deletions diff --git a/kraken/templates/style.css b/kraken/templates/style.css index 30e3ba30f..117657f74 100644 --- a/kraken/templates/style.css +++ b/kraken/templates/style.css @@ -111,7 +111,7 @@ nav a { } nav a:hover { - text-decoration: underline; + text-decoration: underline; } button.download { diff --git a/pyproject.toml b/pyproject.toml index 7fecc5fb8..637e7fdd6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [project] [build-system] -requires = ["pbr>=5.7.0", "setuptools>=36.6.0", "wheel"] +requires = ["pbr>=5.7.0", "setuptools>=36.6.0,<70.0.0", "wheel"] build-backend = "pbr.build" diff --git a/setup.cfg b/setup.cfg index e5a224e6e..5f675f35e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -53,14 +53,14 @@ install_requires = jinja2~=3.0 python-bidi torchvision>=0.5.0 - torch~=2.0.1 + torch~=2.1.0 scikit-learn~=1.2.1 scikit-image~=0.21.0 shapely~=1.8.5 pyarrow - pytorch-lightning~=2.0.0 + lightning~=2.2.0 torchmetrics>=1.1.0 - threadpoolctl~=3.2.0 + threadpoolctl~=3.4.0 importlib-resources>=1.3.0 rich diff --git a/tests/resources/170025120000003,0074-lite.xml b/tests/resources/170025120000003,0074-lite.xml new file mode 100644 index 000000000..b87e85d4c --- /dev/null +++ b/tests/resources/170025120000003,0074-lite.xml @@ -0,0 +1,89 @@ + + + + TRP + 2016-06-16T16:57:15.027+02:00 + 2018-07-04T17:25:44.389+02:00 + + + + + + + + + + + + + + + + + $pag:39 + + + + $pag:39 + + + + + + + + + + + + + + + + y salvedades alli expressadas; Y fue acetada; + + + + + + + y assi mismo el dho$.dicho $ofi:Patron $ant:Miguel $ant:Carreras, + + + + + + + y el $ofi:Rndo$.Reverendo $ant:Miguel $ant:Carreras $ofi:pbro$.presbítero residente en la + + + + $-nor su hijo, De todos sus bienes, con los pactos +y salvedades alli expressadas; Y fue acetada; +y assi mismo el dho$.dicho $ofi:Patron $ant:Miguel $ant:Carreras, +y el $ofi:Rndo$.Reverendo $ant:Miguel $ant:Carreras $ofi:pbro$.presbítero residente en la +Parq.$^l$.Parroquial Igla$.Iglesia de dha$.dicha villa de $top:Canet Padre é, hijo +hizieron donacion a la dha$.dicha $ant:Anna $ant:Maria su +hija y hermana resp.$^e$.respectivamente por todos sus drôs$.derechos de le:$- +$-gitima Paterna, Materna y otros de ducientas$.doscientas +libras de moneda Bar$.barcelonesa; arca y vestidos corres:$- +$-pondientes, con promesa de pagar en esta +forma, ésto es arcas, ropas y joyas el dia de las +Bodas; cien libras del dia de la fecha, á, medio +año y las restantes cien libras del dho$.dicho dia de la +fecha á tres años prox.$^s$.proximos venturos bajo obli:$- +$-gacion de todos sus bienes; cuya dha$.dicha donacion +fue echa con el pacto revercional acos:$- +$-tumbrado; Y fue azetada por la dha$.dicha $ant:Anna +$ant:Maria por quien fue echa la diffinición cor:$- +$-respondiente de dhos$.dichos sus dros$.derechos a favor del dho$.dicho +su Padre y hermano resp.$^e$.respectivamente y salvose el de +futura sucession: Y en su consequencia hizo +la correspondiente constitucion dotal al +dho$.dicho $ant:Joseph $ant:Vancells su venidero esposo; y este +acetandola prometió en su caso restituir +bajo obligacion de todos sus bienes. + + + + diff --git a/tests/resources/FineReader10-schema-v1.xml b/tests/resources/FineReader10-schema-v1.xml index d98b46ce7..80dda2ace 100644 --- a/tests/resources/FineReader10-schema-v1.xml +++ b/tests/resources/FineReader10-schema-v1.xml @@ -1,626 +1,626 @@ - - - Schema for representing OCR results exported from FineReader 10.0 SDK. Copyright 2001-2011 ABBYY, Inc. - - - - - - - - - Global document data - - - - - - - Paragraph formatting styles collection - - - - - - - Paragraph formatting style - - - - - - - - - Document sections collection - - - - - - - Section - - - - - - - - - - - - Recognized page - - - - - - - Recognized block - - - - - - Page Section - - - - - - Running titles and artefacts - - - - - - - - - - If true, all coordinates are relative to original image before opening, otherwise they are relative to the opened (deskewed) image - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Page section is the sequence of page streams - - - - - - - - - - - Page Stream is the sequence of page elements - - - - - - - - - - - - text - - - - - Table - - - - - Barcode - - - - - Picture - - - - - - - - - - - Table captions - - - - - - - Table cells - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Picture captions - - - - - - - - - - - - - - - - - - - - - - - Text Stream is the sequence of paragraphs and/or blocks - - - - - - - - - - - - - - - - - Id of page element - - - - - - - - - - - - - - - - - - - - - - - - - - - Block region, the set of rectangles - - - - - - - - - - - - - - - - - - Recognized block text, presents if blockType attribute is Text - - - - - The set of table rows, presents if blockType attribute is Table - - - - - Separators box block, presents if blockType attribute is SeparatorsBox - - - - - - - - - - - Separator block, presents if blockType attribute is Separator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Text paragraph - - - - - - - - - - - - - - - - - - - - - - - - - Table cell - - - - - - Cell text - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Text paragraph line - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Group of characters with uniform formatting - - - - - - - - - - - - - - - Attributes of characters are alternated with word's recognition variants. The variants of recognition of the word are written before the word - - - - Attributes of single character - - - - - Variants of recognition of the next word - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Starting point of the separator - - - - - Ending point of the separator - - - - - - - - - - - - - - - - - - - - - - + + + Schema for representing OCR results exported from FineReader 10.0 SDK. Copyright 2001-2011 ABBYY, Inc. + + + + + + + + + Global document data + + + + + + + Paragraph formatting styles collection + + + + + + + Paragraph formatting style + + + + + + + + + Document sections collection + + + + + + + Section + + + + + + + + + + + + Recognized page + + + + + + + Recognized block + + + + + + Page Section + + + + + + Running titles and artefacts + + + + + + + + + + If true, all coordinates are relative to original image before opening, otherwise they are relative to the opened (deskewed) image + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page section is the sequence of page streams + + + + + + + + + + + Page Stream is the sequence of page elements + + + + + + + + + + + + text + + + + + Table + + + + + Barcode + + + + + Picture + + + + + + + + + + + Table captions + + + + + + + Table cells + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Picture captions + + + + + + + + + + + + + + + + + + + + + + + Text Stream is the sequence of paragraphs and/or blocks + + + + + + + + + + + + + + + + + Id of page element + + + + + + + + + + + + + + + + + + + + + + + + + + + Block region, the set of rectangles + + + + + + + + + + + + + + + + + + Recognized block text, presents if blockType attribute is Text + + + + + The set of table rows, presents if blockType attribute is Table + + + + + Separators box block, presents if blockType attribute is SeparatorsBox + + + + + + + + + + + Separator block, presents if blockType attribute is Separator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Text paragraph + + + + + + + + + + + + + + + + + + + + + + + + + Table cell + + + + + + Cell text + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Text paragraph line + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Group of characters with uniform formatting + + + + + + + + + + + + + + + Attributes of characters are alternated with word's recognition variants. The variants of recognition of the word are written before the word + + + + Attributes of single character + + + + + Variants of recognition of the next word + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Starting point of the separator + + + + + Ending point of the separator + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/resources/alto-4-3.xsd b/tests/resources/alto-4-3.xsd index f02195b03..cb8daf94f 100644 --- a/tests/resources/alto-4-3.xsd +++ b/tests/resources/alto-4-3.xsd @@ -1,1248 +1,1248 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ALTO (analyzed layout and text object) stores layout information and - OCR recognized text of pages of any kind of printed documents like books, journals and newspapers. - ALTO is a standardized XML format to store layout and content information. - It is designed to be used as an extension schema to METS (Metadata Encoding and Transmission Standard), - where METS provides metadata and structural information while ALTO contains content and physical information. - - - - - - - - Describes general settings of the alto file like measurement units and metadata - - - - - Styles define properties of layout elements. A style defined in a parent element is used as default style for all related children elements. - - - - - - Tag define properties of additional characteristic. The tags are referenced from related content element on Block or String element by attribute TAGREF via the tag ID. - This container element contains the individual elements for LayoutTags, StructureTags, RoleTags, NamedEntityTags and OtherTags - - - - - - - Describes alternative hierarchical orderings of the page (i.e. total orders over its segments, for linear text flow), - in addition to the explicit flat reading order defined by @IDNEXT on the block level, - and the implicit flat reading order implied by the segment element ordering. - - - - - - The root layout element. - - - - - - Schema version of the ALTO file. - - - - - - - - - - Element deprecated. 'Processing' should be used instead. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - There are following variation of tag types available: - LayoutTag – criteria about arrangement or graphical appearance - StructureTag – criteria about grouping or formation - RoleTag – criteria about function or mission - NamedEntityTag – criteria about assignment of terms to their relationship / meaning (NER) - OtherTag – criteria about any other characteristic not listed above, the TYPE attribute is intended to be used for classification within those. - - - - - - - - - - - - - - - - Defines one or more reading orders within the - page. Groups may be either unordered or ordered and can - contain other groups, e.g. a page containing - unrelated texts that are ordered individually - would be encoded as an UnorderedGroup containing - multiple OrderedGroups. The granularity of - elements can vary inside groups. - - - - - - - - - - - - - A reference to an element such as a block, TextLine, String, or Glyph. - - - - - - - A link to the referenced element. Valid - target elements are any block type, - TextLine, String, or Glyph. - - - - - - - Optionally annotates the role of the - referenced element in the reading order - with one or more tags. Examples could be - interlinear additions or marginalia. - - - - - - - - A group containing ordered elements (i.e. the sequence of OrderedGroup, UnorderedGroup or ElementRef subelements is ordered). - - - - - - - - - - - - - - Optionally annotates the role of the - group in the reading order - with one or more tags. Examples could be - distinguishing - parallel texts or apparatus criticus and - main text. - - - - - - - A link to the referenced element. Valid - target elements are any block type, - TextLine, or String. - - - - - - - - A group containing unordered elements (i.e. the sequence of OrderedGroup, UnorderedGroup or ElementRef subelements is arbitrary). - - - - - - - - - - - - - - - A link to the referenced element. Valid - target elements are any block type, - TextLine, or String. - - - - - - - Gives brief information about original page quality - - - - - - - - - - - - - - Gives more details about the original page quality, since QUALITY attribute gives only brief and restrictive information - - - - - - Position of the page. Could be lefthanded, righthanded, cover, foldout or single if it has no special position. - - - - - - - - - - - - Page Confidence: Confidence level of the ocr for this page. A value between 0 (unsure) and 1 (sure). - - - - - - - - - One page of a book or journal. - - - - - The area between the top line of print and the upper edge of the leaf. It may contain page number or running title. - - - - - The area between the printspace and the left border of a page. May contain margin notes. - - - - - The area between the printspace and the right border of a page. May contain margin notes. - - - - - The area between the bottom line of letterpress or writing and the bottom edge of the leaf. It may contain a page number, a signature number or a catch word. - - - - - Rectangle covering the printed area of a page. Page number and running title are not part of the print space. - - - - - - - Any user-defined class like title page. - - - - - - - - - The number of the page within the document. - - - - - The page number that is printed on the page. - - - - - - - - A link to the processing description that has been used for this page. - - - - - Estimated percentage of OCR Accuracy in range from 0 to 100 - - - - - - - - - - - - - A text style defines font properties of text. - - - - - - - A paragraph style defines formatting properties of text blocks. - - - - - Indicates the alignement of the paragraph. Could be left, right, center or justify. - - - - - - - - - - - - - Left indent of the paragraph in relation to the column. - - - - - Right indent of the paragraph in relation to the column. - - - - - Line spacing between two lines of the paragraph. Measurement calculated from baseline to baseline. - - - - - Indent of the first line of the paragraph if this is different from the other lines. A negative value indicates an indent to the left, a positive value indicates an indent to the right. - - - - - - - - - - - - - - - - - - - - - - - - - - - Group of available block types - - - - - A block of text. - - - - - A picture or image. - - - - - A graphic used to separate blocks. Usually a line or rectangle. - - - - - A block that consists of other blocks - - - - - - - Base type for any kind of block on the page. - - - - - - - - - - - - - - - Tells the rotation of e.g. text or illustration within the block. The value is in degree counterclockwise. - - - - - The next block in reading order of the page (if ReadingOrder is not specified, and elements are not in order). - - - - - Correction Status. Indicates whether manual correction has been done or not. The correction status should be recorded at the highest level possible (Block, TextLine, String). - - - - - - - A white space. - - - - - - - - - - Type of the substitution (if any). - - - - - - - - - - - - - - - Word Confidence: Confidence level of the ocr for this string. A value between 0 (unsure) and 1 (sure). - - - - - - - - - - Any alternative for the word. - Alternative can outline a variant of writing by new typing / spelling rules, typically manually done or by dictionary replacements. - The above sample is an old composed character "Æ" of ancient time, which is replaced now by "Ä". - As variant are meant alternatives of the real printed content which are options outlined by the text recognition process. - Similar sample: "Straße" vs. "Strasse". Such alternatives are not coming from text recognition. - - - - - - - Identifies the purpose of the alternative. - - - - - - - - A sequence of chars. Strings are separated by white spaces or hyphenation chars. - - - - - - - - - - - - - - - - - - - - Content of the substitution. - - - - - - Confidence level of each character in that string. A list of numbers, one number between 0 (sure) and 9 (unsure) for each character. - - - - - Correction Status. Indicates whether manual correction has been done or not. The correction status should be recorded at the highest level possible (Block, TextLine, String). - - - - - Attribute to record language of the string. The language should be recorded at the highest level possible. - - - - - - A region on a page - - - - - - - - - - - - - - - - - - A list of points - - - - - - Describes the bounding shape of a block, if it is not rectangular. - - - - - - - - - - Describes the inline base direction and line orientation of a line or of all lines inside a text block. - The meaning of these terms is defined by the W3C writing modes document: - These values should correspond to the base direction set in the BiDi algorithm to the respective elements during Unicode encoding. A value of "ttb" (top-to-bottom) implies a base direction of left-to-right, a value of "btt" (bottom-to-top) a base direction of right-to-left. - - - - - - - - - - - A polygon shape. - - - - - - An ellipse shape. HPOS and VPOS describe the center of the ellipse. - HLENGTH and VLENGTH are the width and height of the described ellipse. - The attribute ROTATION tells the rotation of the e.g. text or - illustration within the block. The value is in degrees counterclockwise. - - - - - - - - - - A circle shape. HPOS and VPOS describe the center of the circle. - - - - - - - - Formatting attributes. Note that these attributes are assumed to be inherited from ancestor elements of the document hierarchy. - - - - The font name. - - - - - - - The font size, in points (1/72 of an inch). - - - - - Font color as RGB value - - - - - - - Serif or Sans-Serif - - - - - - - - - fixed or proportional - - - - - - - - - - - All measurement values inside the alto file are related to - this unit, except the font size. - Coordinates as being used in HPOS and VPOS are absolute coordinates referring to the upper-left corner of a page. - The upper left corner of the page is defined as coordinate (0/0). - - values meaning: - mm10: 1/10th of millimeter - inch1200: 1/1200th of inch - pixel: 1 pixel - - The values for pixel will be related to the resolution of the image based - on which the layout is described. Incase the original image is not known - the scaling factor can be calculated based on total width and height of - the image and the according information of the PAGE element. - - - - - - - - - - - Information to identify the image file from which the OCR text was created. - - - - - - - - - - - - - - - - - - - A unique identifier for the image file. This is drawn from MIX. - This identifier must be unique within the local system. - To facilitate file sharing or interoperability with other systems, fileIdentifierLocation may be added to designate the system or application where the identifier is unique. - - - - - - A location qualifier, i.e., a namespace. - - - - - - - - - - - - - - A unique identifier for the document. - This identifier must be unique within the local system. - To facilitate file sharing or interoperability with other systems, documentIdentifierLocation may be added to designate the system or application where the identifier is unique. - - - - - - A location qualifier, i.e., a namespace. - - - - - - - - Deprecated. processingStepType should be used instead. - Information on how the text was created, including preprocessing, OCR processing, and postprocessing steps. Where possible, this draws from MIX's change history. - - - - - - - - - - Description of the processing step. - - - - - Classification of the category of operation, how the file was created, including generation, modification, preprocessing, postprocessing or any other steps. - - - - - Date or DateTime the image was processed. - - - - - Identifies the organizationlevel producer(s) of the processed image. - - - - - An ordinal listing of the image processing steps performed. For example, "image despeckling." - - - - - A description of any setting of the processing application. For example, for a multi-engine OCR application this might include the engines which were used. Ideally, this description should be adequate so that someone else using the same application can produce identical results. - - - - - - - - - - - - - - - - - - - - - Information about a software application. Where applicable, the preferred method for determining this information is by selecting Help -- About. - - - - - The name of the organization or company that created the application. - - - - - The name of the application. - - - - - The version of the application. - - - - - A description of any important characteristics of the application, especially for non-commercial applications. For example, if a non-commercial application is built using commercial components, e.g., an OCR engine SDK. Those components should be mentioned here. - - - - - - - - - - List of any combination of font styles - - - - - - - - - - - - - - - - - - - - - - - A block that consists of other blocks - - - - - - - - - A user defined string to identify the type of composed block (e.g. table, advertisement, ...) - - - - - An ID to link to an image which contains only the composed block. The ID and the file link is defined in the related METS file. - - - - - - - - A picture or image. - - - - - - A user defined string to identify the type of illustration like photo, map, drawing, chart, ... - - - - - A link to an image which contains only the illustration. - - - - - - - - A graphic used to separate blocks. Usually a line or rectangle. - - - - - - - - A block of text. - - - - - - - A single line of text. - - - - - - - - - - - - - A hyphenation char. Can appear only at the end of a line. - - - - - - - - - - - - - - - - - - - - - Pixel coordinates based on the left-hand top corner of an image which define a polyline on which a line of text rests. - - - - - Attribute to record language of the textline. - - - - - Correction Status. Indicates whether manual correction has been done or not. The correction status should be recorded at the highest level possible (Block, TextLine, String). - - - - - Indicates the inline base direction of this TextLine. Overrides the value on elements higher in the hierarchy. - - - - - - - - Attribute deprecated. LANG should be used instead. - - - - - Attribute to record language of the textblock. - - - - - Indicates the inline base direction of the TextBlock. - - - - - - - - - - - The xml data wrapper element XmlData is used to contain XML encoded metadata. - The content of an XmlData element can be in any namespace or in no namespace. - As permitted by the XML Schema Standard, the processContents attribute value for the - metadata in an XmlData is set to “lax”. Therefore, if the source schema and its location are - identified by means of an XML schemaLocation attribute, then an XML processor will validate - the elements for which it can find declarations. If a source schema is not identified, or cannot be - found at the specified schemaLocation, then an XML validator will check for well-formedness, - but otherwise skip over the elements appearing in the XmlData element. - - - - - - - - - - - - - Type can be used to classify and group the information within each tag element type. - - - - - Content / information value of the tag. - - - - - Description text for tag information for clarification. - - - - - Any URI for authority or description relevant information. - - - - - - - Modern OCR software stores information on glyph level. A glyph is essentially a character or ligature. - Accordingly the value for the glyph element will be defined as follows: - Pre-composed representation = base + combining character(s) (decomposed representation) - See http://www.fileformat.info/info/unicode/char/0101/index.htm - "U+0101" = (U+0061) + (U+0304) - "combining characters" ("base characters" in combination with non-spacing marks or characters which are combined to one) are represented as one "glyph", e.g. áàâ. - - Each glyph has its own coordinate information and must be separately addressable as a distinct object. - Correction and verification processes can be carried out for individual characters. - - Post-OCR analysis of the text as well as adaptive OCR algorithm must be able to record information on glyph level. - In order to reproduce the decision of the OCR software, optional characters must be recorded. These are called variants. - The OCR software evaluates each variant and picks the one with the highest confidence score as the glyph. - The confidence score expresses how confident the OCR software is that a single glyph had been recognized correctly. - - The glyph elements are in order of the word. Each glyph need to be recorded to built up the whole word sequence. - - The glyph’s CONTENT attribute is no replacement for the string’s CONTENT attribute. - Due to post-processing steps such as correction the values of both attributes may be inconsistent. - - - - - - - - - - - CONTENT contains the precomposed representation (combining character) of the character from the parent String element. - The sequence position of the Gylph element matches the position of the character in the String. - - - - - - - - - - - - - This GC attribute records a float value between 0.0 and 1.0 that expresses the level of confidence for the glyph where 1 is certain. - This attribute is optional. If it is not available, the default value for the glyph is “0”. - The GC attribute semantic is the same as the WC attribute on the String element and VC on Variant element. - - - - - - - - - - - - - - - - - - Alternative (combined) character for the glyph, outlined by OCR engine or similar recognition processes. - In case the variant are two (combining) characters, two characters are outlined in one Variant element. - E.g. a Glyph element with CONTENT="m" can have a Variant element with the content "rn". - Details for different use-cases see on the samples on GitHub. - - - - - - Each Variant represents an option for the glyph that the OCR software detected as possible alternatives. - In case the variant are two (combining) characters, two characters are outlined in one Variant element. - E.g. a Glyph element with CONTENT="m" can have a Variant element with the content "rn". - Details for different use-cases see on the samples on GitHub. - - - - - - - - - - - - - This VC attribute records a float value between 0.0 and 1.0 that expresses the level of confidence for the variant where is 1 is certain. - This attribute is optional. If it is not available, the default value for the variant is “0”. - The VC attribute semantic is the same as the GC attribute on the Glyph element. - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ALTO (analyzed layout and text object) stores layout information and + OCR recognized text of pages of any kind of printed documents like books, journals and newspapers. + ALTO is a standardized XML format to store layout and content information. + It is designed to be used as an extension schema to METS (Metadata Encoding and Transmission Standard), + where METS provides metadata and structural information while ALTO contains content and physical information. + + + + + + + + Describes general settings of the alto file like measurement units and metadata + + + + + Styles define properties of layout elements. A style defined in a parent element is used as default style for all related children elements. + + + + + + Tag define properties of additional characteristic. The tags are referenced from related content element on Block or String element by attribute TAGREF via the tag ID. + This container element contains the individual elements for LayoutTags, StructureTags, RoleTags, NamedEntityTags and OtherTags + + + + + + + Describes alternative hierarchical orderings of the page (i.e. total orders over its segments, for linear text flow), + in addition to the explicit flat reading order defined by @IDNEXT on the block level, + and the implicit flat reading order implied by the segment element ordering. + + + + + + The root layout element. + + + + + + Schema version of the ALTO file. + + + + + + + + + + Element deprecated. 'Processing' should be used instead. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + There are following variation of tag types available: + LayoutTag – criteria about arrangement or graphical appearance + StructureTag – criteria about grouping or formation + RoleTag – criteria about function or mission + NamedEntityTag – criteria about assignment of terms to their relationship / meaning (NER) + OtherTag – criteria about any other characteristic not listed above, the TYPE attribute is intended to be used for classification within those. + + + + + + + + + + + + + + + + Defines one or more reading orders within the + page. Groups may be either unordered or ordered and can + contain other groups, e.g. a page containing + unrelated texts that are ordered individually + would be encoded as an UnorderedGroup containing + multiple OrderedGroups. The granularity of + elements can vary inside groups. + + + + + + + + + + + + + A reference to an element such as a block, TextLine, String, or Glyph. + + + + + + + A link to the referenced element. Valid + target elements are any block type, + TextLine, String, or Glyph. + + + + + + + Optionally annotates the role of the + referenced element in the reading order + with one or more tags. Examples could be + interlinear additions or marginalia. + + + + + + + + A group containing ordered elements (i.e. the sequence of OrderedGroup, UnorderedGroup or ElementRef subelements is ordered). + + + + + + + + + + + + + + Optionally annotates the role of the + group in the reading order + with one or more tags. Examples could be + distinguishing + parallel texts or apparatus criticus and + main text. + + + + + + + A link to the referenced element. Valid + target elements are any block type, + TextLine, or String. + + + + + + + + A group containing unordered elements (i.e. the sequence of OrderedGroup, UnorderedGroup or ElementRef subelements is arbitrary). + + + + + + + + + + + + + + + A link to the referenced element. Valid + target elements are any block type, + TextLine, or String. + + + + + + + Gives brief information about original page quality + + + + + + + + + + + + + + Gives more details about the original page quality, since QUALITY attribute gives only brief and restrictive information + + + + + + Position of the page. Could be lefthanded, righthanded, cover, foldout or single if it has no special position. + + + + + + + + + + + + Page Confidence: Confidence level of the ocr for this page. A value between 0 (unsure) and 1 (sure). + + + + + + + + + One page of a book or journal. + + + + + The area between the top line of print and the upper edge of the leaf. It may contain page number or running title. + + + + + The area between the printspace and the left border of a page. May contain margin notes. + + + + + The area between the printspace and the right border of a page. May contain margin notes. + + + + + The area between the bottom line of letterpress or writing and the bottom edge of the leaf. It may contain a page number, a signature number or a catch word. + + + + + Rectangle covering the printed area of a page. Page number and running title are not part of the print space. + + + + + + + Any user-defined class like title page. + + + + + + + + + The number of the page within the document. + + + + + The page number that is printed on the page. + + + + + + + + A link to the processing description that has been used for this page. + + + + + Estimated percentage of OCR Accuracy in range from 0 to 100 + + + + + + + + + + + + + A text style defines font properties of text. + + + + + + + A paragraph style defines formatting properties of text blocks. + + + + + Indicates the alignement of the paragraph. Could be left, right, center or justify. + + + + + + + + + + + + + Left indent of the paragraph in relation to the column. + + + + + Right indent of the paragraph in relation to the column. + + + + + Line spacing between two lines of the paragraph. Measurement calculated from baseline to baseline. + + + + + Indent of the first line of the paragraph if this is different from the other lines. A negative value indicates an indent to the left, a positive value indicates an indent to the right. + + + + + + + + + + + + + + + + + + + + + + + + + + + Group of available block types + + + + + A block of text. + + + + + A picture or image. + + + + + A graphic used to separate blocks. Usually a line or rectangle. + + + + + A block that consists of other blocks + + + + + + + Base type for any kind of block on the page. + + + + + + + + + + + + + + + Tells the rotation of e.g. text or illustration within the block. The value is in degree counterclockwise. + + + + + The next block in reading order of the page (if ReadingOrder is not specified, and elements are not in order). + + + + + Correction Status. Indicates whether manual correction has been done or not. The correction status should be recorded at the highest level possible (Block, TextLine, String). + + + + + + + A white space. + + + + + + + + + + Type of the substitution (if any). + + + + + + + + + + + + + + + Word Confidence: Confidence level of the ocr for this string. A value between 0 (unsure) and 1 (sure). + + + + + + + + + + Any alternative for the word. + Alternative can outline a variant of writing by new typing / spelling rules, typically manually done or by dictionary replacements. + The above sample is an old composed character "Æ" of ancient time, which is replaced now by "Ä". + As variant are meant alternatives of the real printed content which are options outlined by the text recognition process. + Similar sample: "Straße" vs. "Strasse". Such alternatives are not coming from text recognition. + + + + + + + Identifies the purpose of the alternative. + + + + + + + + A sequence of chars. Strings are separated by white spaces or hyphenation chars. + + + + + + + + + + + + + + + + + + + + Content of the substitution. + + + + + + Confidence level of each character in that string. A list of numbers, one number between 0 (sure) and 9 (unsure) for each character. + + + + + Correction Status. Indicates whether manual correction has been done or not. The correction status should be recorded at the highest level possible (Block, TextLine, String). + + + + + Attribute to record language of the string. The language should be recorded at the highest level possible. + + + + + + A region on a page + + + + + + + + + + + + + + + + + + A list of points + + + + + + Describes the bounding shape of a block, if it is not rectangular. + + + + + + + + + + Describes the inline base direction and line orientation of a line or of all lines inside a text block. + The meaning of these terms is defined by the W3C writing modes document: + These values should correspond to the base direction set in the BiDi algorithm to the respective elements during Unicode encoding. A value of "ttb" (top-to-bottom) implies a base direction of left-to-right, a value of "btt" (bottom-to-top) a base direction of right-to-left. + + + + + + + + + + + A polygon shape. + + + + + + An ellipse shape. HPOS and VPOS describe the center of the ellipse. + HLENGTH and VLENGTH are the width and height of the described ellipse. + The attribute ROTATION tells the rotation of the e.g. text or + illustration within the block. The value is in degrees counterclockwise. + + + + + + + + + + A circle shape. HPOS and VPOS describe the center of the circle. + + + + + + + + Formatting attributes. Note that these attributes are assumed to be inherited from ancestor elements of the document hierarchy. + + + + The font name. + + + + + + + The font size, in points (1/72 of an inch). + + + + + Font color as RGB value + + + + + + + Serif or Sans-Serif + + + + + + + + + fixed or proportional + + + + + + + + + + + All measurement values inside the alto file are related to + this unit, except the font size. + Coordinates as being used in HPOS and VPOS are absolute coordinates referring to the upper-left corner of a page. + The upper left corner of the page is defined as coordinate (0/0). + + values meaning: + mm10: 1/10th of millimeter + inch1200: 1/1200th of inch + pixel: 1 pixel + + The values for pixel will be related to the resolution of the image based + on which the layout is described. Incase the original image is not known + the scaling factor can be calculated based on total width and height of + the image and the according information of the PAGE element. + + + + + + + + + + + Information to identify the image file from which the OCR text was created. + + + + + + + + + + + + + + + + + + + A unique identifier for the image file. This is drawn from MIX. + This identifier must be unique within the local system. + To facilitate file sharing or interoperability with other systems, fileIdentifierLocation may be added to designate the system or application where the identifier is unique. + + + + + + A location qualifier, i.e., a namespace. + + + + + + + + + + + + + + A unique identifier for the document. + This identifier must be unique within the local system. + To facilitate file sharing or interoperability with other systems, documentIdentifierLocation may be added to designate the system or application where the identifier is unique. + + + + + + A location qualifier, i.e., a namespace. + + + + + + + + Deprecated. processingStepType should be used instead. + Information on how the text was created, including preprocessing, OCR processing, and postprocessing steps. Where possible, this draws from MIX's change history. + + + + + + + + + + Description of the processing step. + + + + + Classification of the category of operation, how the file was created, including generation, modification, preprocessing, postprocessing or any other steps. + + + + + Date or DateTime the image was processed. + + + + + Identifies the organizationlevel producer(s) of the processed image. + + + + + An ordinal listing of the image processing steps performed. For example, "image despeckling." + + + + + A description of any setting of the processing application. For example, for a multi-engine OCR application this might include the engines which were used. Ideally, this description should be adequate so that someone else using the same application can produce identical results. + + + + + + + + + + + + + + + + + + + + + Information about a software application. Where applicable, the preferred method for determining this information is by selecting Help -- About. + + + + + The name of the organization or company that created the application. + + + + + The name of the application. + + + + + The version of the application. + + + + + A description of any important characteristics of the application, especially for non-commercial applications. For example, if a non-commercial application is built using commercial components, e.g., an OCR engine SDK. Those components should be mentioned here. + + + + + + + + + + List of any combination of font styles + + + + + + + + + + + + + + + + + + + + + + + A block that consists of other blocks + + + + + + + + + A user defined string to identify the type of composed block (e.g. table, advertisement, ...) + + + + + An ID to link to an image which contains only the composed block. The ID and the file link is defined in the related METS file. + + + + + + + + A picture or image. + + + + + + A user defined string to identify the type of illustration like photo, map, drawing, chart, ... + + + + + A link to an image which contains only the illustration. + + + + + + + + A graphic used to separate blocks. Usually a line or rectangle. + + + + + + + + A block of text. + + + + + + + A single line of text. + + + + + + + + + + + + + A hyphenation char. Can appear only at the end of a line. + + + + + + + + + + + + + + + + + + + + + Pixel coordinates based on the left-hand top corner of an image which define a polyline on which a line of text rests. + + + + + Attribute to record language of the textline. + + + + + Correction Status. Indicates whether manual correction has been done or not. The correction status should be recorded at the highest level possible (Block, TextLine, String). + + + + + Indicates the inline base direction of this TextLine. Overrides the value on elements higher in the hierarchy. + + + + + + + + Attribute deprecated. LANG should be used instead. + + + + + Attribute to record language of the textblock. + + + + + Indicates the inline base direction of the TextBlock. + + + + + + + + + + + The xml data wrapper element XmlData is used to contain XML encoded metadata. + The content of an XmlData element can be in any namespace or in no namespace. + As permitted by the XML Schema Standard, the processContents attribute value for the + metadata in an XmlData is set to “lax”. Therefore, if the source schema and its location are + identified by means of an XML schemaLocation attribute, then an XML processor will validate + the elements for which it can find declarations. If a source schema is not identified, or cannot be + found at the specified schemaLocation, then an XML validator will check for well-formedness, + but otherwise skip over the elements appearing in the XmlData element. + + + + + + + + + + + + + Type can be used to classify and group the information within each tag element type. + + + + + Content / information value of the tag. + + + + + Description text for tag information for clarification. + + + + + Any URI for authority or description relevant information. + + + + + + + Modern OCR software stores information on glyph level. A glyph is essentially a character or ligature. + Accordingly the value for the glyph element will be defined as follows: + Pre-composed representation = base + combining character(s) (decomposed representation) + See http://www.fileformat.info/info/unicode/char/0101/index.htm + "U+0101" = (U+0061) + (U+0304) + "combining characters" ("base characters" in combination with non-spacing marks or characters which are combined to one) are represented as one "glyph", e.g. áàâ. + + Each glyph has its own coordinate information and must be separately addressable as a distinct object. + Correction and verification processes can be carried out for individual characters. + + Post-OCR analysis of the text as well as adaptive OCR algorithm must be able to record information on glyph level. + In order to reproduce the decision of the OCR software, optional characters must be recorded. These are called variants. + The OCR software evaluates each variant and picks the one with the highest confidence score as the glyph. + The confidence score expresses how confident the OCR software is that a single glyph had been recognized correctly. + + The glyph elements are in order of the word. Each glyph need to be recorded to built up the whole word sequence. + + The glyph’s CONTENT attribute is no replacement for the string’s CONTENT attribute. + Due to post-processing steps such as correction the values of both attributes may be inconsistent. + + + + + + + + + + + CONTENT contains the precomposed representation (combining character) of the character from the parent String element. + The sequence position of the Gylph element matches the position of the character in the String. + + + + + + + + + + + + + This GC attribute records a float value between 0.0 and 1.0 that expresses the level of confidence for the glyph where 1 is certain. + This attribute is optional. If it is not available, the default value for the glyph is “0”. + The GC attribute semantic is the same as the WC attribute on the String element and VC on Variant element. + + + + + + + + + + + + + + + + + + Alternative (combined) character for the glyph, outlined by OCR engine or similar recognition processes. + In case the variant are two (combining) characters, two characters are outlined in one Variant element. + E.g. a Glyph element with CONTENT="m" can have a Variant element with the content "rn". + Details for different use-cases see on the samples on GitHub. + + + + + + Each Variant represents an option for the glyph that the OCR software detected as possible alternatives. + In case the variant are two (combining) characters, two characters are outlined in one Variant element. + E.g. a Glyph element with CONTENT="m" can have a Variant element with the content "rn". + Details for different use-cases see on the samples on GitHub. + + + + + + + + + + + + + This VC attribute records a float value between 0.0 and 1.0 that expresses the level of confidence for the variant where is 1 is certain. + This attribute is optional. If it is not available, the default value for the variant is “0”. + The VC attribute semantic is the same as the GC attribute on the Glyph element. + + + + + + + + + + + diff --git a/tests/resources/bl_records.json b/tests/resources/bl_records.json index b6505886e..8c8ecb083 100644 --- a/tests/resources/bl_records.json +++ b/tests/resources/bl_records.json @@ -1 +1 @@ -{"lines": [{"prediction": "238", "cuts": [[39, 39], [65, 65], [96, 96]], "confidences": [0.9999942779541016, 0.9999815225601196, 0.9999997615814209], "line": {"boundary": [[1364, 228], [1366, 191], [1382, 177], [1444, 177], [1473, 202], [1479, 226], [1452, 241], [1380, 239], [1368, 231]], "baseline": [[1366, 230], [1440, 230], [1480, 227]], "id": "214dff1d-3871-4604-8438-18c0ae332b0d", "type": "baselines"}}, {"prediction": "\u0648\u0644\u0627 \u064a\u0639\u062a\u0646\u064a \u0628\u0642\u0636\u0627\u0621 \u062d\u0627\u062c\u0629 \u0645\u0636\u0637\u0631 \u0645\u0644\u0647\u0648\u0641\u060c \u0641\u0627\u0655\u0646\u0647 \u0645\u0646 \u0627\u0644\u0642\u0627\u0633\u064a\u0629 \u0642\u0644\u0648\u0628\u0647\u0645\u060c \u0627\u0644\u0645\u0639\u0631\u0636\u064a\u0646 \u0639\u0646", "cuts": [[1291, 1291], [1266, 1273], [1254, 1260], [1235, 1241], [1223, 1223], [1204, 1210], [1192, 1192], [1179, 1179], [1167, 1167], [1136, 1136], [1124, 1124], [1111, 1111], [1086, 1086], [1055, 1061], [1043, 1043], [1018, 1024], [999, 999], [981, 981], [956, 962], [937, 937], [913, 919], [900, 900], [875, 881], [838, 838], [819, 819], [795, 801], [782, 782], [770, 770], [751, 751], [732, 732], [714, 714], [670, 670], [646, 658], [639, 639], [627, 633], [621, 621], [615, 615], [602, 602], [577, 584], [565, 565], [540, 540], [515, 521], [503, 509], [497, 497], [484, 484], [459, 466], [447, 447], [428, 428], [410, 410], [385, 391], [379, 379], [360, 360], [348, 348], [329, 329], [310, 310], [286, 292], [273, 273], [248, 255], [242, 242], [230, 230], [211, 211], [192, 192], [174, 174], [149, 155], [118, 118], [99, 106], [68, 75], [56, 56], [31, 31]], "confidences": [0.9918296933174133, 0.9999946355819702, 0.9999945163726807, 0.9999985694885254, 0.9999771118164062, 0.9999879598617554, 0.9987093210220337, 0.9987457990646362, 0.9997931122779846, 0.999688982963562, 0.9999251365661621, 0.587072491645813, 0.9999754428863525, 0.99989914894104, 0.9920154809951782, 0.9999525547027588, 0.9999878406524658, 0.9997779726982117, 0.9999771118164062, 0.9966135621070862, 0.9999631643295288, 0.9998565912246704, 0.9999505281448364, 0.9981879591941833, 0.8379210829734802, 0.9999366998672485, 0.9966161847114563, 0.9895930290222168, 0.9999837875366211, 0.9999969005584717, 0.8669806122779846, 0.974852979183197, 0.9999998807907104, 0.9999897480010986, 0.9999994039535522, 0.9228501319885254, 0.9999959468841553, 0.9999970197677612, 0.9999334812164307, 0.9997324347496033, 0.9999984502792358, 0.9917014241218567, 0.9999793767929077, 1.0, 0.9999970197677612, 0.9935858845710754, 0.9999581575393677, 0.8294568061828613, 0.9999990463256836, 0.9999179840087891, 0.9999973773956299, 0.9964264035224915, 0.9883396625518799, 0.7585844993591309, 0.962102472782135, 0.8603035807609558, 0.9998493194580078, 0.9999865293502808, 0.9999082088470459, 0.9998868703842163, 0.999321699142456, 0.9835970997810364, 0.8893908262252808, 0.9999939203262329, 0.9998082518577576, 0.9999799728393555, 0.9999867677688599, 0.5397316217422485, 0.8847019076347351], "line": {"boundary": [[167, 337], [177, 290], [216, 288], [233, 302], [255, 288], [278, 300], [309, 282], [329, 300], [356, 296], [387, 276], [415, 294], [452, 300], [465, 292], [487, 298], [508, 278], [534, 278], [547, 288], [567, 278], [590, 298], [614, 278], [651, 276], [680, 298], [693, 292], [736, 302], [769, 280], [797, 282], [814, 298], [840, 296], [865, 280], [890, 298], [914, 278], [951, 292], [984, 265], [996, 265], [1021, 288], [1056, 280], [1072, 292], [1097, 282], [1113, 296], [1132, 280], [1179, 306], [1204, 282], [1228, 294], [1265, 284], [1298, 311], [1331, 290], [1362, 296], [1428, 280], [1491, 335], [1463, 335], [1446, 350], [1401, 335], [1380, 350], [1347, 341], [1313, 362], [1288, 345], [1270, 350], [1259, 341], [1212, 339], [1189, 346], [1171, 331], [1093, 348], [1066, 335], [1003, 339], [978, 362], [941, 337], [910, 348], [853, 352], [808, 327], [783, 346], [732, 327], [701, 350], [682, 350], [664, 335], [602, 335], [569, 346], [547, 327], [499, 348], [458, 343], [440, 358], [405, 333], [345, 335], [327, 348], [292, 337], [245, 350], [226, 335], [171, 348]], "baseline": [[169, 339], [269, 335], [304, 329], [1288, 329], [1368, 331], [1389, 335], [1492, 337]], "id": "f8a7011f-22a0-4aa6-b9e8-dbf130eec847", "type": "baselines"}}, {"prediction": "\u0631\u0628\u0647\u0645\u060c \u0642\u0644\u0628\u0647 \u0628\u0639\u064a\u062f \u0645\u0646 \u0627\u0644\u0627\u0653\u062e\u0631\u0629\u060c \u0645\u062a\u0639\u0644\u0642 \u0628\u0627\u0644\u062f\u0646\u064a\u0627\u060c\u0639\u0644\u0645\u0647 \u062f\u0643\u0627\u0646\u0647\u060c \u0648\u064a\u062a\u0627\u0654\u0643\u0644 \u0648\u064a\u0631\u062a\u0632\u0642\u060c \u0648\u0644\u0627 \u064a\u0639\u0627\u0645\u0644", "cuts": [[1302, 1302], [1280, 1280], [1269, 1269], [1241, 1241], [1224, 1224], [1201, 1207], [1190, 1190], [1179, 1179], [1168, 1168], [1151, 1151], [1134, 1140], [1123, 1123], [1106, 1106], [1089, 1095], [1078, 1078], [1050, 1055], [1039, 1039], [1016, 1016], [988, 994], [982, 982], [966, 971], [954, 960], [949, 949], [926, 926], [909, 909], [893, 893], [876, 876], [853, 859], [842, 842], [831, 831], [808, 808], [797, 797], [780, 780], [747, 758], [741, 741], [730, 730], [719, 719], [702, 702], [685, 685], [674, 674], [662, 662], [646, 646], [629, 629], [612, 612], [589, 589], [573, 573], [550, 556], [539, 539], [522, 522], [500, 505], [494, 494], [477, 477], [460, 466], [443, 449], [432, 432], [415, 415], [404, 404], [393, 393], [382, 387], [376, 376], [354, 359], [320, 331], [314, 314], [292, 292], [281, 281], [264, 264], [253, 253], [230, 230], [196, 202], [180, 185], [168, 174], [146, 152], [135, 140], [112, 118], [107, 107], [84, 90], [73, 73], [56, 56], [39, 45]], "confidences": [0.999483585357666, 0.9989271759986877, 0.9999568462371826, 0.9999847412109375, 0.9999631643295288, 0.9999524354934692, 0.9999338388442993, 0.9999792575836182, 0.9999816417694092, 0.9999970197677612, 0.9998041987419128, 0.9913369417190552, 0.9999105930328369, 0.9999866485595703, 0.9997265934944153, 0.9998457431793213, 0.9999898672103882, 0.9658181667327881, 0.9998805522918701, 0.9999202489852905, 0.9999966621398926, 0.9999680519104004, 0.6977024078369141, 0.681415855884552, 0.9998468160629272, 0.999790370464325, 0.998950719833374, 0.9989398121833801, 0.9998928308486938, 0.9993798732757568, 0.9988120794296265, 0.9999618530273438, 0.978205144405365, 0.9999402761459351, 0.9968582391738892, 0.9899797439575195, 0.9999998807907104, 0.9918898940086365, 1.0, 0.6370328664779663, 0.9123554229736328, 0.9965428709983826, 0.9990838766098022, 0.6425076127052307, 0.999977707862854, 0.9999984502792358, 0.9999998807907104, 0.9999978542327881, 0.5949130058288574, 0.9999992847442627, 0.998330295085907, 0.863884687423706, 0.9997449517250061, 0.9999986886978149, 0.9999614953994751, 0.9998691082000732, 0.9999910593032837, 0.7401690483093262, 0.9997996687889099, 0.999140739440918, 0.9999452829360962, 0.9999958276748657, 0.9999629259109497, 0.999981164932251, 0.9999955892562866, 0.9999098777770996, 0.9996079802513123, 0.8690406680107117, 0.9999758005142212, 0.9999970197677612, 0.9999972581863403, 0.999855637550354, 0.9997760653495789, 0.9999991655349731, 0.9998064637184143, 0.9998438358306885, 0.8385894894599915, 0.9975091218948364, 0.9999769926071167], "line": {"boundary": [[161, 405], [165, 380], [189, 358], [206, 364], [224, 356], [257, 372], [276, 354], [298, 352], [335, 378], [384, 356], [393, 366], [413, 360], [432, 376], [467, 372], [477, 380], [516, 345], [528, 345], [571, 374], [600, 380], [639, 345], [670, 345], [713, 374], [754, 356], [787, 372], [805, 358], [844, 368], [875, 356], [904, 382], [941, 356], [961, 372], [982, 368], [1007, 382], [1029, 364], [1060, 378], [1087, 354], [1113, 350], [1150, 378], [1165, 372], [1204, 383], [1222, 368], [1284, 383], [1325, 358], [1384, 382], [1452, 380], [1465, 391], [1471, 415], [1440, 428], [1403, 424], [1385, 440], [1352, 413], [1317, 426], [1294, 413], [1274, 426], [1257, 419], [1231, 426], [1204, 409], [1169, 430], [1091, 409], [1044, 428], [1009, 407], [941, 415], [923, 426], [902, 419], [885, 424], [871, 413], [814, 424], [799, 411], [771, 422], [705, 405], [686, 415], [600, 407], [580, 422], [528, 411], [504, 428], [489, 428], [471, 415], [458, 422], [384, 424], [337, 405], [315, 422], [274, 405], [255, 421], [218, 409], [191, 426], [165, 419]], "baseline": [[163, 407], [1251, 407], [1325, 409], [1378, 417], [1473, 417]], "id": "625a33bb-09c9-4b52-a700-b196e8fd21dc", "type": "baselines"}}, {"prediction": "\u0627\u0644\u0644\u0647 \u0628\u0639\u0644\u0645\u0647 \u0627\u0655\u0644\u0627 \u0642\u0644\u064a\u0644\u0627\u060c \u064a\u0633\u0643\u062a \u0639\u0646 \u0627\u0644\u062d\u0642 \u062e\u0634\u064a\u0629 \u0633\u0642\u0648\u0637 \u0645\u0646\u0632\u0644\u062a\u0647\u060c \u0648\u064a\u0645\u0627\u0644\u064a\u0654 \u0639\u0644\u0649 \u0627\u0644\u0628\u0627\u0637\u0644 \u0637\u0644\u0628\u0627", "cuts": [[1285, 1285], [1274, 1280], [1263, 1263], [1258, 1258], [1236, 1241], [1230, 1230], [1214, 1214], [1198, 1198], [1181, 1181], [1159, 1165], [1143, 1148], [1137, 1137], [1126, 1132], [1116, 1121], [1105, 1110], [1088, 1094], [1077, 1077], [1066, 1066], [1050, 1050], [1034, 1039], [1023, 1028], [1006, 1006], [990, 995], [979, 979], [957, 962], [935, 935], [897, 897], [869, 875], [853, 853], [831, 831], [804, 809], [798, 798], [787, 787], [760, 760], [744, 744], [711, 716], [694, 694], [667, 667], [645, 645], [629, 629], [612, 618], [596, 602], [574, 574], [558, 558], [525, 525], [498, 503], [487, 492], [476, 476], [459, 465], [443, 448], [432, 432], [421, 421], [399, 405], [383, 388], [377, 377], [355, 355], [339, 339], [323, 323], [312, 312], [295, 295], [279, 284], [262, 268], [252, 252], [230, 230], [213, 213], [180, 186], [175, 175], [164, 170], [153, 153], [137, 142], [120, 120], [104, 104], [66, 71], [49, 55], [38, 38], [22, 22], [11, 16]], "confidences": [0.6223369240760803, 0.999977707862854, 0.9996325969696045, 0.9976205229759216, 0.9999915361404419, 0.9999442100524902, 0.9999935626983643, 0.9986664056777954, 0.9931642413139343, 0.999994158744812, 0.99997878074646, 0.9995927214622498, 0.9999953508377075, 0.9999521970748901, 0.9999961853027344, 0.9999990463256836, 0.9987659454345703, 0.9996764659881592, 0.9999899864196777, 0.9999946355819702, 0.9998693466186523, 0.9999508857727051, 0.9999494552612305, 0.9999960660934448, 0.9999898672103882, 0.9999620914459229, 0.9999936819076538, 0.9995738863945007, 0.9997065663337708, 0.9967997074127197, 0.9996978044509888, 0.9999291896820068, 0.9937999844551086, 0.7420834898948669, 0.9566183090209961, 0.9999990463256836, 0.9998831748962402, 0.9999995231628418, 0.8633337020874023, 0.9998383522033691, 1.0, 0.9999995231628418, 0.9999997615814209, 1.0, 0.9999963045120239, 0.9999927282333374, 0.9999871253967285, 0.9999827146530151, 0.9999991655349731, 0.9999961853027344, 0.9995644688606262, 0.9999992847442627, 0.9997718930244446, 0.999894380569458, 1.0, 0.9999994039535522, 0.9999990463256836, 0.9999983310699463, 1.0, 0.9998666048049927, 1.0, 0.9999922513961792, 0.9998834133148193, 0.9998831748962402, 0.9995386600494385, 0.9999641180038452, 0.9991496801376343, 0.9994356036186218, 0.9781442284584045, 0.9928722381591797, 0.9813116192817688, 0.9999994039535522, 0.9999991655349731, 0.999995231628418, 0.9999226331710815, 0.9999967813491821, 0.9934727549552917], "line": {"boundary": [[175, 477], [181, 422], [191, 432], [216, 430], [241, 454], [265, 432], [315, 438], [335, 430], [364, 456], [395, 432], [432, 458], [471, 432], [508, 456], [551, 458], [586, 448], [604, 432], [649, 450], [688, 432], [711, 454], [731, 438], [768, 454], [793, 434], [816, 450], [836, 440], [846, 450], [863, 442], [877, 454], [902, 430], [931, 450], [957, 436], [980, 454], [1000, 456], [1019, 446], [1037, 456], [1111, 434], [1134, 456], [1187, 426], [1212, 444], [1220, 436], [1251, 444], [1286, 436], [1315, 456], [1339, 456], [1356, 438], [1399, 458], [1424, 438], [1450, 440], [1467, 456], [1473, 481], [1440, 497], [1413, 495], [1393, 508], [1376, 497], [1319, 493], [1288, 506], [1257, 485], [1218, 504], [1165, 491], [1134, 502], [1122, 493], [1050, 495], [1031, 485], [996, 508], [978, 508], [961, 493], [931, 493], [906, 512], [867, 487], [807, 504], [783, 485], [732, 493], [721, 504], [666, 485], [621, 504], [555, 487], [538, 502], [481, 491], [450, 508], [421, 489], [378, 504], [356, 502], [341, 489], [313, 500], [298, 487], [261, 506], [245, 504], [226, 487], [179, 497]], "baseline": [[177, 479], [298, 477], [360, 485], [403, 487], [508, 487], [573, 483], [795, 483], [818, 487], [1475, 483]], "id": "3182e755-7ae8-4ba6-843e-b9c6556619d2", "type": "baselines"}}, {"prediction": "\u0644\u0644\u0631\u0641\u0639\u0629\u060c \u0641\u0645\u0627 \u0627\u0654\u0628\u0639\u062f \u0647\u0630\u0627 \u0639\u0646 \u0627\u0644\u0644\u0647 \u0648\u0639\u0646 \u0637\u0631\u064a\u0642\u0647\u060c \u0639\u0644\u0645\u0647 \u062d\u062c\u0629 \u0639\u0644\u064a\u0647.", "cuts": [[917, 917], [901, 901], [890, 890], [868, 868], [852, 852], [836, 836], [820, 820], [799, 804], [793, 793], [772, 772], [756, 756], [740, 745], [734, 734], [724, 729], [718, 718], [708, 708], [686, 691], [665, 670], [649, 654], [633, 633], [611, 611], [595, 600], [584, 584], [557, 557], [536, 536], [525, 531], [520, 520], [504, 504], [493, 499], [477, 482], [466, 472], [445, 445], [418, 423], [391, 397], [375, 375], [359, 359], [343, 343], [327, 327], [311, 311], [295, 295], [273, 279], [263, 263], [247, 247], [225, 225], [209, 209], [188, 193], [166, 166], [139, 139], [118, 118], [97, 102], [86, 86], [64, 70], [54, 54], [43, 43], [21, 27]], "confidences": [0.9995940327644348, 0.9446550607681274, 0.9981995820999146, 0.9999864101409912, 0.6075229644775391, 0.99992835521698, 0.9997560381889343, 0.9999634027481079, 0.9998078942298889, 0.9999945163726807, 0.9999508857727051, 0.9999924898147583, 0.9999949932098389, 0.9999926090240479, 0.9998032450675964, 0.9999107122421265, 0.9999817609786987, 0.9998050332069397, 0.9999833106994629, 0.9495548605918884, 0.9993699193000793, 0.9999070167541504, 0.9915083646774292, 0.999798595905304, 0.9999779462814331, 0.9999381303787231, 0.9971952438354492, 0.9972888231277466, 0.9999881982803345, 0.9999971389770508, 0.9995827078819275, 0.9999994039535522, 0.999994158744812, 0.9999692440032959, 0.9996156692504883, 0.5591697096824646, 0.9999910593032837, 0.9997571110725403, 0.8518497347831726, 0.9999833106994629, 0.9999939203262329, 0.9998816251754761, 0.9999935626983643, 0.9927089214324951, 0.9999922513961792, 0.996820330619812, 0.9999880790710449, 0.9995105266571045, 0.9999866485595703, 0.9999912977218628, 0.9999923706054688, 0.9999964237213135, 0.9993194341659546, 0.999998927116394, 0.9977816939353943], "line": {"boundary": [[547, 549], [551, 536], [600, 508], [629, 526], [649, 510], [680, 530], [703, 526], [723, 534], [773, 512], [814, 534], [853, 514], [883, 530], [908, 510], [933, 536], [945, 524], [1013, 532], [1035, 510], [1097, 534], [1165, 514], [1200, 537], [1214, 524], [1231, 532], [1265, 506], [1302, 530], [1321, 518], [1339, 534], [1358, 518], [1382, 530], [1391, 520], [1415, 528], [1424, 518], [1448, 516], [1465, 534], [1471, 559], [1417, 596], [1389, 575], [1337, 567], [1319, 575], [1274, 567], [1245, 582], [1233, 573], [1146, 573], [1128, 563], [1093, 586], [1076, 586], [1060, 571], [1021, 567], [998, 580], [974, 569], [957, 584], [939, 584], [918, 567], [888, 584], [814, 561], [803, 569], [742, 569], [725, 559], [666, 575], [635, 559], [592, 578], [549, 563]], "baseline": [[549, 551], [582, 557], [807, 555], [966, 565], [1473, 561]], "id": "8b76a51e-29ae-48ee-9ab9-b0761c9061d2", "type": "baselines"}}, {"prediction": "\u0648\u0645\u062a\u0649 \u0631\u0627\u0654\u064a\u062a\u0645 \u0627\u0644\u0639\u0627\u0644\u0645 \u0642\u0644\u064a\u0644 \u0627\u0644\u0648\u0631\u0639 \u0641\u064a \u0643\u0644\u0627\u0645\u0647 \u060c \u064a\u062a\u0643\u0644\u0645 \u0645\u062c\u0627\u0632\u0641\u0629\u060c \u0648\u064a\u0643\u0630\u0628 \u0627\u0654\u062d\u064a\u0627\u0646\u0627\u060c", "cuts": [[1223, 1223], [1201, 1201], [1190, 1190], [1173, 1173], [1129, 1140], [1118, 1118], [1101, 1107], [1096, 1096], [1090, 1090], [1079, 1079], [1062, 1062], [1029, 1040], [1024, 1024], [1013, 1018], [996, 996], [979, 979], [968, 968], [946, 952], [919, 924], [908, 908], [891, 891], [880, 880], [863, 869], [830, 836], [819, 825], [808, 813], [797, 802], [775, 775], [747, 747], [714, 719], [703, 703], [692, 692], [647, 659], [636, 636], [614, 614], [603, 609], [587, 587], [570, 570], [559, 559], [553, 553], [526, 531], [515, 515], [504, 504], [481, 481], [465, 465], [443, 448], [415, 421], [404, 404], [376, 376], [354, 360], [343, 343], [326, 326], [310, 310], [293, 293], [266, 271], [255, 255], [238, 238], [216, 216], [199, 199], [160, 166], [122, 127], [116, 116], [105, 111], [89, 89], [72, 72], [61, 61], [50, 50], [39, 39], [28, 28]], "confidences": [0.9989548921585083, 0.9999619722366333, 0.9992412328720093, 0.9541407823562622, 0.9999735355377197, 0.9940637946128845, 0.999988317489624, 0.9999865293502808, 0.9999904632568359, 0.550645649433136, 0.9999978542327881, 0.9999892711639404, 0.9996963739395142, 0.9999991655349731, 0.5165660977363586, 0.999988317489624, 0.9995940327644348, 0.9999626874923706, 0.9998881816864014, 0.9940359592437744, 0.9996926784515381, 0.9999793767929077, 0.9998898506164551, 0.9998297691345215, 0.9897773861885071, 0.9994788765907288, 0.9995355606079102, 0.9969993829727173, 0.9985607266426086, 0.9999980926513672, 0.9996448755264282, 0.9874195456504822, 0.9999774694442749, 0.9867774844169617, 0.9744981527328491, 0.9999960660934448, 0.9999808073043823, 0.9993176460266113, 0.9999256134033203, 0.9999924898147583, 0.9999164342880249, 0.9999569654464722, 0.9999525547027588, 0.9997047781944275, 0.9999884366989136, 0.9999561309814453, 0.9999027252197266, 0.999967098236084, 0.9966025352478027, 0.9999691247940063, 0.9973816275596619, 0.9003818035125732, 0.9999942779541016, 0.9996612071990967, 0.9999988079071045, 0.9940271377563477, 0.9999754428863525, 0.9999979734420776, 0.9999998807907104, 0.9994766116142273, 0.9999978542327881, 0.9999990463256836, 0.9999949932098389, 0.9999971389770508, 0.8546275496482849, 0.9999696016311646, 0.9999052286148071, 0.9918268918991089, 0.5608442425727844], "line": {"boundary": [[161, 631], [163, 592], [185, 573], [230, 604], [257, 580], [309, 610], [341, 586], [380, 584], [423, 615], [456, 588], [508, 588], [524, 604], [559, 604], [575, 619], [612, 586], [649, 586], [682, 619], [697, 606], [729, 606], [742, 594], [793, 592], [822, 619], [853, 592], [877, 612], [896, 600], [927, 610], [949, 590], [962, 590], [990, 613], [1013, 592], [1023, 598], [1039, 588], [1060, 592], [1083, 613], [1113, 588], [1140, 602], [1163, 588], [1196, 615], [1251, 582], [1294, 621], [1309, 619], [1327, 602], [1360, 612], [1378, 608], [1389, 619], [1395, 647], [1366, 660], [1341, 649], [1321, 662], [1302, 662], [1282, 647], [1270, 658], [1226, 652], [1200, 670], [1175, 647], [1120, 645], [1087, 668], [1062, 645], [1009, 666], [970, 645], [894, 672], [867, 649], [832, 670], [799, 643], [748, 651], [688, 641], [670, 656], [647, 645], [615, 645], [586, 666], [561, 641], [483, 654], [426, 633], [397, 654], [331, 643], [311, 656], [280, 631], [228, 654], [165, 637]], "baseline": [[163, 633], [651, 633], [674, 637], [729, 637], [818, 643], [857, 641], [890, 647], [912, 647], [931, 652], [968, 643], [1011, 641], [1245, 641], [1300, 647], [1345, 645], [1397, 649]], "id": "686e1fad-8441-4e7f-87de-30b56113fbae", "type": "baselines"}}, {"prediction": "\u0648\u064a\u0633\u062a\u0639\u0645\u0644 \u0627\u0644\u0647\u0632\u0644 \u0648\u0627\u0644\u0644\u0639\u0628\u060c \u0648\u064a\u0630\u0643\u0631 \u0627\u0644\u0645\u0631\u062f\u0627\u0646\u060c \u0648\u064a\u0645\u064a\u0644 \u0627\u0655\u0644\u064a\u0647\u0645\u060c \u0627\u0654\u0648 \u0631\u0627\u0654\u064a\u062a\u0645\u0648\u0647 \u0642\u0644\u064a\u0644 \u0627\u0644\u0648\u0631\u0639 \u0641\u064a", "cuts": [[1298, 1298], [1283, 1283], [1267, 1267], [1246, 1246], [1229, 1229], [1208, 1208], [1187, 1192], [1155, 1160], [1149, 1149], [1139, 1139], [1117, 1123], [1107, 1107], [1085, 1091], [1053, 1058], [1042, 1042], [1026, 1026], [1016, 1016], [1000, 1000], [984, 984], [952, 957], [925, 925], [903, 909], [893, 893], [877, 877], [861, 861], [839, 839], [818, 818], [797, 802], [786, 791], [775, 780], [759, 759], [738, 743], [722, 722], [706, 711], [695, 695], [668, 668], [647, 658], [641, 641], [620, 620], [604, 604], [588, 588], [572, 577], [545, 545], [535, 540], [524, 529], [519, 519], [508, 508], [492, 492], [470, 470], [449, 454], [433, 438], [428, 428], [417, 422], [412, 412], [385, 390], [369, 374], [353, 358], [347, 347], [342, 342], [331, 331], [315, 315], [299, 299], [278, 278], [257, 262], [246, 246], [235, 235], [219, 219], [203, 208], [176, 182], [166, 171], [155, 160], [144, 144], [123, 123], [96, 96], [70, 75], [59, 59], [43, 48]], "confidences": [0.9960930943489075, 0.9970471262931824, 0.9999514818191528, 0.9999713897705078, 0.9975488781929016, 0.9999634027481079, 0.9999896287918091, 0.9999924898147583, 0.9999784231185913, 0.9999960660934448, 0.9997754693031311, 0.9999520778656006, 0.9999797344207764, 0.9999464750289917, 0.999251663684845, 0.9999938011169434, 0.9999744892120361, 0.9904490113258362, 0.6805958151817322, 0.9993933439254761, 0.8523104190826416, 0.9999516010284424, 0.9954115748405457, 0.9966720342636108, 0.9986212253570557, 0.9991599321365356, 0.9994064569473267, 0.9998964071273804, 0.999936580657959, 0.9998494386672974, 0.9968574047088623, 0.9996702671051025, 0.999824583530426, 0.9998010993003845, 0.9999998807907104, 0.9999876022338867, 0.9999998807907104, 0.9999998807907104, 0.9999731779098511, 0.9999935626983643, 0.9999995231628418, 0.9998869895935059, 0.9999819993972778, 0.9999923706054688, 0.9999994039535522, 0.9997376799583435, 0.9999179840087891, 0.999994158744812, 0.9999123811721802, 0.9999874830245972, 1.0, 0.9014513492584229, 0.9999948740005493, 0.9999997615814209, 0.9999998807907104, 0.9998629093170166, 0.9677855372428894, 0.9999980926513672, 0.9946457147598267, 0.9999970197677612, 0.972520649433136, 0.999996542930603, 0.9999895095825195, 0.9999986886978149, 0.9621902108192444, 0.9999395608901978, 0.9999432563781738, 0.9999014139175415, 0.9999983310699463, 0.999998927116394, 0.999935507774353, 0.9999979734420776, 0.9999970197677612, 0.9999983310699463, 0.9999921321868896, 0.9999868869781494, 0.9999967813491821], "line": {"boundary": [[155, 727], [159, 701], [198, 666], [222, 680], [239, 672], [270, 682], [300, 660], [327, 682], [346, 664], [391, 664], [413, 682], [434, 686], [471, 676], [493, 656], [530, 684], [567, 656], [592, 680], [615, 688], [656, 664], [674, 666], [693, 684], [717, 668], [736, 686], [785, 682], [795, 690], [822, 670], [851, 668], [886, 690], [916, 666], [935, 670], [951, 686], [968, 672], [1005, 666], [1027, 686], [1052, 691], [1060, 684], [1103, 691], [1136, 666], [1169, 670], [1194, 690], [1220, 668], [1255, 682], [1280, 666], [1306, 686], [1325, 670], [1352, 690], [1376, 680], [1403, 691], [1446, 686], [1456, 719], [1442, 736], [1366, 725], [1345, 727], [1325, 742], [1311, 742], [1290, 725], [1233, 738], [1198, 723], [1177, 736], [1155, 725], [1120, 723], [1087, 736], [1056, 719], [1029, 734], [980, 723], [962, 736], [947, 736], [931, 723], [914, 723], [869, 736], [853, 723], [824, 727], [797, 719], [779, 732], [742, 725], [703, 740], [684, 728], [623, 728], [608, 742], [578, 719], [547, 732], [528, 725], [481, 732], [469, 723], [436, 732], [407, 717], [348, 736], [304, 721], [245, 744], [216, 727], [179, 736], [161, 727]], "baseline": [[157, 728], [187, 727], [270, 730], [313, 721], [403, 719], [460, 713], [526, 721], [900, 719], [1457, 721]], "id": "9328cfe4-3094-4550-8d35-93480796fc10", "type": "baselines"}}, {"prediction": "\u0627\u0644\u0645\u0627\u0654\u0643\u0644 \u0648\u0627\u0644\u0645\u0634\u0631\u0628\u060c \u0648\u0627\u0644\u0645\u062f\u062e\u0644 \u0648\u0627\u0644\u0645\u062e\u0631\u062c\u060c \u0644\u0627 \u064a\u0628\u0627\u0644\u064a \u0645\u0627 \u0627\u0654\u0643\u0644 \u062d\u0644\u0627\u0644\u0627 \u0643\u0627\u0646 \u0627\u0654\u0648 \u062d\u0631\u0627\u0645\u0627\u060c", "cuts": [[1298, 1304], [1291, 1291], [1273, 1273], [1254, 1260], [1248, 1248], [1242, 1242], [1217, 1223], [1180, 1192], [1173, 1173], [1155, 1155], [1142, 1142], [1124, 1124], [1105, 1105], [1080, 1080], [1049, 1049], [1018, 1018], [993, 1000], [987, 987], [969, 969], [956, 956], [937, 937], [919, 919], [888, 888], [869, 869], [826, 838], [820, 820], [795, 801], [788, 788], [770, 770], [739, 739], [720, 720], [695, 695], [671, 671], [646, 658], [633, 639], [621, 627], [596, 608], [590, 590], [577, 577], [565, 565], [553, 553], [540, 540], [503, 509], [490, 490], [472, 478], [453, 459], [441, 447], [435, 435], [428, 428], [404, 410], [366, 379], [348, 348], [329, 329], [310, 323], [298, 298], [286, 292], [255, 267], [248, 248], [224, 230], [211, 211], [180, 186], [174, 174], [168, 168], [155, 155], [124, 130], [106, 106], [87, 87], [68, 68], [56, 56], [37, 43], [25, 25]], "confidences": [0.9999150037765503, 0.9998385906219482, 0.999996542930603, 0.9999994039535522, 0.9999864101409912, 0.9999818801879883, 0.9999929666519165, 0.999998927116394, 0.9999581575393677, 0.9999958276748657, 0.9999880790710449, 0.9997920393943787, 0.9999971389770508, 0.9999898672103882, 0.9999960660934448, 0.9710601568222046, 0.996277391910553, 0.9998601675033569, 0.922956645488739, 0.9978814721107483, 0.999930739402771, 0.9997755885124207, 0.9413175582885742, 0.9998894929885864, 0.9993183612823486, 0.999767005443573, 0.9998904466629028, 0.6034071445465088, 0.9915944933891296, 0.999853253364563, 0.9953317046165466, 0.9986577033996582, 0.9640184640884399, 0.9999998807907104, 0.9999990463256836, 0.9999948740005493, 0.9999983310699463, 0.9997009038925171, 0.9999697208404541, 0.9999998807907104, 0.9997711777687073, 0.9742012023925781, 0.9999996423721313, 0.9999728202819824, 0.9999784231185913, 0.9999963045120239, 0.9999946355819702, 0.9767754077911377, 0.9991446733474731, 0.9999916553497314, 0.9999847412109375, 0.9995253086090088, 0.9999663829803467, 0.9999977350234985, 0.9770731925964355, 0.9999951124191284, 0.9999915361404419, 0.9999960660934448, 0.9701045751571655, 0.9999648332595825, 0.9999688863754272, 0.9998500347137451, 0.9999626874923706, 0.9992308616638184, 0.9999960660934448, 0.9513243436813354, 0.9999858140945435, 0.9998613595962524, 0.9998170733451843, 0.9996731281280518, 0.9003341794013977], "line": {"boundary": [[159, 783], [163, 748], [191, 732], [218, 740], [237, 758], [274, 766], [313, 730], [341, 750], [401, 744], [417, 730], [432, 730], [458, 746], [475, 742], [522, 769], [553, 742], [567, 746], [588, 732], [606, 748], [621, 742], [660, 775], [697, 742], [738, 762], [758, 744], [781, 740], [808, 760], [859, 766], [879, 748], [906, 764], [929, 742], [941, 742], [980, 771], [1013, 746], [1025, 756], [1068, 754], [1076, 762], [1103, 744], [1146, 773], [1161, 762], [1191, 771], [1212, 762], [1224, 769], [1243, 752], [1265, 764], [1292, 746], [1335, 775], [1362, 750], [1374, 754], [1401, 738], [1419, 754], [1430, 746], [1446, 750], [1465, 767], [1471, 793], [1448, 805], [1389, 803], [1360, 822], [1345, 820], [1329, 805], [1311, 816], [1288, 805], [1189, 816], [1152, 795], [1124, 814], [1101, 803], [1035, 799], [1007, 820], [994, 820], [974, 803], [947, 810], [935, 801], [885, 799], [857, 822], [834, 822], [797, 791], [779, 803], [758, 791], [738, 808], [721, 810], [707, 801], [676, 822], [643, 795], [617, 799], [606, 789], [569, 799], [551, 814], [534, 814], [510, 793], [460, 803], [403, 789], [389, 799], [350, 803], [329, 789], [294, 808], [265, 791], [222, 810], [204, 797], [171, 797], [163, 789]], "baseline": [[161, 785], [216, 791], [935, 789], [959, 795], [1472, 795]], "id": "e04b91bb-5bd9-4ec4-af42-6ae24b8437f2", "type": "baselines"}}, {"prediction": "\u0641\u0627\u062a\u0647\u0645\u0648\u0647 \u0639\u0644\u0649 \u0639\u0644\u0645\u0647 \u0648\u0639\u0644\u0649 \u062f\u064a\u0646\u0647\u060c \u0648\u0644\u0627 \u062a\u0642\u0644\u062f\u0648\u0647 \u0627\u0654\u0645\u0648\u0631\u0643\u0645\u060c \u0648\u0627\u062d\u0630\u0631\u0648\u0647 \u0627\u0654\u0646 \u064a\u0633\u0644\u0628\u0643\u0645 \u062f\u064a\u0646\u0643\u0645\u060c", "cuts": [[1304, 1304], [1293, 1293], [1283, 1283], [1266, 1266], [1245, 1245], [1228, 1228], [1207, 1207], [1185, 1191], [1169, 1169], [1147, 1147], [1131, 1131], [1099, 1104], [1082, 1082], [1066, 1066], [1044, 1044], [1028, 1028], [1001, 1012], [996, 996], [969, 969], [947, 947], [936, 936], [898, 904], [887, 887], [871, 871], [860, 860], [850, 850], [828, 828], [806, 812], [795, 801], [774, 779], [763, 768], [741, 747], [731, 731], [720, 720], [703, 703], [687, 687], [666, 666], [644, 644], [622, 628], [617, 617], [606, 612], [601, 601], [584, 584], [563, 563], [541, 541], [514, 514], [498, 498], [476, 482], [465, 465], [449, 449], [422, 422], [406, 406], [384, 384], [363, 363], [341, 341], [325, 330], [314, 319], [308, 308], [298, 298], [265, 276], [260, 260], [244, 244], [216, 216], [206, 206], [184, 184], [157, 162], [135, 141], [124, 124], [108, 108], [97, 97], [76, 76], [54, 54], [32, 32]], "confidences": [0.9997382760047913, 0.9998076558113098, 0.9998169541358948, 0.9999723434448242, 0.9999963045120239, 0.9998815059661865, 0.9978761672973633, 0.9999692440032959, 0.9999940395355225, 0.9997928738594055, 0.9998121857643127, 0.9998834133148193, 0.9999972581863403, 0.9986358284950256, 0.9999672174453735, 0.9999685287475586, 0.9999872446060181, 0.9996137022972107, 0.9999386072158813, 0.9998291730880737, 0.9996570348739624, 0.9997431635856628, 0.9989522695541382, 0.9978705644607544, 0.6706600189208984, 0.727662205696106, 0.9994146823883057, 0.9998109936714172, 0.9988961219787598, 0.9999992847442627, 0.9999957084655762, 0.9998549222946167, 0.7824696898460388, 0.9987309575080872, 0.9999728202819824, 0.9999747276306152, 0.9984544515609741, 0.9999949932098389, 0.9999949932098389, 0.9999567270278931, 0.9999990463256836, 0.9999997615814209, 1.0, 0.999970555305481, 0.9995998740196228, 0.9863488674163818, 0.9999908208847046, 0.9998534917831421, 0.989995002746582, 0.999998927116394, 0.9999957084655762, 0.9997010827064514, 0.9999995231628418, 0.9993435740470886, 0.9999997615814209, 0.9204366207122803, 0.9999145269393921, 0.9971621036529541, 0.9998090863227844, 0.9999971389770508, 0.9999977350234985, 0.999993085861206, 0.999996542930603, 0.9999635219573975, 0.9999977350234985, 0.9999561309814453, 0.9999858140945435, 0.9998942613601685, 0.9999914169311523, 0.9876537919044495, 0.9992417097091675, 0.9999997615814209, 0.9282093048095703], "line": {"boundary": [[152, 853], [171, 834], [189, 840], [228, 812], [284, 845], [329, 816], [413, 834], [446, 810], [489, 838], [516, 840], [545, 818], [563, 834], [588, 822], [619, 843], [633, 834], [649, 842], [666, 826], [688, 822], [713, 842], [754, 812], [789, 840], [832, 822], [881, 830], [920, 820], [951, 845], [962, 836], [1001, 832], [1027, 834], [1046, 851], [1081, 822], [1146, 845], [1163, 834], [1179, 840], [1204, 822], [1247, 853], [1282, 822], [1323, 847], [1335, 840], [1391, 845], [1409, 832], [1440, 828], [1462, 845], [1467, 869], [1401, 894], [1382, 881], [1348, 894], [1321, 871], [1269, 894], [1253, 894], [1226, 875], [1183, 881], [1152, 873], [1128, 890], [1095, 879], [1056, 894], [1033, 877], [1003, 888], [955, 871], [935, 888], [922, 888], [888, 867], [869, 879], [812, 879], [795, 888], [764, 869], [715, 890], [674, 877], [645, 898], [619, 875], [600, 888], [571, 871], [493, 886], [465, 869], [434, 881], [415, 875], [401, 884], [372, 877], [356, 886], [323, 875], [296, 896], [267, 875], [251, 884], [214, 875], [187, 896], [153, 867]], "baseline": [[153, 855], [228, 869], [1237, 867], [1269, 871], [1290, 867], [1309, 871], [1469, 871]], "id": "769b1e46-2664-49b4-b5ce-3849db9d0eb2", "type": "baselines"}}, {"prediction": "\u0628\u062a\u0647\u0648\u064a\u0646\u0647 \u0644\u0644\u0627\u0654\u0633\u064a\u0627\u0621 \u0627\u0644\u0635\u063a\u064a\u0631\u0629 \u0645\u0646 \u0627\u0644\u062d\u0631\u0627\u0645 \u0648\u0627\u0644\u0634\u0628\u0647\u0627\u062a\u060c \u064a\u0633\u0631\u0642 \u0628\u0630\u0644\u0643 \u0639\u0642\u0648\u0644\u0643\u0645\u060c \u0641\u064a\u0633\u062a\u062f\u0631\u062c\u0643\u0645", "cuts": [[1297, 1297], [1286, 1286], [1275, 1275], [1253, 1253], [1237, 1237], [1220, 1226], [1209, 1209], [1188, 1193], [1182, 1182], [1160, 1166], [1149, 1155], [1138, 1144], [1133, 1133], [1111, 1111], [1095, 1095], [1084, 1084], [1062, 1067], [1056, 1056], [1045, 1045], [1023, 1023], [991, 991], [974, 974], [958, 963], [941, 941], [919, 925], [914, 914], [887, 887], [859, 870], [854, 854], [843, 843], [815, 815], [799, 799], [783, 783], [766, 766], [744, 750], [739, 739], [717, 722], [706, 711], [690, 690], [668, 668], [651, 651], [629, 635], [607, 607], [580, 580], [558, 569], [553, 553], [536, 536], [509, 514], [493, 493], [454, 465], [449, 449], [438, 438], [416, 416], [405, 405], [356, 361], [345, 345], [328, 328], [306, 306], [290, 290], [268, 268], [246, 246], [224, 224], [203, 213], [197, 197], [186, 186], [164, 164], [148, 148], [131, 131], [109, 109], [82, 82], [55, 55], [27, 33]], "confidences": [0.9998189806938171, 0.9999316930770874, 0.9999616146087646, 0.9999963045120239, 0.9904739260673523, 0.9999723434448242, 0.9971580505371094, 0.9988645315170288, 0.9999966621398926, 0.9999974966049194, 0.9999973773956299, 0.9999791383743286, 0.9999858140945435, 0.9999887943267822, 0.5477295517921448, 0.9999678134918213, 0.9999643564224243, 0.8171812295913696, 0.9827367067337036, 0.9935495257377625, 0.9999936819076538, 0.999975323677063, 0.9999910593032837, 0.998406708240509, 0.9999222755432129, 0.9998999834060669, 0.9343510866165161, 0.9997228980064392, 0.7628433108329773, 0.6818570494651794, 0.950019121170044, 0.6418173313140869, 0.9943951368331909, 0.9706724882125854, 0.9999768733978271, 0.9994531273841858, 0.9995731711387634, 0.9997699856758118, 0.9988842606544495, 0.9997255206108093, 0.9999997615814209, 0.9999980926513672, 0.999735414981842, 0.9235820770263672, 0.9999998807907104, 0.9999927282333374, 0.9976077079772949, 0.9999990463256836, 0.8485846519470215, 0.9999995231628418, 0.9999078512191772, 0.9999904632568359, 0.999980092048645, 0.9999996423721313, 0.9956209063529968, 0.9999990463256836, 0.9995309114456177, 0.9999940395355225, 0.9999079704284668, 1.0, 0.9180242419242859, 0.9995797276496887, 0.9999831914901733, 0.9998835325241089, 0.9994398951530457, 0.988334059715271, 0.9999781847000122, 0.9999990463256836, 0.8295435309410095, 0.9995015859603882, 0.9999979734420776, 0.9999895095825195], "line": {"boundary": [[159, 947], [163, 923], [210, 894], [247, 920], [276, 906], [317, 920], [337, 902], [362, 916], [389, 918], [430, 892], [456, 908], [479, 900], [510, 920], [549, 896], [586, 896], [610, 918], [643, 898], [670, 921], [762, 912], [775, 900], [812, 921], [853, 898], [898, 925], [923, 902], [947, 918], [990, 898], [1019, 920], [1066, 920], [1087, 906], [1111, 921], [1136, 902], [1155, 920], [1183, 900], [1200, 902], [1218, 918], [1235, 902], [1259, 916], [1282, 896], [1298, 896], [1327, 900], [1347, 918], [1372, 912], [1391, 923], [1434, 912], [1473, 953], [1446, 970], [1428, 964], [1395, 972], [1343, 953], [1302, 962], [1276, 957], [1261, 968], [1216, 953], [1138, 957], [1099, 974], [1072, 953], [1037, 974], [1003, 957], [962, 957], [949, 970], [906, 980], [888, 964], [867, 968], [853, 957], [793, 968], [777, 957], [721, 953], [699, 966], [674, 957], [645, 968], [615, 957], [600, 966], [580, 955], [528, 957], [506, 945], [450, 968], [419, 953], [382, 976], [356, 953], [335, 966], [313, 957], [276, 955], [251, 966], [200, 955], [177, 976], [163, 974]], "baseline": [[161, 949], [241, 945], [664, 945], [705, 949], [729, 945], [822, 955], [923, 951], [1087, 951], [1107, 955], [1214, 945], [1362, 955], [1475, 954]], "id": "771803aa-5b21-4917-91a9-866b9583ac64", "type": "baselines"}}, {"prediction": "\u0645\u0646 \u062d\u064a\u062b \u0644\u0627 \u062a\u0639\u0644\u0645\u0648\u0646.", "cuts": [[343, 343], [316, 321], [294, 298], [276, 276], [258, 258], [230, 230], [199, 203], [185, 190], [172, 181], [158, 163], [149, 149], [136, 136], [118, 118], [95, 99], [77, 81], [54, 59], [32, 32]], "confidences": [0.9013516902923584, 0.9993886947631836, 0.9999945163726807, 0.9106606841087341, 0.9922044277191162, 0.9999985694885254, 0.999998927116394, 0.9999998807907104, 0.9999948740005493, 0.9999319314956665, 0.9999568462371826, 0.9999945163726807, 0.5355215072631836, 0.9999971389770508, 0.9999983310699463, 0.9999912977218628, 0.9786094427108765], "line": {"boundary": [[1109, 1025], [1146, 980], [1173, 997], [1189, 997], [1210, 976], [1231, 988], [1294, 976], [1309, 992], [1333, 984], [1348, 999], [1364, 992], [1395, 1007], [1409, 994], [1424, 1001], [1444, 997], [1473, 1027], [1454, 1029], [1411, 1056], [1380, 1031], [1347, 1046], [1300, 1029], [1274, 1036], [1263, 1025], [1241, 1036], [1191, 1036], [1171, 1050], [1118, 1025]], "baseline": [[1111, 1027], [1274, 1023], [1366, 1033], [1475, 1029]], "id": "fee112e6-da9c-4f6a-8aac-52b284d831d2", "type": "baselines"}}, {"prediction": "\u0648\u0645\u062a\u0649 \u0631\u0627\u0654\u064a\u062a\u0645 \u0627\u0644\u0639\u0627\u0644\u0645 \u064a\u0642\u0628\u0644 \u0627\u0644\u0647\u062f\u064a\u0629 \u0645\u0646 \u0627\u0644\u0645\u0633\u062a\u0641\u062a\u064a \u0648\u064a\u0641\u062a\u064a\u0647 \u0639\u0644\u0649 \u063a\u0631\u0636\u0647\u060c \u0648\u064a\u062f\u062e\u0644 \u0641\u064a", "cuts": [[1225, 1225], [1201, 1207], [1189, 1189], [1172, 1172], [1136, 1148], [1130, 1130], [1112, 1118], [1106, 1106], [1100, 1100], [1088, 1088], [1064, 1070], [1041, 1047], [1029, 1035], [1023, 1023], [1011, 1011], [993, 993], [981, 981], [957, 963], [934, 940], [928, 928], [916, 916], [898, 898], [880, 886], [850, 856], [838, 844], [827, 833], [815, 815], [797, 797], [779, 779], [761, 761], [737, 743], [726, 731], [702, 702], [678, 684], [666, 672], [654, 660], [636, 642], [613, 618], [595, 595], [583, 583], [565, 565], [553, 553], [517, 523], [505, 505], [488, 488], [476, 476], [458, 458], [446, 446], [434, 434], [410, 416], [393, 393], [375, 375], [363, 363], [327, 333], [309, 309], [291, 291], [268, 268], [238, 238], [220, 220], [196, 202], [184, 184], [167, 167], [155, 155], [125, 131], [101, 107], [59, 71], [54, 54], [36, 42]], "confidences": [0.9998977184295654, 0.9992066025733948, 0.9999544620513916, 0.9999667406082153, 0.9999969005584717, 0.9999951124191284, 0.9999479055404663, 0.8893346190452576, 0.9999771118164062, 0.9999749660491943, 0.9999734163284302, 0.9999407529830933, 0.9999978542327881, 0.888961911201477, 0.999985933303833, 0.9997301697731018, 0.9997461438179016, 0.9999942779541016, 0.9999889135360718, 0.9999947547912598, 0.7681607007980347, 0.9985297918319702, 0.9992446899414062, 0.9999771118164062, 0.9999252557754517, 0.9995318651199341, 0.9955322742462158, 0.9999263286590576, 0.9855678081512451, 0.8572127223014832, 0.9958655834197998, 0.9997792840003967, 0.8732478022575378, 0.9998902082443237, 0.9997214674949646, 0.9999871253967285, 0.999970555305481, 0.9999971389770508, 0.9999786615371704, 0.9999481439590454, 0.9997740387916565, 0.8626158833503723, 0.9999806880950928, 0.9998955726623535, 0.9999974966049194, 0.9999513626098633, 0.9972359538078308, 0.9995180368423462, 0.9999905824661255, 1.0, 0.9999990463256836, 0.9999991655349731, 0.9999984502792358, 0.9999990463256836, 0.9999250173568726, 0.9994828701019287, 0.9996166229248047, 0.995541512966156, 0.9999992847442627, 0.999984860420227, 0.9904344081878662, 0.9992062449455261, 0.9999986886978149, 0.9761358499526978, 0.999893069267273, 0.9999963045120239, 0.9997863173484802, 0.9999911785125732], "line": {"boundary": [[159, 1103], [163, 1081], [196, 1052], [224, 1072], [249, 1050], [348, 1073], [382, 1062], [393, 1070], [409, 1056], [432, 1068], [458, 1052], [487, 1079], [518, 1050], [561, 1075], [573, 1064], [623, 1052], [641, 1070], [684, 1081], [727, 1052], [760, 1073], [773, 1073], [799, 1050], [834, 1072], [849, 1066], [859, 1073], [883, 1070], [908, 1052], [927, 1066], [955, 1066], [980, 1050], [1007, 1072], [1027, 1052], [1040, 1060], [1056, 1056], [1089, 1083], [1120, 1054], [1150, 1066], [1173, 1054], [1204, 1079], [1245, 1048], [1257, 1048], [1296, 1085], [1321, 1068], [1370, 1072], [1395, 1105], [1364, 1126], [1339, 1114], [1317, 1128], [1298, 1128], [1282, 1114], [1269, 1124], [1228, 1118], [1210, 1134], [1179, 1111], [1126, 1111], [1093, 1134], [1079, 1120], [1052, 1114], [1019, 1128], [990, 1109], [953, 1122], [939, 1111], [912, 1120], [892, 1101], [853, 1124], [838, 1124], [818, 1107], [721, 1109], [692, 1134], [662, 1111], [643, 1120], [612, 1109], [584, 1120], [565, 1101], [502, 1124], [485, 1122], [465, 1103], [428, 1122], [411, 1109], [360, 1107], [350, 1099], [325, 1118], [276, 1103], [239, 1126], [214, 1109], [177, 1130], [163, 1116]], "baseline": [[161, 1105], [214, 1111], [276, 1105], [296, 1099], [421, 1103], [906, 1101], [1005, 1111], [1093, 1111], [1113, 1107], [1165, 1105], [1206, 1111], [1397, 1107]], "id": "dcda2e78-1bb5-46b5-8d9c-e59695916a0b", "type": "baselines"}}, {"prediction": "\u0627\u0644\u062a\u0627\u0654\u0648\u064a\u0644\u0627\u062a \u0648\u0627\u0644\u0634\u0628\u0647\u0627\u062a \u060c \u0643\u0645\u0633\u0627\u0654\u0644\u0629 \u0627\u0644\u0627\u0633\u062a\u062d\u0644\u0627\u0644\u060c \u0648\u0645\u0633\u0627\u0654\u0644\u0629 \u0627\u0644\u0631\u0628\u0627 \u0648\u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629\u060c \u0648\u0644\u0627 \u062a\u062c\u062f\u0648\u0646\u0647", "cuts": [[1293, 1298], [1284, 1289], [1274, 1274], [1260, 1265], [1255, 1255], [1245, 1245], [1231, 1231], [1212, 1216], [1202, 1207], [1168, 1168], [1130, 1140], [1120, 1120], [1101, 1106], [1091, 1096], [1077, 1077], [1053, 1053], [1039, 1039], [1019, 1024], [995, 995], [976, 976], [971, 971], [942, 947], [928, 928], [904, 904], [880, 885], [861, 865], [856, 856], [851, 851], [837, 837], [808, 813], [798, 803], [784, 789], [774, 779], [755, 755], [731, 731], [702, 702], [683, 688], [673, 678], [659, 659], [630, 630], [601, 611], [591, 591], [572, 572], [548, 553], [529, 529], [519, 524], [514, 514], [505, 505], [476, 481], [466, 466], [457, 457], [442, 442], [428, 428], [409, 414], [389, 394], [380, 380], [361, 361], [351, 351], [332, 332], [308, 308], [293, 298], [279, 284], [264, 264], [250, 250], [231, 236], [207, 212], [197, 197], [173, 178], [159, 168], [130, 139], [125, 125], [101, 101], [82, 82], [58, 58], [38, 38], [24, 24]], "confidences": [0.9996144771575928, 0.9999929666519165, 0.9999830722808838, 0.9999926090240479, 0.999995231628418, 0.9467358589172363, 0.999972939491272, 0.9995086193084717, 0.9998672008514404, 0.9942428469657898, 0.9999955892562866, 0.9999592304229736, 0.9999781847000122, 0.999994158744812, 0.9999866485595703, 0.999920129776001, 0.9999884366989136, 0.9986990690231323, 0.9997000694274902, 0.9911819696426392, 0.978091299533844, 0.999427855014801, 0.9999485015869141, 0.7997534275054932, 0.9999580383300781, 0.999704897403717, 0.520932137966156, 0.9891839027404785, 0.9960983991622925, 0.999637246131897, 0.9975180625915527, 0.9990247488021851, 0.9999979734420776, 0.7142682075500488, 0.9256128668785095, 1.0, 0.9999996423721313, 0.9998838901519775, 0.9999998807907104, 0.9960355162620544, 0.9999982118606567, 0.999958872795105, 0.9999998807907104, 1.0, 0.9999998807907104, 0.999992847442627, 0.9999973773956299, 0.9999991655349731, 0.9975195527076721, 0.9820659756660461, 0.9999998807907104, 0.9999421834945679, 0.9999996423721313, 0.9999991655349731, 0.9999985694885254, 0.6958007216453552, 0.9832131266593933, 0.9999997615814209, 0.9999964237213135, 0.9855285286903381, 0.9999996423721313, 0.9993840456008911, 0.9999988079071045, 0.9999823570251465, 0.9999992847442627, 0.9999185800552368, 0.9999986886978149, 0.9999874830245972, 0.9999970197677612, 0.9999932050704956, 0.9994638562202454, 0.9987408518791199, 0.999816358089447, 0.9999561309814453, 0.9999673366546631, 0.9998775720596313], "line": {"boundary": [[159, 1165], [163, 1146], [185, 1132], [210, 1146], [224, 1136], [253, 1146], [267, 1134], [286, 1138], [315, 1126], [327, 1126], [360, 1155], [389, 1130], [405, 1128], [426, 1138], [442, 1128], [467, 1148], [502, 1128], [536, 1150], [559, 1130], [578, 1146], [598, 1128], [629, 1142], [676, 1122], [707, 1151], [746, 1148], [758, 1157], [799, 1130], [836, 1132], [861, 1150], [875, 1140], [892, 1148], [912, 1130], [949, 1132], [962, 1144], [1001, 1122], [1042, 1153], [1081, 1132], [1105, 1151], [1150, 1144], [1163, 1132], [1200, 1151], [1241, 1130], [1286, 1161], [1309, 1144], [1360, 1134], [1378, 1148], [1405, 1124], [1450, 1142], [1467, 1179], [1444, 1190], [1405, 1190], [1387, 1202], [1290, 1183], [1269, 1200], [1239, 1188], [1193, 1200], [1163, 1187], [1111, 1188], [1099, 1179], [1056, 1190], [984, 1188], [961, 1179], [931, 1190], [910, 1185], [799, 1192], [762, 1179], [736, 1198], [713, 1187], [656, 1188], [623, 1179], [588, 1200], [567, 1196], [547, 1179], [526, 1196], [499, 1187], [401, 1187], [366, 1177], [345, 1194], [329, 1194], [296, 1175], [253, 1192], [220, 1185], [191, 1194], [163, 1179]], "baseline": [[161, 1167], [191, 1173], [306, 1177], [469, 1177], [493, 1181], [1469, 1181]], "id": "530f6c70-c51e-4d3c-b027-f256d70e5e3f", "type": "baselines"}}, {"prediction": "\u0645\u062a\u0639\u0641\u0641\u0627 \u0641\u064a \u0645\u0639\u064a\u0634\u062a\u0647\u060c \u062a\u0631\u0648\u0646\u0647 \u0637\u0627\u0645\u0639\u0627 \u0641\u064a \u0627\u0654\u0645\u0648\u0627\u0644 \u0627\u0644\u0646\u0627\u0633\u060c \u064a\u062f\u0627\u062e\u0644 \u0627\u0644\u0642\u0636\u0627\u0629 \u0644\u064a\u0648\u0644\u0648\u0647 \u0627\u0644\u0648\u0644\u0627\u064a\u0627\u062a\u060c", "cuts": [[1294, 1294], [1276, 1276], [1264, 1264], [1246, 1246], [1228, 1228], [1210, 1216], [1192, 1198], [1186, 1186], [1168, 1168], [1131, 1137], [1125, 1125], [1101, 1101], [1089, 1089], [1071, 1071], [1047, 1047], [1035, 1035], [1017, 1017], [999, 1005], [987, 987], [975, 975], [957, 957], [939, 939], [921, 921], [897, 903], [879, 879], [861, 867], [849, 849], [831, 831], [812, 818], [794, 800], [788, 788], [770, 770], [740, 740], [728, 734], [722, 722], [710, 710], [698, 698], [680, 680], [668, 668], [638, 638], [626, 632], [614, 620], [602, 602], [590, 596], [572, 572], [536, 536], [512, 518], [506, 506], [487, 494], [469, 475], [451, 451], [433, 433], [397, 403], [391, 391], [379, 379], [367, 367], [343, 343], [313, 313], [301, 301], [277, 289], [271, 271], [259, 259], [241, 247], [229, 229], [211, 211], [193, 193], [175, 181], [163, 169], [150, 157], [138, 138], [114, 120], [102, 108], [90, 90], [72, 78], [48, 48], [24, 24]], "confidences": [0.9999475479125977, 0.9999927282333374, 0.999996542930603, 0.9999957084655762, 0.999872088432312, 0.9999810457229614, 0.9999687671661377, 0.9999939203262329, 0.9999991655349731, 0.9942613840103149, 0.9999487400054932, 0.9999334812164307, 0.9999005794525146, 0.9999839067459106, 0.9999810457229614, 0.989007830619812, 0.9996200799942017, 0.9999685287475586, 0.6469784379005432, 0.6665834188461304, 0.7252474427223206, 0.9857919216156006, 0.9997385144233704, 0.9999765157699585, 0.9963619112968445, 0.9994021654129028, 0.9998681545257568, 0.9810250401496887, 0.9838308095932007, 0.9998787641525269, 0.9988665580749512, 0.9999058246612549, 0.6534377336502075, 0.9997734427452087, 0.631395697593689, 0.9998962879180908, 0.9999980926513672, 0.9978647828102112, 0.9999958276748657, 0.9721218943595886, 0.9996869564056396, 0.9999868869781494, 0.9235882759094238, 0.9999985694885254, 0.9997712969779968, 0.826903223991394, 0.999829888343811, 0.9994933605194092, 0.9999945163726807, 0.9999911785125732, 0.9996364116668701, 0.9999428987503052, 0.9976553916931152, 0.9999971389770508, 0.71103435754776, 0.9999946355819702, 0.9999889135360718, 0.9995948672294617, 0.9999077320098877, 0.9999817609786987, 0.9998291730880737, 0.999971866607666, 0.9999986886978149, 0.9999973773956299, 0.9999977350234985, 0.9933046698570251, 0.9999994039535522, 0.9999998807907104, 0.9999985694885254, 0.9998321533203125, 0.9999990463256836, 0.9999988079071045, 0.9999668598175049, 0.9999896287918091, 0.9999967813491821, 0.9679267406463623], "line": {"boundary": [[159, 1249], [167, 1220], [245, 1204], [267, 1204], [282, 1216], [300, 1204], [331, 1224], [348, 1224], [370, 1204], [391, 1220], [411, 1204], [432, 1216], [460, 1208], [473, 1220], [530, 1206], [555, 1226], [577, 1208], [590, 1216], [656, 1210], [697, 1235], [732, 1210], [762, 1206], [789, 1224], [816, 1208], [840, 1224], [867, 1200], [906, 1227], [961, 1194], [992, 1222], [1023, 1210], [1050, 1233], [1076, 1216], [1109, 1231], [1128, 1216], [1154, 1229], [1214, 1216], [1233, 1231], [1272, 1229], [1286, 1243], [1350, 1198], [1362, 1198], [1409, 1227], [1430, 1224], [1477, 1257], [1458, 1257], [1430, 1272], [1356, 1270], [1345, 1263], [1309, 1292], [1272, 1266], [1222, 1280], [1212, 1270], [1146, 1261], [1124, 1280], [1109, 1282], [1081, 1278], [1048, 1257], [1029, 1268], [959, 1268], [947, 1259], [916, 1288], [904, 1288], [877, 1265], [824, 1278], [783, 1261], [729, 1263], [707, 1280], [688, 1280], [668, 1263], [643, 1274], [598, 1261], [563, 1282], [538, 1263], [477, 1266], [430, 1257], [409, 1274], [345, 1276], [319, 1257], [270, 1276], [257, 1265], [230, 1272], [214, 1261], [163, 1259]], "baseline": [[161, 1251], [272, 1255], [292, 1259], [1424, 1257], [1478, 1258]], "id": "78d4ba39-b9a2-42e6-b87c-1914573b9df8", "type": "baselines"}}, {"prediction": "\u0645\u0639 \u0634\u0631\u0647\u0647 \u0639\u0644\u0649 \u0627\u0644\u062f\u0646\u064a\u0627\u060c \u0648\u0642\u0644\u0629 \u0648\u0631\u0639\u0647 \u0648\u0645\u0628\u0627\u0644\u0627\u062a\u0647 \u0628\u0627\u0644\u062d\u0644\u0627\u0644 \u0648\u0627\u0644\u062d\u0631\u0627\u0645\u060c \u0641\u0627\u062a\u0647\u0645\u0648\u0647 \u0639\u0644\u0649 \u0639\u0644\u0645\u0647", "cuts": [[1287, 1287], [1265, 1265], [1232, 1237], [1221, 1221], [1193, 1199], [1172, 1172], [1155, 1155], [1128, 1133], [1111, 1111], [1095, 1095], [1078, 1078], [1046, 1051], [1035, 1040], [1024, 1024], [1007, 1013], [991, 991], [980, 980], [964, 969], [953, 953], [931, 936], [920, 920], [898, 898], [881, 887], [870, 870], [843, 849], [832, 832], [810, 816], [788, 788], [772, 772], [745, 750], [734, 734], [712, 712], [695, 695], [684, 684], [668, 673], [657, 662], [646, 646], [630, 630], [602, 613], [597, 597], [586, 586], [575, 575], [547, 547], [526, 531], [515, 520], [498, 498], [460, 471], [449, 454], [432, 438], [422, 427], [400, 400], [378, 383], [361, 361], [345, 345], [328, 328], [307, 312], [296, 296], [285, 285], [274, 274], [257, 257], [235, 235], [219, 219], [197, 197], [170, 175], [159, 159], [137, 137], [126, 126], [82, 93], [71, 71], [55, 55], [33, 38], [22, 22]], "confidences": [0.9999666213989258, 0.9999809265136719, 0.9999946355819702, 0.9999746084213257, 0.9999938011169434, 0.9999914169311523, 0.9090831279754639, 0.9998230338096619, 0.9976154565811157, 0.9993928670883179, 0.9999699592590332, 0.9991900324821472, 0.9999030828475952, 0.999919056892395, 0.9999741315841675, 0.983220100402832, 0.9999629259109497, 0.9999812841415405, 0.6795229315757751, 0.9999853372573853, 0.9986742734909058, 0.9999790191650391, 0.9995899796485901, 0.9987137317657471, 0.9991518259048462, 0.9978784322738647, 0.9999507665634155, 0.9689961075782776, 0.9987661838531494, 0.9999948740005493, 0.581307590007782, 0.9999948740005493, 0.9670306444168091, 0.9999184608459473, 0.9983538389205933, 0.9998610019683838, 0.9507318735122681, 0.9808312058448792, 0.9999997615814209, 0.9999678134918213, 0.9999990463256836, 0.9445680975914001, 0.9999923706054688, 0.9999840259552002, 0.9999967813491821, 0.9999991655349731, 0.9999967813491821, 0.9999933242797852, 0.9997896552085876, 0.9999817609786987, 0.9999405145645142, 0.9997538924217224, 0.9999948740005493, 0.9972209930419922, 0.9999998807907104, 0.9999997615814209, 0.9762755036354065, 0.9999904632568359, 0.9999934434890747, 1.0, 0.9999963045120239, 0.9913928508758545, 0.9357872009277344, 0.9999316930770874, 1.0, 0.9693567752838135, 0.9998525381088257, 0.9999986886978149, 0.9999988079071045, 0.9999994039535522, 0.9999954700469971, 0.9990108013153076], "line": {"boundary": [[167, 1327], [171, 1296], [189, 1300], [208, 1282], [255, 1313], [292, 1282], [335, 1307], [348, 1300], [403, 1305], [436, 1284], [473, 1303], [497, 1300], [512, 1286], [538, 1303], [555, 1302], [582, 1284], [621, 1309], [651, 1284], [686, 1288], [705, 1303], [731, 1286], [766, 1313], [803, 1286], [840, 1288], [859, 1305], [896, 1305], [904, 1313], [941, 1300], [998, 1307], [1017, 1290], [1033, 1288], [1058, 1290], [1091, 1313], [1116, 1290], [1161, 1298], [1177, 1288], [1218, 1313], [1251, 1288], [1290, 1311], [1302, 1302], [1339, 1303], [1376, 1280], [1407, 1307], [1446, 1307], [1463, 1335], [1430, 1370], [1405, 1368], [1380, 1344], [1347, 1360], [1323, 1360], [1288, 1335], [1233, 1362], [1216, 1362], [1196, 1346], [1148, 1348], [1126, 1358], [1095, 1339], [1068, 1358], [1007, 1339], [986, 1356], [953, 1356], [908, 1339], [886, 1356], [844, 1356], [832, 1344], [775, 1341], [744, 1356], [732, 1344], [637, 1346], [625, 1339], [598, 1354], [555, 1341], [536, 1356], [516, 1352], [504, 1362], [465, 1337], [454, 1344], [428, 1342], [419, 1352], [387, 1342], [366, 1356], [331, 1331], [276, 1356], [261, 1354], [241, 1337], [202, 1344], [169, 1339]], "baseline": [[169, 1329], [200, 1327], [249, 1333], [461, 1333], [500, 1337], [1335, 1335], [1378, 1337], [1397, 1341], [1465, 1337]], "id": "6089b007-2e7f-4f07-bfee-d5c9445abfa6", "type": "baselines"}}, {"prediction": "\u0648\u062f\u064a\u0646\u0647.", "cuts": [[103, 106], [84, 84], [68, 68], [53, 53], [42, 42], [27, 27]], "confidences": [0.9999996423721313, 0.9999984502792358, 0.9997429251670837, 0.9999673366546631, 0.99901282787323, 0.9717188477516174], "line": {"boundary": [[1343, 1411], [1350, 1391], [1387, 1374], [1444, 1383], [1483, 1415], [1462, 1415], [1432, 1438], [1345, 1418]], "baseline": [[1345, 1413], [1419, 1413], [1484, 1417]], "id": "0bfd6754-4a7c-4b17-b17a-e51aae0c8044", "type": "baselines"}}, {"prediction": "\u0648\u0645\u062a\u0649 \u0631\u0627\u0654\u064a\u062a\u0645 \u0639\u0627\u0644\u0645\u0627 \u0641\u064a \u0639\u0642\u0644\u0647 \u0633\u062e\u0627\u0641\u0629\u060c \u0648\u0641\u064a \u0646\u0638\u0631\u0647 \u0642\u0635\u0648\u0631\u060c \u064a\u0636\u0639 \u0627\u0644\u0627\u0654\u0634\u064a\u0627\u0621 - \u063a\u0627\u0644\u0628\u0627- \u0641\u064a", "cuts": [[1207, 1207], [1188, 1188], [1169, 1176], [1157, 1157], [1126, 1132], [1120, 1120], [1101, 1101], [1095, 1095], [1089, 1089], [1076, 1076], [1057, 1057], [1033, 1045], [1026, 1026], [1008, 1008], [995, 995], [977, 977], [958, 964], [939, 945], [933, 933], [914, 921], [890, 896], [871, 871], [852, 852], [840, 840], [821, 821], [802, 809], [790, 790], [753, 753], [734, 740], [722, 722], [709, 709], [690, 690], [672, 678], [666, 666], [647, 647], [628, 628], [597, 603], [591, 591], [566, 566], [547, 554], [535, 535], [510, 516], [504, 504], [485, 485], [454, 454], [435, 435], [417, 417], [398, 404], [392, 392], [367, 373], [330, 330], [311, 317], [305, 305], [286, 292], [280, 280], [268, 274], [261, 261], [236, 236], [218, 224], [205, 212], [187, 193], [174, 174], [156, 162], [143, 143], [124, 124], [112, 112], [100, 100], [87, 93], [68, 68], [50, 56], [37, 37], [25, 25]], "confidences": [0.9859687089920044, 0.9289069175720215, 0.9999728202819824, 0.9997435212135315, 0.9999949932098389, 0.9999815225601196, 0.999997615814209, 0.9999803304672241, 0.9999959468841553, 0.7412486672401428, 0.9978557229042053, 0.9999803304672241, 0.9999420642852783, 0.9999202489852905, 0.999981164932251, 0.9999773502349854, 0.9999395608901978, 0.9999784231185913, 0.9947001934051514, 0.9998576641082764, 0.9994139671325684, 0.9998432397842407, 0.9999716281890869, 0.9998818635940552, 0.6902597546577454, 0.999955415725708, 0.9993599057197571, 0.9993149042129517, 0.9999468326568604, 0.9852787256240845, 0.9907258749008179, 0.9999005794525146, 0.997058629989624, 0.9781426191329956, 0.8489178419113159, 0.8708791732788086, 0.9999767541885376, 0.9941668510437012, 0.966301441192627, 0.9999921321868896, 0.9917047023773193, 0.9999977350234985, 0.999850869178772, 0.589336633682251, 0.9973306655883789, 0.9999990463256836, 0.9893065094947815, 0.999998927116394, 0.9999986886978149, 0.9999996423721313, 0.999987006187439, 0.9929701685905457, 0.9999936819076538, 0.9999984502792358, 0.9898472428321838, 0.9999828338623047, 0.9971639513969421, 0.965297281742096, 0.9999982118606567, 0.9999784231185913, 0.9949177503585815, 0.9999829530715942, 0.9999810457229614, 0.9888534545898438, 0.9037330150604248, 0.9999834299087524, 0.9911187291145325, 0.9999808073043823, 0.9999874830245972, 0.9999430179595947, 0.9984645843505859, 0.9996715784072876], "line": {"boundary": [[173, 1489], [177, 1456], [192, 1440], [214, 1452], [253, 1422], [269, 1436], [300, 1438], [321, 1456], [352, 1457], [376, 1440], [399, 1452], [430, 1430], [467, 1442], [485, 1459], [508, 1459], [524, 1444], [557, 1463], [567, 1456], [631, 1463], [658, 1442], [695, 1459], [727, 1438], [750, 1444], [771, 1463], [795, 1442], [834, 1461], [861, 1442], [896, 1442], [914, 1444], [933, 1463], [964, 1463], [988, 1442], [1000, 1442], [1039, 1456], [1054, 1471], [1113, 1428], [1140, 1448], [1155, 1442], [1187, 1456], [1200, 1469], [1257, 1434], [1296, 1471], [1321, 1454], [1370, 1459], [1393, 1496], [1360, 1512], [1337, 1500], [1313, 1516], [1284, 1506], [1231, 1506], [1216, 1524], [1183, 1500], [1130, 1502], [1107, 1495], [1077, 1522], [1060, 1520], [1039, 1498], [978, 1500], [964, 1493], [927, 1500], [838, 1493], [787, 1520], [775, 1520], [752, 1496], [697, 1512], [676, 1495], [625, 1502], [614, 1512], [578, 1508], [567, 1496], [547, 1508], [532, 1502], [508, 1522], [487, 1522], [461, 1498], [423, 1495], [387, 1506], [374, 1493], [319, 1483], [263, 1506], [235, 1487], [214, 1489], [187, 1516], [175, 1516]], "baseline": [[175, 1491], [370, 1483], [403, 1487], [483, 1489], [502, 1493], [1216, 1491], [1276, 1496], [1339, 1495], [1395, 1498]], "id": "61bdb5af-8737-49d8-b20f-e600b41759f7", "type": "baselines"}}, {"prediction": "\u063a\u064a\u0631 \u0645\u0648\u0627\u0636\u0639\u0647\u0627\u060c \u0641\u0627\u062a\u0647\u0645\u0648\u0647 \u0639\u0644\u0649 \u0627\u0633\u062a\u0646\u0628\u0627\u0637\u0647 \u0648\u0639\u0644\u0645\u0647 \u0648\u0631\u0627\u0654\u064a\u0647\u060c \u0648\u0644\u0627 \u062a\u0642\u0644\u062f\u0648\u0647", "cuts": [[967, 967], [946, 946], [929, 935], [908, 913], [902, 902], [886, 886], [865, 870], [848, 848], [816, 816], [794, 794], [778, 778], [767, 767], [746, 751], [740, 740], [724, 729], [713, 713], [697, 697], [675, 675], [659, 659], [638, 638], [621, 627], [605, 605], [589, 589], [573, 573], [540, 546], [535, 535], [519, 519], [497, 497], [481, 481], [470, 475], [459, 465], [438, 438], [421, 421], [400, 405], [389, 394], [367, 367], [351, 351], [330, 330], [313, 313], [292, 297], [281, 281], [265, 265], [243, 249], [238, 238], [232, 232], [222, 222], [200, 205], [184, 189], [178, 178], [151, 157], [140, 146], [124, 130], [119, 119], [103, 103], [86, 86], [70, 70], [49, 49], [27, 27]], "confidences": [0.9998652935028076, 0.5277007222175598, 0.9999955892562866, 0.9999880790710449, 0.9999693632125854, 0.9982054233551025, 0.9999960660934448, 0.8161394596099854, 0.9999929666519165, 0.9999971389770508, 0.9999768733978271, 0.9989445805549622, 0.9983943104743958, 0.835041344165802, 0.9998206496238708, 0.9999831914901733, 0.9942564368247986, 0.999908447265625, 0.9996181726455688, 0.5019206404685974, 0.9998630285263062, 0.9985489249229431, 0.9094343781471252, 0.9999619722366333, 0.999971866607666, 0.9999991655349731, 0.9999998807907104, 0.9989573955535889, 0.9999986886978149, 0.9999964237213135, 0.9999872446060181, 0.916301965713501, 0.9883456230163574, 0.9999982118606567, 0.9999991655349731, 0.9999978542327881, 0.6548713445663452, 0.936079204082489, 0.9999892711639404, 0.9997774958610535, 0.9999997615814209, 0.9538446664810181, 0.9998297691345215, 0.9999701976776123, 0.9999457597732544, 0.9999912977218628, 0.9999996423721313, 0.999927282333374, 0.9924691319465637, 0.9999955892562866, 0.9999499320983887, 0.9999344348907471, 0.993513286113739, 0.999993085861206, 0.9991191029548645, 0.9999837875366211, 0.9999768733978271, 0.9998847246170044], "line": {"boundary": [[481, 1563], [489, 1533], [522, 1532], [547, 1506], [561, 1506], [571, 1516], [580, 1508], [600, 1518], [631, 1516], [658, 1539], [684, 1533], [707, 1510], [744, 1537], [766, 1539], [785, 1530], [795, 1537], [814, 1518], [875, 1541], [898, 1518], [933, 1520], [980, 1539], [1005, 1520], [1027, 1541], [1052, 1518], [1093, 1541], [1157, 1541], [1189, 1522], [1208, 1522], [1226, 1537], [1249, 1522], [1263, 1535], [1298, 1541], [1335, 1524], [1354, 1541], [1374, 1539], [1391, 1553], [1432, 1526], [1465, 1565], [1417, 1592], [1387, 1594], [1370, 1578], [1352, 1596], [1321, 1578], [1280, 1578], [1257, 1588], [1222, 1571], [1187, 1576], [1175, 1588], [1142, 1578], [1115, 1590], [1089, 1569], [1039, 1592], [1021, 1590], [1005, 1574], [957, 1576], [939, 1588], [922, 1572], [879, 1571], [865, 1584], [847, 1586], [834, 1574], [768, 1571], [754, 1584], [731, 1588], [662, 1571], [641, 1588], [600, 1565], [557, 1584], [534, 1574], [506, 1584], [483, 1572]], "baseline": [[483, 1565], [651, 1565], [779, 1571], [1362, 1569], [1417, 1576], [1466, 1567]], "id": "69b7c31f-5408-4dd0-85d6-75e1e8d434fb", "type": "baselines"}}, {"prediction": "\u0648\u0645\u062a\u0649 \u0631\u0627\u0654\u064a\u062a\u0645 \u0627\u0644\u0639\u0627\u0644\u0645 \u0644\u0627 \u064a\u062a\u0645\u0645 \u0635\u0644\u0627\u062a\u0647 \u0627\u0644\u0645\u0641\u0631\u0648\u0636\u0629 \u060c \u0648\u0644\u0627 \u064a\u0637\u0645\u064a\u0654\u0646 \u0641\u064a \u0631\u0643\u0648\u0639\u0647\u0627", "cuts": [[1209, 1209], [1187, 1187], [1176, 1176], [1159, 1159], [1109, 1115], [1098, 1098], [1081, 1087], [1076, 1076], [1070, 1070], [1059, 1059], [1042, 1042], [1004, 1015], [998, 998], [987, 993], [970, 970], [954, 954], [943, 943], [920, 920], [887, 893], [871, 876], [859, 865], [826, 837], [821, 821], [804, 804], [787, 793], [765, 765], [726, 737], [710, 710], [676, 682], [665, 671], [649, 649], [638, 638], [604, 610], [593, 599], [582, 582], [566, 566], [549, 549], [532, 532], [510, 510], [482, 488], [455, 455], [444, 444], [438, 438], [399, 410], [394, 394], [366, 372], [355, 360], [322, 333], [316, 316], [288, 294], [272, 272], [255, 255], [250, 250], [233, 238], [194, 205], [183, 183], [172, 172], [122, 133], [111, 111], [94, 94], [72, 72], [50, 50], [28, 28], [11, 11]], "confidences": [0.999711811542511, 0.9999942779541016, 0.9999964237213135, 0.9999276399612427, 0.9999908208847046, 0.9999871253967285, 0.9998900890350342, 0.9831660985946655, 0.9998063445091248, 0.999962329864502, 0.9997965693473816, 0.9999898672103882, 0.99998939037323, 0.9999788999557495, 0.9994357228279114, 0.9999730587005615, 0.7908631563186646, 0.9956527948379517, 0.9997575879096985, 0.9996732473373413, 0.9956046342849731, 0.999534010887146, 0.9465213418006897, 0.9551798105239868, 0.9997909665107727, 0.974587619304657, 0.9998075366020203, 0.999998927116394, 0.9999898672103882, 0.9993416666984558, 0.9999842643737793, 0.999870777130127, 0.9998094439506531, 0.9999909400939941, 0.9999817609786987, 0.9999905824661255, 0.7308676242828369, 0.9999252557754517, 0.9999912977218628, 0.9999830722808838, 0.9993329644203186, 0.9937452077865601, 0.9980292916297913, 0.9999990463256836, 0.9999905824661255, 0.9998887777328491, 0.9999932050704956, 0.9999985694885254, 0.9999996423721313, 0.9999998807907104, 0.9999985694885254, 0.8817663788795471, 0.9893107414245605, 0.9999843835830688, 0.9999984502792358, 0.9999974966049194, 0.9999927282333374, 0.9999198913574219, 0.9998809099197388, 0.9999985694885254, 0.9999926090240479, 0.9989744424819946, 0.9999724626541138, 0.7024262547492981], "line": {"boundary": [[169, 1647], [173, 1594], [185, 1606], [210, 1604], [222, 1613], [259, 1594], [296, 1629], [335, 1596], [370, 1621], [403, 1602], [424, 1608], [442, 1592], [481, 1615], [508, 1592], [532, 1592], [571, 1625], [602, 1596], [617, 1596], [629, 1608], [647, 1602], [678, 1617], [701, 1598], [723, 1610], [744, 1596], [777, 1621], [799, 1604], [838, 1600], [857, 1617], [877, 1611], [900, 1633], [959, 1598], [992, 1613], [1009, 1598], [1037, 1598], [1066, 1625], [1093, 1596], [1122, 1610], [1146, 1596], [1185, 1623], [1241, 1590], [1284, 1631], [1329, 1606], [1354, 1617], [1368, 1613], [1407, 1648], [1382, 1650], [1360, 1666], [1333, 1654], [1309, 1670], [1272, 1652], [1253, 1666], [1212, 1660], [1193, 1676], [1163, 1650], [1101, 1652], [1070, 1676], [1040, 1648], [1021, 1658], [998, 1647], [978, 1664], [933, 1664], [920, 1678], [885, 1650], [822, 1658], [779, 1647], [705, 1654], [686, 1668], [582, 1647], [543, 1662], [506, 1647], [491, 1647], [475, 1660], [415, 1650], [397, 1666], [380, 1666], [354, 1647], [327, 1672], [315, 1672], [288, 1647], [265, 1660], [247, 1650], [230, 1662], [200, 1650], [185, 1660], [173, 1654]], "baseline": [[171, 1648], [1204, 1647], [1249, 1648], [1270, 1654], [1408, 1650]], "id": "37eead36-ae8c-47ea-aa4b-69190b7cf186", "type": "baselines"}}, {"prediction": "\u0648\u0633\u062c\u0648\u062f\u0647\u0627\u060c \u0648\u0644\u0627 \u064a\u062d\u0636\u0631 \u0645\u0639 \u0642\u0631\u0627\u0621\u062a\u0647 \u0641\u064a\u0647\u0627 \u0628\u0627\u0644\u062e\u0634\u0648\u0639 \u0648\u0627\u0644\u062d\u0636\u0648\u0631\u060c \u0648\u0627\u0644\u062a\u062f\u0628\u0631 \u0648\u0627\u0644\u062a\u0631\u062a\u064a\u0644", "cuts": [[1292, 1292], [1267, 1267], [1231, 1231], [1213, 1213], [1194, 1194], [1170, 1170], [1152, 1158], [1139, 1139], [1109, 1121], [1097, 1103], [1072, 1079], [1060, 1066], [1030, 1042], [1024, 1024], [999, 999], [975, 975], [944, 944], [908, 914], [896, 896], [877, 877], [841, 847], [829, 829], [817, 817], [798, 798], [786, 786], [768, 768], [756, 756], [725, 731], [713, 713], [701, 701], [689, 689], [670, 670], [640, 652], [634, 634], [622, 622], [609, 609], [585, 585], [561, 561], [536, 536], [512, 512], [475, 481], [469, 469], [451, 451], [439, 439], [414, 414], [390, 390], [360, 360], [335, 335], [317, 317], [286, 293], [274, 274], [256, 262], [250, 250], [238, 238], [225, 225], [201, 201], [189, 189], [152, 165], [146, 146], [128, 128], [116, 122], [104, 104], [91, 91], [79, 79], [61, 61], [49, 49]], "confidences": [0.9998243451118469, 0.9999920129776001, 0.9999985694885254, 0.9999624490737915, 0.9999974966049194, 0.9999874830245972, 0.9999926090240479, 0.9999836683273315, 0.999990701675415, 0.9999855756759644, 0.99998939037323, 0.9999979734420776, 0.9996892213821411, 0.9999874830245972, 0.9997640252113342, 0.9999427795410156, 0.9993060827255249, 0.9446314573287964, 0.7036338448524475, 0.9967960715293884, 0.9986769556999207, 0.9841193556785583, 0.9994528889656067, 0.9409279823303223, 0.9999997615814209, 0.9999942779541016, 0.9934862852096558, 0.9999960660934448, 0.9999674558639526, 0.9067964553833008, 0.9972527623176575, 0.999915599822998, 0.9999898672103882, 0.9999929666519165, 0.9999849796295166, 0.9999780654907227, 0.9999867677688599, 0.999346911907196, 0.9999964237213135, 0.9825494289398193, 0.9995606541633606, 0.9960000514984131, 0.9999972581863403, 0.9731088280677795, 0.9996663331985474, 0.5042705535888672, 1.0, 0.9998852014541626, 0.9999935626983643, 0.9747305512428284, 0.7328495383262634, 0.9999992847442627, 0.9982652068138123, 0.9998162388801575, 1.0, 0.9999856948852539, 0.8613400459289551, 0.9995511174201965, 0.9720507264137268, 0.9999809265136719, 0.9999556541442871, 0.9989655017852783, 0.9860791563987732, 0.9992793202400208, 0.9793171882629395, 0.9999933242797852], "line": {"boundary": [[161, 1732], [165, 1686], [194, 1670], [237, 1684], [270, 1670], [319, 1707], [387, 1670], [409, 1674], [442, 1699], [461, 1686], [514, 1693], [532, 1678], [561, 1687], [588, 1670], [633, 1701], [656, 1684], [678, 1695], [701, 1680], [740, 1684], [752, 1674], [764, 1674], [787, 1695], [810, 1676], [830, 1689], [861, 1678], [885, 1699], [908, 1682], [945, 1678], [955, 1687], [980, 1678], [1003, 1699], [1046, 1693], [1070, 1713], [1115, 1682], [1175, 1695], [1200, 1674], [1226, 1674], [1261, 1703], [1296, 1676], [1348, 1695], [1440, 1693], [1469, 1726], [1456, 1726], [1432, 1746], [1389, 1734], [1347, 1748], [1321, 1732], [1280, 1732], [1270, 1725], [1233, 1744], [1193, 1725], [1171, 1742], [1142, 1730], [1074, 1748], [1060, 1736], [1033, 1758], [1007, 1754], [982, 1730], [949, 1748], [927, 1730], [904, 1734], [886, 1725], [851, 1744], [822, 1742], [803, 1725], [779, 1744], [760, 1730], [703, 1732], [668, 1756], [653, 1754], [627, 1730], [612, 1740], [584, 1728], [518, 1730], [489, 1742], [438, 1725], [411, 1740], [395, 1728], [364, 1728], [352, 1740], [325, 1742], [306, 1726], [286, 1740], [253, 1728], [228, 1744], [216, 1736], [179, 1744], [165, 1732]], "baseline": [[163, 1734], [214, 1732], [255, 1725], [364, 1726], [397, 1723], [419, 1723], [438, 1726], [1419, 1725], [1471, 1728]], "id": "10b8b309-9cbe-4e14-8758-f6d22c56c47e", "type": "baselines"}}, {"prediction": "\u0641\u0627\u062a\u0647\u0645\u0648\u0647 \u0628\u0642\u0633\u0627\u0648\u0629 \u0627\u0644\u0642\u0644\u0628\u060c \u0648\u0628\u0639\u062f\u0647 \u0639\u0646 \u0627\u0644\u0631\u0628 \u0639\u0632 \u0648\u062c\u0644.", "cuts": [[683, 683], [668, 673], [659, 659], [644, 644], [620, 620], [601, 606], [582, 582], [563, 567], [558, 558], [543, 543], [524, 524], [500, 500], [490, 490], [466, 466], [452, 452], [442, 447], [433, 433], [418, 418], [399, 404], [375, 375], [346, 346], [327, 332], [317, 322], [298, 303], [284, 284], [269, 269], [245, 245], [226, 231], [212, 212], [188, 192], [163, 168], [159, 159], [149, 149], [135, 135], [106, 106], [72, 77], [63, 63], [53, 58], [48, 48], [43, 43], [38, 38], [29, 34], [19, 19]], "confidences": [0.9739862084388733, 0.9999884366989136, 0.9997276663780212, 0.9999849796295166, 0.9990725517272949, 0.9999985694885254, 0.9983306527137756, 0.9980822801589966, 0.9998204112052917, 0.997825026512146, 0.9833168387413025, 0.9999716281890869, 0.999618411064148, 0.9978547692298889, 0.6419629454612732, 0.9951518774032593, 0.9999998807907104, 1.0, 0.9999918937683105, 0.9991405010223389, 0.9999971389770508, 1.0, 1.0, 0.9999991655349731, 0.9999963045120239, 0.9999998807907104, 0.9999983310699463, 0.999997615814209, 0.9999990463256836, 0.9999960660934448, 0.9999496936798096, 0.9999961853027344, 0.9999966621398926, 0.9999440908432007, 0.9999513626098633, 0.9999853372573853, 0.9999990463256836, 0.9999951124191284, 0.9946951270103455, 0.9999998807907104, 0.9999974966049194, 0.9999954700469971, 0.9960901141166687], "line": {"boundary": [[764, 1799], [766, 1769], [783, 1752], [812, 1746], [849, 1775], [879, 1767], [898, 1750], [929, 1769], [974, 1765], [986, 1773], [1025, 1762], [1048, 1771], [1103, 1767], [1122, 1777], [1150, 1752], [1189, 1752], [1233, 1767], [1253, 1754], [1272, 1773], [1288, 1758], [1304, 1758], [1321, 1775], [1384, 1775], [1426, 1756], [1463, 1783], [1469, 1802], [1415, 1810], [1401, 1822], [1368, 1812], [1354, 1824], [1327, 1812], [1306, 1822], [1292, 1810], [1253, 1810], [1231, 1822], [1206, 1806], [1146, 1810], [1130, 1824], [1093, 1806], [1072, 1820], [1048, 1820], [1035, 1808], [994, 1810], [980, 1802], [935, 1826], [912, 1808], [886, 1822], [851, 1822], [830, 1804], [785, 1812], [766, 1806]], "baseline": [[766, 1801], [846, 1801], [867, 1804], [1470, 1804]], "id": "80fb2329-0ad1-464c-b2b3-93a36d431628", "type": "baselines"}}, {"prediction": "\u0648\u0645\u062a\u0649 \u0648\u062c\u062f\u062a\u0645 \u0627\u0644\u0639\u0627\u0644\u0645 \u0644\u0627 \u0645\u0639\u0627\u0645\u0644\u0629 \u0644\u0647 \u0645\u0639 \u0631\u0628\u0647 \u0639\u0632 \u0648\u062c\u0644 \u060c \u062a\u0638\u0647\u0631 \u0639\u0644\u064a\u0647 \u0628\u0647\u062c\u062a\u0647\u0627 \u0648\u0627\u0654\u0646\u0648\u0627\u0631\u0647\u0627", "cuts": [[1236, 1236], [1214, 1214], [1197, 1197], [1186, 1186], [1142, 1153], [1131, 1136], [1103, 1103], [1086, 1086], [1064, 1064], [1042, 1042], [1014, 1020], [1009, 1009], [998, 998], [981, 981], [964, 964], [953, 953], [931, 937], [898, 909], [887, 892], [876, 881], [853, 859], [842, 842], [820, 820], [804, 809], [792, 792], [770, 770], [759, 759], [732, 743], [726, 726], [709, 709], [682, 687], [671, 671], [648, 648], [621, 626], [610, 610], [593, 593], [576, 576], [554, 560], [543, 543], [532, 538], [526, 526], [521, 521], [515, 515], [504, 510], [499, 499], [493, 493], [471, 477], [460, 460], [438, 443], [421, 421], [399, 405], [371, 377], [355, 355], [338, 338], [327, 327], [310, 310], [283, 288], [277, 277], [260, 260], [233, 233], [211, 211], [200, 200], [177, 183], [155, 166], [150, 150], [133, 133], [122, 127], [116, 116], [105, 105], [83, 89], [72, 72], [50, 50], [33, 33]], "confidences": [0.9999624490737915, 0.9999873638153076, 0.9999958276748657, 0.9999871253967285, 0.9999827146530151, 0.9999901056289673, 0.999958872795105, 0.519729733467102, 0.9999949932098389, 0.990899920463562, 0.9998747110366821, 0.9999719858169556, 0.9997586607933044, 0.9992938041687012, 0.9987748265266418, 0.9998395442962646, 0.9999606609344482, 0.9999958276748657, 0.999937891960144, 0.9987975358963013, 0.9998902082443237, 0.9642751216888428, 0.9995637536048889, 0.9999383687973022, 0.9973805546760559, 0.9987190961837769, 0.524466335773468, 0.9997130036354065, 0.9221267104148865, 0.9419159293174744, 0.9999997615814209, 0.9999914169311523, 0.9996623992919922, 0.999992847442627, 0.9999985694885254, 0.999937891960144, 0.9998610019683838, 0.9999767541885376, 0.9999998807907104, 0.8760433197021484, 0.9968647360801697, 0.9999954700469971, 0.999546229839325, 0.9998810291290283, 0.656394362449646, 0.9994986057281494, 0.9998539686203003, 0.9695175290107727, 0.9999977350234985, 0.9999958276748657, 0.9999986886978149, 0.9999974966049194, 0.9999914169311523, 0.9999973773956299, 0.9956705570220947, 0.9975166320800781, 0.9996503591537476, 0.9999966621398926, 0.9999432563781738, 0.9999326467514038, 0.960350751876831, 0.9999790191650391, 0.9999817609786987, 0.9995361566543579, 0.9995700716972351, 0.9970190525054932, 0.9999990463256836, 0.9999368190765381, 0.7645747065544128, 0.9985374212265015, 0.9979060888290405, 0.9999816417694092, 0.990431010723114], "line": {"boundary": [[144, 1867], [146, 1841], [161, 1828], [196, 1843], [214, 1828], [233, 1838], [263, 1816], [290, 1841], [315, 1826], [329, 1840], [399, 1840], [423, 1853], [473, 1828], [516, 1861], [559, 1828], [598, 1832], [614, 1845], [658, 1822], [693, 1845], [713, 1840], [746, 1847], [758, 1859], [775, 1845], [808, 1845], [820, 1855], [849, 1828], [871, 1840], [900, 1828], [920, 1838], [935, 1828], [957, 1847], [978, 1847], [1000, 1828], [1021, 1826], [1052, 1851], [1079, 1828], [1107, 1841], [1132, 1830], [1161, 1855], [1193, 1836], [1249, 1851], [1265, 1845], [1286, 1863], [1327, 1840], [1368, 1847], [1407, 1882], [1376, 1886], [1364, 1898], [1347, 1898], [1337, 1888], [1298, 1904], [1276, 1886], [1261, 1900], [1189, 1890], [1165, 1910], [1142, 1888], [1087, 1886], [1052, 1908], [1031, 1886], [1007, 1888], [994, 1877], [961, 1890], [898, 1890], [869, 1875], [853, 1888], [826, 1880], [781, 1910], [752, 1888], [717, 1896], [690, 1875], [668, 1888], [635, 1888], [606, 1873], [584, 1888], [524, 1900], [499, 1880], [460, 1896], [432, 1880], [409, 1894], [376, 1884], [329, 1894], [302, 1875], [276, 1894], [253, 1884], [237, 1896], [196, 1894], [148, 1869]], "baseline": [[146, 1869], [194, 1875], [323, 1873], [345, 1878], [499, 1882], [555, 1880], [590, 1873], [859, 1875], [900, 1871], [923, 1877], [1037, 1878], [1056, 1882], [1276, 1880], [1354, 1888], [1408, 1884]], "id": "54799679-1ac4-47fe-934f-83b31f13faa8", "type": "baselines"}}, {"prediction": "\u0648\u0633\u0643\u064a\u0646\u062a\u0647\u0627\u060c \u0645\u0646 \u062a\u0644\u0627\u0648\u0629 \u0648\u0635\u064a\u0627\u0645 \u0648\u0642\u064a\u0627\u0645\u060c \u0641\u0627\u0639\u0644\u0645\u0648\u0627 \u0627\u0654\u0646\u0647 \u0642\u0644\u064a\u0644 \u0627\u0644\u0646\u0635\u064a\u0628 \u0645\u0646 \u062b\u0645\u0631\u0629 \u0627\u0644\u0639\u0644\u0645 \u0627\u0655\u0630 \u062b\u0645\u0631\u0629", "cuts": [[1298, 1298], [1273, 1278], [1243, 1243], [1228, 1228], [1213, 1213], [1203, 1203], [1188, 1188], [1173, 1173], [1158, 1158], [1138, 1143], [1128, 1133], [1108, 1108], [1082, 1087], [1072, 1072], [1057, 1062], [1047, 1052], [1027, 1027], [1007, 1007], [987, 992], [977, 977], [947, 947], [922, 922], [907, 907], [892, 892], [872, 877], [862, 862], [842, 842], [827, 827], [817, 822], [797, 802], [782, 782], [762, 767], [757, 757], [742, 742], [727, 727], [707, 707], [687, 687], [667, 672], [651, 651], [636, 641], [626, 631], [621, 621], [616, 616], [601, 601], [581, 586], [571, 571], [556, 561], [546, 546], [531, 536], [501, 506], [491, 496], [481, 486], [471, 471], [451, 451], [426, 426], [396, 401], [366, 371], [356, 356], [331, 331], [306, 311], [296, 301], [281, 281], [261, 261], [246, 246], [226, 231], [216, 221], [205, 210], [190, 190], [175, 175], [150, 155], [135, 135], [125, 130], [115, 120], [110, 110], [90, 95], [80, 80], [65, 65], [45, 45], [30, 30]], "confidences": [0.9999417066574097, 0.9999945163726807, 0.9999974966049194, 0.999985933303833, 0.9999626874923706, 0.99998939037323, 0.9999910593032837, 0.9999959468841553, 0.756621778011322, 0.9993665814399719, 0.9999896287918091, 0.9500626921653748, 0.9996504783630371, 0.9999996423721313, 0.9999978542327881, 0.9999961853027344, 0.9998416900634766, 0.9999421834945679, 0.9999947547912598, 0.9550725221633911, 0.999901294708252, 0.999994158744812, 0.99993896484375, 0.9998705387115479, 0.9994296431541443, 0.9963602423667908, 0.9768261909484863, 0.9845020174980164, 0.9991129040718079, 0.9998034834861755, 0.9999189376831055, 0.9999998807907104, 0.9999986886978149, 0.9999935626983643, 0.9999996423721313, 0.9999974966049194, 0.999970555305481, 0.9999955892562866, 0.9999997615814209, 1.0, 0.9998965263366699, 0.9999996423721313, 0.9999357461929321, 0.7053399085998535, 0.9999959468841553, 0.9999908208847046, 0.9990590214729309, 0.9999946355819702, 0.9999847412109375, 0.9993951320648193, 0.9999172687530518, 0.9937519431114197, 0.9999966621398926, 0.9998257756233215, 0.514997661113739, 0.9999998807907104, 0.9999972581863403, 0.9961175918579102, 0.996932864189148, 0.9999979734420776, 0.9999998807907104, 0.9999791383743286, 0.9999998807907104, 0.9914675951004028, 0.9999983310699463, 0.9999983310699463, 0.9999997615814209, 0.9999996423721313, 0.9999963045120239, 0.9999997615814209, 0.9999983310699463, 0.9999831914901733, 1.0, 0.9999969005584717, 0.999922513961792, 0.6258425116539001, 0.9992828965187073, 0.9999939203262329, 0.9998599290847778], "line": {"boundary": [[152, 1951], [155, 1912], [163, 1906], [192, 1923], [214, 1904], [255, 1904], [288, 1923], [311, 1902], [329, 1912], [354, 1902], [368, 1912], [387, 1908], [409, 1925], [440, 1904], [460, 1921], [520, 1919], [543, 1929], [575, 1927], [617, 1904], [635, 1906], [653, 1921], [670, 1906], [684, 1912], [695, 1904], [734, 1919], [762, 1898], [795, 1908], [814, 1925], [840, 1906], [859, 1917], [873, 1908], [896, 1908], [914, 1923], [931, 1923], [955, 1906], [984, 1908], [1015, 1929], [1040, 1908], [1070, 1929], [1085, 1921], [1122, 1925], [1140, 1912], [1159, 1921], [1194, 1908], [1230, 1925], [1278, 1929], [1306, 1908], [1327, 1921], [1393, 1906], [1417, 1927], [1438, 1925], [1471, 1953], [1434, 1976], [1387, 1964], [1368, 1976], [1343, 1966], [1319, 1976], [1278, 1958], [1253, 1978], [1230, 1980], [1212, 1964], [1150, 1974], [1128, 1960], [1115, 1974], [1085, 1964], [1056, 1976], [1042, 1970], [1029, 1984], [1005, 1970], [951, 1972], [933, 1984], [902, 1958], [826, 1962], [795, 1976], [775, 1958], [742, 1962], [727, 1955], [658, 1980], [631, 1960], [534, 1974], [506, 1955], [463, 1976], [440, 1958], [387, 1972], [368, 1955], [313, 1960], [284, 1980], [233, 1955], [185, 1972], [155, 1955]], "baseline": [[153, 1953], [830, 1951], [916, 1953], [941, 1962], [961, 1958], [1419, 1960], [1473, 1955]], "id": "209f5fd7-70ce-4f0f-85ab-dadef361c176", "type": "baselines"}}, {"prediction": "\u0627\u0644\u0639\u0644\u0645 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u060c \u0648\u0642\u0644\u064a\u0644 \u0627\u0644\u0646\u0635\u064a\u0628 \u0645\u0646 \u0627\u0644\u0645\u062d\u0628\u0629 \u0648\u0627\u0644\u062e\u0634\u064a\u0629\u060c \u0648( \u0627\u0655\u0646\u0645\u0627 \u064a\u062e\u0634\u0649 \u0627\u0644\u0644\u0647 \u0645\u0646 \u0639\u0628\u0627\u062f\u0648", "cuts": [[1303, 1303], [1290, 1290], [1272, 1272], [1260, 1260], [1235, 1235], [1211, 1217], [1198, 1204], [1186, 1192], [1168, 1168], [1149, 1149], [1131, 1137], [1118, 1118], [1106, 1106], [1088, 1088], [1081, 1081], [1075, 1075], [1051, 1057], [1038, 1038], [1014, 1014], [1002, 1002], [989, 989], [977, 977], [940, 946], [928, 934], [916, 922], [903, 903], [885, 885], [860, 860], [836, 836], [793, 799], [780, 780], [756, 762], [725, 731], [719, 719], [707, 713], [688, 688], [664, 664], [645, 645], [633, 633], [602, 608], [590, 596], [571, 578], [559, 565], [535, 535], [516, 516], [492, 492], [479, 479], [461, 461], [436, 442], [424, 424], [399, 399], [381, 381], [369, 375], [363, 363], [356, 356], [338, 338], [326, 326], [313, 320], [301, 301], [289, 289], [270, 270], [246, 252], [221, 227], [215, 215], [203, 209], [191, 191], [178, 184], [160, 166], [154, 154], [135, 135], [104, 111], [92, 92], [80, 80], [61, 61], [49, 49], [37, 37]], "confidences": [0.9999939203262329, 0.9962407350540161, 0.6148149967193604, 0.9995049238204956, 0.9999679327011108, 0.9998955726623535, 0.9999966621398926, 0.9999812841415405, 0.9999535083770752, 0.9999920129776001, 0.9999990463256836, 0.9946582913398743, 0.7702367901802063, 0.9436891078948975, 0.9403108358383179, 0.874081015586853, 0.9999908208847046, 0.9999887943267822, 0.999915599822998, 0.9999622106552124, 0.9999816417694092, 0.9999862909317017, 0.9991334080696106, 0.9935688972473145, 0.9999759197235107, 0.9654875993728638, 0.9996823072433472, 0.9990022778511047, 0.564159095287323, 0.9998770952224731, 0.9986807703971863, 0.9983581900596619, 0.9994006156921387, 0.9421390295028687, 0.9977754950523376, 0.9938074946403503, 0.9999985694885254, 0.9493253231048584, 0.9998681545257568, 0.9999979734420776, 0.9999966621398926, 0.9997482895851135, 0.9999991655349731, 0.9999998807907104, 0.9024093747138977, 0.8440074920654297, 0.9990659356117249, 0.9999818801879883, 0.98737633228302, 0.9999896287918091, 0.9998379945755005, 0.9999996423721313, 0.9999951124191284, 0.9999514818191528, 0.9996600151062012, 0.971716046333313, 0.9997962117195129, 0.999996542930603, 0.9999830722808838, 0.9999959468841553, 0.9999998807907104, 0.999964714050293, 0.9999979734420776, 0.5567030906677246, 0.999757707118988, 0.8596031069755554, 0.998282790184021, 0.7934605479240417, 0.9993875026702881, 0.9990580677986145, 0.9998717308044434, 0.9960359930992126, 0.998126208782196, 0.9995434880256653, 0.5599195957183838, 0.99636310338974], "line": {"boundary": [[152, 2046], [165, 2009], [218, 1982], [247, 2005], [269, 1986], [300, 2005], [331, 1984], [358, 1982], [378, 1999], [401, 1982], [440, 1980], [458, 1993], [483, 1982], [512, 1995], [530, 1986], [555, 2009], [582, 2019], [610, 1993], [637, 2003], [647, 1995], [686, 1999], [701, 1990], [740, 2013], [771, 1995], [789, 2011], [816, 2015], [851, 1993], [879, 2015], [894, 2007], [927, 2009], [939, 2019], [947, 2011], [966, 2019], [1011, 2017], [1050, 1992], [1089, 2017], [1109, 1999], [1124, 2003], [1138, 1995], [1157, 1997], [1191, 2025], [1222, 1997], [1237, 1995], [1255, 2005], [1270, 1997], [1300, 2015], [1329, 1993], [1362, 2019], [1391, 1995], [1409, 2005], [1430, 1995], [1463, 2021], [1469, 2040], [1438, 2056], [1395, 2056], [1378, 2071], [1347, 2054], [1230, 2058], [1196, 2048], [1171, 2068], [1144, 2058], [1093, 2071], [1072, 2052], [966, 2066], [939, 2044], [898, 2070], [865, 2052], [799, 2052], [777, 2066], [750, 2044], [725, 2064], [680, 2050], [623, 2062], [584, 2044], [567, 2060], [541, 2060], [528, 2071], [497, 2066], [483, 2054], [436, 2058], [424, 2050], [389, 2062], [368, 2060], [356, 2048], [309, 2048], [294, 2060], [259, 2058], [251, 2050], [228, 2060], [202, 2050], [187, 2058], [155, 2054]], "baseline": [[153, 2048], [491, 2048], [604, 2042], [816, 2042], [883, 2046], [1470, 2042]], "id": "d2a24751-e15b-4046-a50f-1b6734287128", "type": "baselines"}}, {"prediction": "\u0627\u0644\u0639\u0644\u0645\u0648\u0627).", "cuts": [[358, 365], [352, 352], [338, 338], [325, 325], [311, 311], [291, 291], [270, 277], [250, 250], [34, 41]], "confidences": [0.9943757057189941, 0.7291178107261658, 0.9799628257751465, 0.7520625591278076, 0.6908395886421204, 0.9932884573936462, 0.9999109506607056, 0.48956286907196045, 0.997548520565033], "line": {"boundary": [[1099, 2132], [1101, 2107], [1132, 2075], [1212, 2099], [1228, 2081], [1245, 2089], [1280, 2077], [1309, 2097], [1352, 2064], [1378, 2079], [1446, 2077], [1465, 2097], [1471, 2126], [1442, 2144], [1384, 2146], [1343, 2165], [1327, 2165], [1304, 2144], [1284, 2153], [1247, 2140], [1208, 2157], [1193, 2144], [1134, 2149], [1107, 2132]], "baseline": [[1101, 2134], [1473, 2128]], "id": "c9a4534a-dd8f-43bc-b94d-b6ffba2f07f9", "type": "baselines"}}], "regions": {"text": [{"id": "e85748f7-d261-4906-9d1d-9dc0074c03e1", "boundary": [[0, 0], [1655, 0], [1655, 2339], [0, 2339]], "imagename": null, "tags": null}]}} +{"lines": [{"prediction": "238", "cuts": [[39, 39], [65, 65], [96, 96]], "confidences": [0.9999942779541016, 0.9999815225601196, 0.9999997615814209], "line": {"boundary": [[1364, 228], [1366, 191], [1382, 177], [1444, 177], [1473, 202], [1479, 226], [1452, 241], [1380, 239], [1368, 231]], "baseline": [[1366, 230], [1440, 230], [1480, 227]], "id": "line_0", "type": "baselines"}}, {"prediction": "\u0648\u0644\u0627 \u064a\u0639\u062a\u0646\u064a \u0628\u0642\u0636\u0627\u0621 \u062d\u0627\u062c\u0629 \u0645\u0636\u0637\u0631 \u0645\u0644\u0647\u0648\u0641\u060c \u0641\u0627\u0655\u0646\u0647 \u0645\u0646 \u0627\u0644\u0642\u0627\u0633\u064a\u0629 \u0642\u0644\u0648\u0628\u0647\u0645\u060c \u0627\u0644\u0645\u0639\u0631\u0636\u064a\u0646 \u0639\u0646", "cuts": [[1291, 1291], [1266, 1273], [1254, 1260], [1235, 1241], [1223, 1223], [1204, 1210], [1192, 1192], [1179, 1179], [1167, 1167], [1136, 1136], [1124, 1124], [1111, 1111], [1086, 1086], [1055, 1061], [1043, 1043], [1018, 1024], [999, 999], [981, 981], [956, 962], [937, 937], [913, 919], [900, 900], [875, 881], [838, 838], [819, 819], [795, 801], [782, 782], [770, 770], [751, 751], [732, 732], [714, 714], [670, 670], [646, 658], [639, 639], [627, 633], [621, 621], [615, 615], [602, 602], [577, 584], [565, 565], [540, 540], [515, 521], [503, 509], [497, 497], [484, 484], [459, 466], [447, 447], [428, 428], [410, 410], [385, 391], [379, 379], [360, 360], [348, 348], [329, 329], [310, 310], [286, 292], [273, 273], [248, 255], [242, 242], [230, 230], [211, 211], [192, 192], [174, 174], [149, 155], [118, 118], [99, 106], [68, 75], [56, 56], [31, 31]], "confidences": [0.9918296933174133, 0.9999946355819702, 0.9999945163726807, 0.9999985694885254, 0.9999771118164062, 0.9999879598617554, 0.9987093210220337, 0.9987457990646362, 0.9997931122779846, 0.999688982963562, 0.9999251365661621, 0.587072491645813, 0.9999754428863525, 0.99989914894104, 0.9920154809951782, 0.9999525547027588, 0.9999878406524658, 0.9997779726982117, 0.9999771118164062, 0.9966135621070862, 0.9999631643295288, 0.9998565912246704, 0.9999505281448364, 0.9981879591941833, 0.8379210829734802, 0.9999366998672485, 0.9966161847114563, 0.9895930290222168, 0.9999837875366211, 0.9999969005584717, 0.8669806122779846, 0.974852979183197, 0.9999998807907104, 0.9999897480010986, 0.9999994039535522, 0.9228501319885254, 0.9999959468841553, 0.9999970197677612, 0.9999334812164307, 0.9997324347496033, 0.9999984502792358, 0.9917014241218567, 0.9999793767929077, 1.0, 0.9999970197677612, 0.9935858845710754, 0.9999581575393677, 0.8294568061828613, 0.9999990463256836, 0.9999179840087891, 0.9999973773956299, 0.9964264035224915, 0.9883396625518799, 0.7585844993591309, 0.962102472782135, 0.8603035807609558, 0.9998493194580078, 0.9999865293502808, 0.9999082088470459, 0.9998868703842163, 0.999321699142456, 0.9835970997810364, 0.8893908262252808, 0.9999939203262329, 0.9998082518577576, 0.9999799728393555, 0.9999867677688599, 0.5397316217422485, 0.8847019076347351], "line": {"boundary": [[167, 337], [177, 290], [216, 288], [233, 302], [255, 288], [278, 300], [309, 282], [329, 300], [356, 296], [387, 276], [415, 294], [452, 300], [465, 292], [487, 298], [508, 278], [534, 278], [547, 288], [567, 278], [590, 298], [614, 278], [651, 276], [680, 298], [693, 292], [736, 302], [769, 280], [797, 282], [814, 298], [840, 296], [865, 280], [890, 298], [914, 278], [951, 292], [984, 265], [996, 265], [1021, 288], [1056, 280], [1072, 292], [1097, 282], [1113, 296], [1132, 280], [1179, 306], [1204, 282], [1228, 294], [1265, 284], [1298, 311], [1331, 290], [1362, 296], [1428, 280], [1491, 335], [1463, 335], [1446, 350], [1401, 335], [1380, 350], [1347, 341], [1313, 362], [1288, 345], [1270, 350], [1259, 341], [1212, 339], [1189, 346], [1171, 331], [1093, 348], [1066, 335], [1003, 339], [978, 362], [941, 337], [910, 348], [853, 352], [808, 327], [783, 346], [732, 327], [701, 350], [682, 350], [664, 335], [602, 335], [569, 346], [547, 327], [499, 348], [458, 343], [440, 358], [405, 333], [345, 335], [327, 348], [292, 337], [245, 350], [226, 335], [171, 348]], "baseline": [[169, 339], [269, 335], [304, 329], [1288, 329], [1368, 331], [1389, 335], [1492, 337]], "id": "line_1", "type": "baselines"}}, {"prediction": "\u0631\u0628\u0647\u0645\u060c \u0642\u0644\u0628\u0647 \u0628\u0639\u064a\u062f \u0645\u0646 \u0627\u0644\u0627\u0653\u062e\u0631\u0629\u060c \u0645\u062a\u0639\u0644\u0642 \u0628\u0627\u0644\u062f\u0646\u064a\u0627\u060c\u0639\u0644\u0645\u0647 \u062f\u0643\u0627\u0646\u0647\u060c \u0648\u064a\u062a\u0627\u0654\u0643\u0644 \u0648\u064a\u0631\u062a\u0632\u0642\u060c \u0648\u0644\u0627 \u064a\u0639\u0627\u0645\u0644", "cuts": [[1302, 1302], [1280, 1280], [1269, 1269], [1241, 1241], [1224, 1224], [1201, 1207], [1190, 1190], [1179, 1179], [1168, 1168], [1151, 1151], [1134, 1140], [1123, 1123], [1106, 1106], [1089, 1095], [1078, 1078], [1050, 1055], [1039, 1039], [1016, 1016], [988, 994], [982, 982], [966, 971], [954, 960], [949, 949], [926, 926], [909, 909], [893, 893], [876, 876], [853, 859], [842, 842], [831, 831], [808, 808], [797, 797], [780, 780], [747, 758], [741, 741], [730, 730], [719, 719], [702, 702], [685, 685], [674, 674], [662, 662], [646, 646], [629, 629], [612, 612], [589, 589], [573, 573], [550, 556], [539, 539], [522, 522], [500, 505], [494, 494], [477, 477], [460, 466], [443, 449], [432, 432], [415, 415], [404, 404], [393, 393], [382, 387], [376, 376], [354, 359], [320, 331], [314, 314], [292, 292], [281, 281], [264, 264], [253, 253], [230, 230], [196, 202], [180, 185], [168, 174], [146, 152], [135, 140], [112, 118], [107, 107], [84, 90], [73, 73], [56, 56], [39, 45]], "confidences": [0.999483585357666, 0.9989271759986877, 0.9999568462371826, 0.9999847412109375, 0.9999631643295288, 0.9999524354934692, 0.9999338388442993, 0.9999792575836182, 0.9999816417694092, 0.9999970197677612, 0.9998041987419128, 0.9913369417190552, 0.9999105930328369, 0.9999866485595703, 0.9997265934944153, 0.9998457431793213, 0.9999898672103882, 0.9658181667327881, 0.9998805522918701, 0.9999202489852905, 0.9999966621398926, 0.9999680519104004, 0.6977024078369141, 0.681415855884552, 0.9998468160629272, 0.999790370464325, 0.998950719833374, 0.9989398121833801, 0.9998928308486938, 0.9993798732757568, 0.9988120794296265, 0.9999618530273438, 0.978205144405365, 0.9999402761459351, 0.9968582391738892, 0.9899797439575195, 0.9999998807907104, 0.9918898940086365, 1.0, 0.6370328664779663, 0.9123554229736328, 0.9965428709983826, 0.9990838766098022, 0.6425076127052307, 0.999977707862854, 0.9999984502792358, 0.9999998807907104, 0.9999978542327881, 0.5949130058288574, 0.9999992847442627, 0.998330295085907, 0.863884687423706, 0.9997449517250061, 0.9999986886978149, 0.9999614953994751, 0.9998691082000732, 0.9999910593032837, 0.7401690483093262, 0.9997996687889099, 0.999140739440918, 0.9999452829360962, 0.9999958276748657, 0.9999629259109497, 0.999981164932251, 0.9999955892562866, 0.9999098777770996, 0.9996079802513123, 0.8690406680107117, 0.9999758005142212, 0.9999970197677612, 0.9999972581863403, 0.999855637550354, 0.9997760653495789, 0.9999991655349731, 0.9998064637184143, 0.9998438358306885, 0.8385894894599915, 0.9975091218948364, 0.9999769926071167], "line": {"boundary": [[161, 405], [165, 380], [189, 358], [206, 364], [224, 356], [257, 372], [276, 354], [298, 352], [335, 378], [384, 356], [393, 366], [413, 360], [432, 376], [467, 372], [477, 380], [516, 345], [528, 345], [571, 374], [600, 380], [639, 345], [670, 345], [713, 374], [754, 356], [787, 372], [805, 358], [844, 368], [875, 356], [904, 382], [941, 356], [961, 372], [982, 368], [1007, 382], [1029, 364], [1060, 378], [1087, 354], [1113, 350], [1150, 378], [1165, 372], [1204, 383], [1222, 368], [1284, 383], [1325, 358], [1384, 382], [1452, 380], [1465, 391], [1471, 415], [1440, 428], [1403, 424], [1385, 440], [1352, 413], [1317, 426], [1294, 413], [1274, 426], [1257, 419], [1231, 426], [1204, 409], [1169, 430], [1091, 409], [1044, 428], [1009, 407], [941, 415], [923, 426], [902, 419], [885, 424], [871, 413], [814, 424], [799, 411], [771, 422], [705, 405], [686, 415], [600, 407], [580, 422], [528, 411], [504, 428], [489, 428], [471, 415], [458, 422], [384, 424], [337, 405], [315, 422], [274, 405], [255, 421], [218, 409], [191, 426], [165, 419]], "baseline": [[163, 407], [1251, 407], [1325, 409], [1378, 417], [1473, 417]], "id": "line_2", "type": "baselines"}}, {"prediction": "\u0627\u0644\u0644\u0647 \u0628\u0639\u0644\u0645\u0647 \u0627\u0655\u0644\u0627 \u0642\u0644\u064a\u0644\u0627\u060c \u064a\u0633\u0643\u062a \u0639\u0646 \u0627\u0644\u062d\u0642 \u062e\u0634\u064a\u0629 \u0633\u0642\u0648\u0637 \u0645\u0646\u0632\u0644\u062a\u0647\u060c \u0648\u064a\u0645\u0627\u0644\u064a\u0654 \u0639\u0644\u0649 \u0627\u0644\u0628\u0627\u0637\u0644 \u0637\u0644\u0628\u0627", "cuts": [[1285, 1285], [1274, 1280], [1263, 1263], [1258, 1258], [1236, 1241], [1230, 1230], [1214, 1214], [1198, 1198], [1181, 1181], [1159, 1165], [1143, 1148], [1137, 1137], [1126, 1132], [1116, 1121], [1105, 1110], [1088, 1094], [1077, 1077], [1066, 1066], [1050, 1050], [1034, 1039], [1023, 1028], [1006, 1006], [990, 995], [979, 979], [957, 962], [935, 935], [897, 897], [869, 875], [853, 853], [831, 831], [804, 809], [798, 798], [787, 787], [760, 760], [744, 744], [711, 716], [694, 694], [667, 667], [645, 645], [629, 629], [612, 618], [596, 602], [574, 574], [558, 558], [525, 525], [498, 503], [487, 492], [476, 476], [459, 465], [443, 448], [432, 432], [421, 421], [399, 405], [383, 388], [377, 377], [355, 355], [339, 339], [323, 323], [312, 312], [295, 295], [279, 284], [262, 268], [252, 252], [230, 230], [213, 213], [180, 186], [175, 175], [164, 170], [153, 153], [137, 142], [120, 120], [104, 104], [66, 71], [49, 55], [38, 38], [22, 22], [11, 16]], "confidences": [0.6223369240760803, 0.999977707862854, 0.9996325969696045, 0.9976205229759216, 0.9999915361404419, 0.9999442100524902, 0.9999935626983643, 0.9986664056777954, 0.9931642413139343, 0.999994158744812, 0.99997878074646, 0.9995927214622498, 0.9999953508377075, 0.9999521970748901, 0.9999961853027344, 0.9999990463256836, 0.9987659454345703, 0.9996764659881592, 0.9999899864196777, 0.9999946355819702, 0.9998693466186523, 0.9999508857727051, 0.9999494552612305, 0.9999960660934448, 0.9999898672103882, 0.9999620914459229, 0.9999936819076538, 0.9995738863945007, 0.9997065663337708, 0.9967997074127197, 0.9996978044509888, 0.9999291896820068, 0.9937999844551086, 0.7420834898948669, 0.9566183090209961, 0.9999990463256836, 0.9998831748962402, 0.9999995231628418, 0.8633337020874023, 0.9998383522033691, 1.0, 0.9999995231628418, 0.9999997615814209, 1.0, 0.9999963045120239, 0.9999927282333374, 0.9999871253967285, 0.9999827146530151, 0.9999991655349731, 0.9999961853027344, 0.9995644688606262, 0.9999992847442627, 0.9997718930244446, 0.999894380569458, 1.0, 0.9999994039535522, 0.9999990463256836, 0.9999983310699463, 1.0, 0.9998666048049927, 1.0, 0.9999922513961792, 0.9998834133148193, 0.9998831748962402, 0.9995386600494385, 0.9999641180038452, 0.9991496801376343, 0.9994356036186218, 0.9781442284584045, 0.9928722381591797, 0.9813116192817688, 0.9999994039535522, 0.9999991655349731, 0.999995231628418, 0.9999226331710815, 0.9999967813491821, 0.9934727549552917], "line": {"boundary": [[175, 477], [181, 422], [191, 432], [216, 430], [241, 454], [265, 432], [315, 438], [335, 430], [364, 456], [395, 432], [432, 458], [471, 432], [508, 456], [551, 458], [586, 448], [604, 432], [649, 450], [688, 432], [711, 454], [731, 438], [768, 454], [793, 434], [816, 450], [836, 440], [846, 450], [863, 442], [877, 454], [902, 430], [931, 450], [957, 436], [980, 454], [1000, 456], [1019, 446], [1037, 456], [1111, 434], [1134, 456], [1187, 426], [1212, 444], [1220, 436], [1251, 444], [1286, 436], [1315, 456], [1339, 456], [1356, 438], [1399, 458], [1424, 438], [1450, 440], [1467, 456], [1473, 481], [1440, 497], [1413, 495], [1393, 508], [1376, 497], [1319, 493], [1288, 506], [1257, 485], [1218, 504], [1165, 491], [1134, 502], [1122, 493], [1050, 495], [1031, 485], [996, 508], [978, 508], [961, 493], [931, 493], [906, 512], [867, 487], [807, 504], [783, 485], [732, 493], [721, 504], [666, 485], [621, 504], [555, 487], [538, 502], [481, 491], [450, 508], [421, 489], [378, 504], [356, 502], [341, 489], [313, 500], [298, 487], [261, 506], [245, 504], [226, 487], [179, 497]], "baseline": [[177, 479], [298, 477], [360, 485], [403, 487], [508, 487], [573, 483], [795, 483], [818, 487], [1475, 483]], "id": "line_3", "type": "baselines"}}, {"prediction": "\u0644\u0644\u0631\u0641\u0639\u0629\u060c \u0641\u0645\u0627 \u0627\u0654\u0628\u0639\u062f \u0647\u0630\u0627 \u0639\u0646 \u0627\u0644\u0644\u0647 \u0648\u0639\u0646 \u0637\u0631\u064a\u0642\u0647\u060c \u0639\u0644\u0645\u0647 \u062d\u062c\u0629 \u0639\u0644\u064a\u0647.", "cuts": [[917, 917], [901, 901], [890, 890], [868, 868], [852, 852], [836, 836], [820, 820], [799, 804], [793, 793], [772, 772], [756, 756], [740, 745], [734, 734], [724, 729], [718, 718], [708, 708], [686, 691], [665, 670], [649, 654], [633, 633], [611, 611], [595, 600], [584, 584], [557, 557], [536, 536], [525, 531], [520, 520], [504, 504], [493, 499], [477, 482], [466, 472], [445, 445], [418, 423], [391, 397], [375, 375], [359, 359], [343, 343], [327, 327], [311, 311], [295, 295], [273, 279], [263, 263], [247, 247], [225, 225], [209, 209], [188, 193], [166, 166], [139, 139], [118, 118], [97, 102], [86, 86], [64, 70], [54, 54], [43, 43], [21, 27]], "confidences": [0.9995940327644348, 0.9446550607681274, 0.9981995820999146, 0.9999864101409912, 0.6075229644775391, 0.99992835521698, 0.9997560381889343, 0.9999634027481079, 0.9998078942298889, 0.9999945163726807, 0.9999508857727051, 0.9999924898147583, 0.9999949932098389, 0.9999926090240479, 0.9998032450675964, 0.9999107122421265, 0.9999817609786987, 0.9998050332069397, 0.9999833106994629, 0.9495548605918884, 0.9993699193000793, 0.9999070167541504, 0.9915083646774292, 0.999798595905304, 0.9999779462814331, 0.9999381303787231, 0.9971952438354492, 0.9972888231277466, 0.9999881982803345, 0.9999971389770508, 0.9995827078819275, 0.9999994039535522, 0.999994158744812, 0.9999692440032959, 0.9996156692504883, 0.5591697096824646, 0.9999910593032837, 0.9997571110725403, 0.8518497347831726, 0.9999833106994629, 0.9999939203262329, 0.9998816251754761, 0.9999935626983643, 0.9927089214324951, 0.9999922513961792, 0.996820330619812, 0.9999880790710449, 0.9995105266571045, 0.9999866485595703, 0.9999912977218628, 0.9999923706054688, 0.9999964237213135, 0.9993194341659546, 0.999998927116394, 0.9977816939353943], "line": {"boundary": [[547, 549], [551, 536], [600, 508], [629, 526], [649, 510], [680, 530], [703, 526], [723, 534], [773, 512], [814, 534], [853, 514], [883, 530], [908, 510], [933, 536], [945, 524], [1013, 532], [1035, 510], [1097, 534], [1165, 514], [1200, 537], [1214, 524], [1231, 532], [1265, 506], [1302, 530], [1321, 518], [1339, 534], [1358, 518], [1382, 530], [1391, 520], [1415, 528], [1424, 518], [1448, 516], [1465, 534], [1471, 559], [1417, 596], [1389, 575], [1337, 567], [1319, 575], [1274, 567], [1245, 582], [1233, 573], [1146, 573], [1128, 563], [1093, 586], [1076, 586], [1060, 571], [1021, 567], [998, 580], [974, 569], [957, 584], [939, 584], [918, 567], [888, 584], [814, 561], [803, 569], [742, 569], [725, 559], [666, 575], [635, 559], [592, 578], [549, 563]], "baseline": [[549, 551], [582, 557], [807, 555], [966, 565], [1473, 561]], "id": "line_4", "type": "baselines"}}, {"prediction": "\u0648\u0645\u062a\u0649 \u0631\u0627\u0654\u064a\u062a\u0645 \u0627\u0644\u0639\u0627\u0644\u0645 \u0642\u0644\u064a\u0644 \u0627\u0644\u0648\u0631\u0639 \u0641\u064a \u0643\u0644\u0627\u0645\u0647 \u060c \u064a\u062a\u0643\u0644\u0645 \u0645\u062c\u0627\u0632\u0641\u0629\u060c \u0648\u064a\u0643\u0630\u0628 \u0627\u0654\u062d\u064a\u0627\u0646\u0627\u060c", "cuts": [[1223, 1223], [1201, 1201], [1190, 1190], [1173, 1173], [1129, 1140], [1118, 1118], [1101, 1107], [1096, 1096], [1090, 1090], [1079, 1079], [1062, 1062], [1029, 1040], [1024, 1024], [1013, 1018], [996, 996], [979, 979], [968, 968], [946, 952], [919, 924], [908, 908], [891, 891], [880, 880], [863, 869], [830, 836], [819, 825], [808, 813], [797, 802], [775, 775], [747, 747], [714, 719], [703, 703], [692, 692], [647, 659], [636, 636], [614, 614], [603, 609], [587, 587], [570, 570], [559, 559], [553, 553], [526, 531], [515, 515], [504, 504], [481, 481], [465, 465], [443, 448], [415, 421], [404, 404], [376, 376], [354, 360], [343, 343], [326, 326], [310, 310], [293, 293], [266, 271], [255, 255], [238, 238], [216, 216], [199, 199], [160, 166], [122, 127], [116, 116], [105, 111], [89, 89], [72, 72], [61, 61], [50, 50], [39, 39], [28, 28]], "confidences": [0.9989548921585083, 0.9999619722366333, 0.9992412328720093, 0.9541407823562622, 0.9999735355377197, 0.9940637946128845, 0.999988317489624, 0.9999865293502808, 0.9999904632568359, 0.550645649433136, 0.9999978542327881, 0.9999892711639404, 0.9996963739395142, 0.9999991655349731, 0.5165660977363586, 0.999988317489624, 0.9995940327644348, 0.9999626874923706, 0.9998881816864014, 0.9940359592437744, 0.9996926784515381, 0.9999793767929077, 0.9998898506164551, 0.9998297691345215, 0.9897773861885071, 0.9994788765907288, 0.9995355606079102, 0.9969993829727173, 0.9985607266426086, 0.9999980926513672, 0.9996448755264282, 0.9874195456504822, 0.9999774694442749, 0.9867774844169617, 0.9744981527328491, 0.9999960660934448, 0.9999808073043823, 0.9993176460266113, 0.9999256134033203, 0.9999924898147583, 0.9999164342880249, 0.9999569654464722, 0.9999525547027588, 0.9997047781944275, 0.9999884366989136, 0.9999561309814453, 0.9999027252197266, 0.999967098236084, 0.9966025352478027, 0.9999691247940063, 0.9973816275596619, 0.9003818035125732, 0.9999942779541016, 0.9996612071990967, 0.9999988079071045, 0.9940271377563477, 0.9999754428863525, 0.9999979734420776, 0.9999998807907104, 0.9994766116142273, 0.9999978542327881, 0.9999990463256836, 0.9999949932098389, 0.9999971389770508, 0.8546275496482849, 0.9999696016311646, 0.9999052286148071, 0.9918268918991089, 0.5608442425727844], "line": {"boundary": [[161, 631], [163, 592], [185, 573], [230, 604], [257, 580], [309, 610], [341, 586], [380, 584], [423, 615], [456, 588], [508, 588], [524, 604], [559, 604], [575, 619], [612, 586], [649, 586], [682, 619], [697, 606], [729, 606], [742, 594], [793, 592], [822, 619], [853, 592], [877, 612], [896, 600], [927, 610], [949, 590], [962, 590], [990, 613], [1013, 592], [1023, 598], [1039, 588], [1060, 592], [1083, 613], [1113, 588], [1140, 602], [1163, 588], [1196, 615], [1251, 582], [1294, 621], [1309, 619], [1327, 602], [1360, 612], [1378, 608], [1389, 619], [1395, 647], [1366, 660], [1341, 649], [1321, 662], [1302, 662], [1282, 647], [1270, 658], [1226, 652], [1200, 670], [1175, 647], [1120, 645], [1087, 668], [1062, 645], [1009, 666], [970, 645], [894, 672], [867, 649], [832, 670], [799, 643], [748, 651], [688, 641], [670, 656], [647, 645], [615, 645], [586, 666], [561, 641], [483, 654], [426, 633], [397, 654], [331, 643], [311, 656], [280, 631], [228, 654], [165, 637]], "baseline": [[163, 633], [651, 633], [674, 637], [729, 637], [818, 643], [857, 641], [890, 647], [912, 647], [931, 652], [968, 643], [1011, 641], [1245, 641], [1300, 647], [1345, 645], [1397, 649]], "id": "line_5", "type": "baselines"}}, {"prediction": "\u0648\u064a\u0633\u062a\u0639\u0645\u0644 \u0627\u0644\u0647\u0632\u0644 \u0648\u0627\u0644\u0644\u0639\u0628\u060c \u0648\u064a\u0630\u0643\u0631 \u0627\u0644\u0645\u0631\u062f\u0627\u0646\u060c \u0648\u064a\u0645\u064a\u0644 \u0627\u0655\u0644\u064a\u0647\u0645\u060c \u0627\u0654\u0648 \u0631\u0627\u0654\u064a\u062a\u0645\u0648\u0647 \u0642\u0644\u064a\u0644 \u0627\u0644\u0648\u0631\u0639 \u0641\u064a", "cuts": [[1298, 1298], [1283, 1283], [1267, 1267], [1246, 1246], [1229, 1229], [1208, 1208], [1187, 1192], [1155, 1160], [1149, 1149], [1139, 1139], [1117, 1123], [1107, 1107], [1085, 1091], [1053, 1058], [1042, 1042], [1026, 1026], [1016, 1016], [1000, 1000], [984, 984], [952, 957], [925, 925], [903, 909], [893, 893], [877, 877], [861, 861], [839, 839], [818, 818], [797, 802], [786, 791], [775, 780], [759, 759], [738, 743], [722, 722], [706, 711], [695, 695], [668, 668], [647, 658], [641, 641], [620, 620], [604, 604], [588, 588], [572, 577], [545, 545], [535, 540], [524, 529], [519, 519], [508, 508], [492, 492], [470, 470], [449, 454], [433, 438], [428, 428], [417, 422], [412, 412], [385, 390], [369, 374], [353, 358], [347, 347], [342, 342], [331, 331], [315, 315], [299, 299], [278, 278], [257, 262], [246, 246], [235, 235], [219, 219], [203, 208], [176, 182], [166, 171], [155, 160], [144, 144], [123, 123], [96, 96], [70, 75], [59, 59], [43, 48]], "confidences": [0.9960930943489075, 0.9970471262931824, 0.9999514818191528, 0.9999713897705078, 0.9975488781929016, 0.9999634027481079, 0.9999896287918091, 0.9999924898147583, 0.9999784231185913, 0.9999960660934448, 0.9997754693031311, 0.9999520778656006, 0.9999797344207764, 0.9999464750289917, 0.999251663684845, 0.9999938011169434, 0.9999744892120361, 0.9904490113258362, 0.6805958151817322, 0.9993933439254761, 0.8523104190826416, 0.9999516010284424, 0.9954115748405457, 0.9966720342636108, 0.9986212253570557, 0.9991599321365356, 0.9994064569473267, 0.9998964071273804, 0.999936580657959, 0.9998494386672974, 0.9968574047088623, 0.9996702671051025, 0.999824583530426, 0.9998010993003845, 0.9999998807907104, 0.9999876022338867, 0.9999998807907104, 0.9999998807907104, 0.9999731779098511, 0.9999935626983643, 0.9999995231628418, 0.9998869895935059, 0.9999819993972778, 0.9999923706054688, 0.9999994039535522, 0.9997376799583435, 0.9999179840087891, 0.999994158744812, 0.9999123811721802, 0.9999874830245972, 1.0, 0.9014513492584229, 0.9999948740005493, 0.9999997615814209, 0.9999998807907104, 0.9998629093170166, 0.9677855372428894, 0.9999980926513672, 0.9946457147598267, 0.9999970197677612, 0.972520649433136, 0.999996542930603, 0.9999895095825195, 0.9999986886978149, 0.9621902108192444, 0.9999395608901978, 0.9999432563781738, 0.9999014139175415, 0.9999983310699463, 0.999998927116394, 0.999935507774353, 0.9999979734420776, 0.9999970197677612, 0.9999983310699463, 0.9999921321868896, 0.9999868869781494, 0.9999967813491821], "line": {"boundary": [[155, 727], [159, 701], [198, 666], [222, 680], [239, 672], [270, 682], [300, 660], [327, 682], [346, 664], [391, 664], [413, 682], [434, 686], [471, 676], [493, 656], [530, 684], [567, 656], [592, 680], [615, 688], [656, 664], [674, 666], [693, 684], [717, 668], [736, 686], [785, 682], [795, 690], [822, 670], [851, 668], [886, 690], [916, 666], [935, 670], [951, 686], [968, 672], [1005, 666], [1027, 686], [1052, 691], [1060, 684], [1103, 691], [1136, 666], [1169, 670], [1194, 690], [1220, 668], [1255, 682], [1280, 666], [1306, 686], [1325, 670], [1352, 690], [1376, 680], [1403, 691], [1446, 686], [1456, 719], [1442, 736], [1366, 725], [1345, 727], [1325, 742], [1311, 742], [1290, 725], [1233, 738], [1198, 723], [1177, 736], [1155, 725], [1120, 723], [1087, 736], [1056, 719], [1029, 734], [980, 723], [962, 736], [947, 736], [931, 723], [914, 723], [869, 736], [853, 723], [824, 727], [797, 719], [779, 732], [742, 725], [703, 740], [684, 728], [623, 728], [608, 742], [578, 719], [547, 732], [528, 725], [481, 732], [469, 723], [436, 732], [407, 717], [348, 736], [304, 721], [245, 744], [216, 727], [179, 736], [161, 727]], "baseline": [[157, 728], [187, 727], [270, 730], [313, 721], [403, 719], [460, 713], [526, 721], [900, 719], [1457, 721]], "id": "line_6", "type": "baselines"}}, {"prediction": "\u0627\u0644\u0645\u0627\u0654\u0643\u0644 \u0648\u0627\u0644\u0645\u0634\u0631\u0628\u060c \u0648\u0627\u0644\u0645\u062f\u062e\u0644 \u0648\u0627\u0644\u0645\u062e\u0631\u062c\u060c \u0644\u0627 \u064a\u0628\u0627\u0644\u064a \u0645\u0627 \u0627\u0654\u0643\u0644 \u062d\u0644\u0627\u0644\u0627 \u0643\u0627\u0646 \u0627\u0654\u0648 \u062d\u0631\u0627\u0645\u0627\u060c", "cuts": [[1298, 1304], [1291, 1291], [1273, 1273], [1254, 1260], [1248, 1248], [1242, 1242], [1217, 1223], [1180, 1192], [1173, 1173], [1155, 1155], [1142, 1142], [1124, 1124], [1105, 1105], [1080, 1080], [1049, 1049], [1018, 1018], [993, 1000], [987, 987], [969, 969], [956, 956], [937, 937], [919, 919], [888, 888], [869, 869], [826, 838], [820, 820], [795, 801], [788, 788], [770, 770], [739, 739], [720, 720], [695, 695], [671, 671], [646, 658], [633, 639], [621, 627], [596, 608], [590, 590], [577, 577], [565, 565], [553, 553], [540, 540], [503, 509], [490, 490], [472, 478], [453, 459], [441, 447], [435, 435], [428, 428], [404, 410], [366, 379], [348, 348], [329, 329], [310, 323], [298, 298], [286, 292], [255, 267], [248, 248], [224, 230], [211, 211], [180, 186], [174, 174], [168, 168], [155, 155], [124, 130], [106, 106], [87, 87], [68, 68], [56, 56], [37, 43], [25, 25]], "confidences": [0.9999150037765503, 0.9998385906219482, 0.999996542930603, 0.9999994039535522, 0.9999864101409912, 0.9999818801879883, 0.9999929666519165, 0.999998927116394, 0.9999581575393677, 0.9999958276748657, 0.9999880790710449, 0.9997920393943787, 0.9999971389770508, 0.9999898672103882, 0.9999960660934448, 0.9710601568222046, 0.996277391910553, 0.9998601675033569, 0.922956645488739, 0.9978814721107483, 0.999930739402771, 0.9997755885124207, 0.9413175582885742, 0.9998894929885864, 0.9993183612823486, 0.999767005443573, 0.9998904466629028, 0.6034071445465088, 0.9915944933891296, 0.999853253364563, 0.9953317046165466, 0.9986577033996582, 0.9640184640884399, 0.9999998807907104, 0.9999990463256836, 0.9999948740005493, 0.9999983310699463, 0.9997009038925171, 0.9999697208404541, 0.9999998807907104, 0.9997711777687073, 0.9742012023925781, 0.9999996423721313, 0.9999728202819824, 0.9999784231185913, 0.9999963045120239, 0.9999946355819702, 0.9767754077911377, 0.9991446733474731, 0.9999916553497314, 0.9999847412109375, 0.9995253086090088, 0.9999663829803467, 0.9999977350234985, 0.9770731925964355, 0.9999951124191284, 0.9999915361404419, 0.9999960660934448, 0.9701045751571655, 0.9999648332595825, 0.9999688863754272, 0.9998500347137451, 0.9999626874923706, 0.9992308616638184, 0.9999960660934448, 0.9513243436813354, 0.9999858140945435, 0.9998613595962524, 0.9998170733451843, 0.9996731281280518, 0.9003341794013977], "line": {"boundary": [[159, 783], [163, 748], [191, 732], [218, 740], [237, 758], [274, 766], [313, 730], [341, 750], [401, 744], [417, 730], [432, 730], [458, 746], [475, 742], [522, 769], [553, 742], [567, 746], [588, 732], [606, 748], [621, 742], [660, 775], [697, 742], [738, 762], [758, 744], [781, 740], [808, 760], [859, 766], [879, 748], [906, 764], [929, 742], [941, 742], [980, 771], [1013, 746], [1025, 756], [1068, 754], [1076, 762], [1103, 744], [1146, 773], [1161, 762], [1191, 771], [1212, 762], [1224, 769], [1243, 752], [1265, 764], [1292, 746], [1335, 775], [1362, 750], [1374, 754], [1401, 738], [1419, 754], [1430, 746], [1446, 750], [1465, 767], [1471, 793], [1448, 805], [1389, 803], [1360, 822], [1345, 820], [1329, 805], [1311, 816], [1288, 805], [1189, 816], [1152, 795], [1124, 814], [1101, 803], [1035, 799], [1007, 820], [994, 820], [974, 803], [947, 810], [935, 801], [885, 799], [857, 822], [834, 822], [797, 791], [779, 803], [758, 791], [738, 808], [721, 810], [707, 801], [676, 822], [643, 795], [617, 799], [606, 789], [569, 799], [551, 814], [534, 814], [510, 793], [460, 803], [403, 789], [389, 799], [350, 803], [329, 789], [294, 808], [265, 791], [222, 810], [204, 797], [171, 797], [163, 789]], "baseline": [[161, 785], [216, 791], [935, 789], [959, 795], [1472, 795]], "id": "line_7", "type": "baselines"}}, {"prediction": "\u0641\u0627\u062a\u0647\u0645\u0648\u0647 \u0639\u0644\u0649 \u0639\u0644\u0645\u0647 \u0648\u0639\u0644\u0649 \u062f\u064a\u0646\u0647\u060c \u0648\u0644\u0627 \u062a\u0642\u0644\u062f\u0648\u0647 \u0627\u0654\u0645\u0648\u0631\u0643\u0645\u060c \u0648\u0627\u062d\u0630\u0631\u0648\u0647 \u0627\u0654\u0646 \u064a\u0633\u0644\u0628\u0643\u0645 \u062f\u064a\u0646\u0643\u0645\u060c", "cuts": [[1304, 1304], [1293, 1293], [1283, 1283], [1266, 1266], [1245, 1245], [1228, 1228], [1207, 1207], [1185, 1191], [1169, 1169], [1147, 1147], [1131, 1131], [1099, 1104], [1082, 1082], [1066, 1066], [1044, 1044], [1028, 1028], [1001, 1012], [996, 996], [969, 969], [947, 947], [936, 936], [898, 904], [887, 887], [871, 871], [860, 860], [850, 850], [828, 828], [806, 812], [795, 801], [774, 779], [763, 768], [741, 747], [731, 731], [720, 720], [703, 703], [687, 687], [666, 666], [644, 644], [622, 628], [617, 617], [606, 612], [601, 601], [584, 584], [563, 563], [541, 541], [514, 514], [498, 498], [476, 482], [465, 465], [449, 449], [422, 422], [406, 406], [384, 384], [363, 363], [341, 341], [325, 330], [314, 319], [308, 308], [298, 298], [265, 276], [260, 260], [244, 244], [216, 216], [206, 206], [184, 184], [157, 162], [135, 141], [124, 124], [108, 108], [97, 97], [76, 76], [54, 54], [32, 32]], "confidences": [0.9997382760047913, 0.9998076558113098, 0.9998169541358948, 0.9999723434448242, 0.9999963045120239, 0.9998815059661865, 0.9978761672973633, 0.9999692440032959, 0.9999940395355225, 0.9997928738594055, 0.9998121857643127, 0.9998834133148193, 0.9999972581863403, 0.9986358284950256, 0.9999672174453735, 0.9999685287475586, 0.9999872446060181, 0.9996137022972107, 0.9999386072158813, 0.9998291730880737, 0.9996570348739624, 0.9997431635856628, 0.9989522695541382, 0.9978705644607544, 0.6706600189208984, 0.727662205696106, 0.9994146823883057, 0.9998109936714172, 0.9988961219787598, 0.9999992847442627, 0.9999957084655762, 0.9998549222946167, 0.7824696898460388, 0.9987309575080872, 0.9999728202819824, 0.9999747276306152, 0.9984544515609741, 0.9999949932098389, 0.9999949932098389, 0.9999567270278931, 0.9999990463256836, 0.9999997615814209, 1.0, 0.999970555305481, 0.9995998740196228, 0.9863488674163818, 0.9999908208847046, 0.9998534917831421, 0.989995002746582, 0.999998927116394, 0.9999957084655762, 0.9997010827064514, 0.9999995231628418, 0.9993435740470886, 0.9999997615814209, 0.9204366207122803, 0.9999145269393921, 0.9971621036529541, 0.9998090863227844, 0.9999971389770508, 0.9999977350234985, 0.999993085861206, 0.999996542930603, 0.9999635219573975, 0.9999977350234985, 0.9999561309814453, 0.9999858140945435, 0.9998942613601685, 0.9999914169311523, 0.9876537919044495, 0.9992417097091675, 0.9999997615814209, 0.9282093048095703], "line": {"boundary": [[152, 853], [171, 834], [189, 840], [228, 812], [284, 845], [329, 816], [413, 834], [446, 810], [489, 838], [516, 840], [545, 818], [563, 834], [588, 822], [619, 843], [633, 834], [649, 842], [666, 826], [688, 822], [713, 842], [754, 812], [789, 840], [832, 822], [881, 830], [920, 820], [951, 845], [962, 836], [1001, 832], [1027, 834], [1046, 851], [1081, 822], [1146, 845], [1163, 834], [1179, 840], [1204, 822], [1247, 853], [1282, 822], [1323, 847], [1335, 840], [1391, 845], [1409, 832], [1440, 828], [1462, 845], [1467, 869], [1401, 894], [1382, 881], [1348, 894], [1321, 871], [1269, 894], [1253, 894], [1226, 875], [1183, 881], [1152, 873], [1128, 890], [1095, 879], [1056, 894], [1033, 877], [1003, 888], [955, 871], [935, 888], [922, 888], [888, 867], [869, 879], [812, 879], [795, 888], [764, 869], [715, 890], [674, 877], [645, 898], [619, 875], [600, 888], [571, 871], [493, 886], [465, 869], [434, 881], [415, 875], [401, 884], [372, 877], [356, 886], [323, 875], [296, 896], [267, 875], [251, 884], [214, 875], [187, 896], [153, 867]], "baseline": [[153, 855], [228, 869], [1237, 867], [1269, 871], [1290, 867], [1309, 871], [1469, 871]], "id": "line_8", "type": "baselines"}}, {"prediction": "\u0628\u062a\u0647\u0648\u064a\u0646\u0647 \u0644\u0644\u0627\u0654\u0633\u064a\u0627\u0621 \u0627\u0644\u0635\u063a\u064a\u0631\u0629 \u0645\u0646 \u0627\u0644\u062d\u0631\u0627\u0645 \u0648\u0627\u0644\u0634\u0628\u0647\u0627\u062a\u060c \u064a\u0633\u0631\u0642 \u0628\u0630\u0644\u0643 \u0639\u0642\u0648\u0644\u0643\u0645\u060c \u0641\u064a\u0633\u062a\u062f\u0631\u062c\u0643\u0645", "cuts": [[1297, 1297], [1286, 1286], [1275, 1275], [1253, 1253], [1237, 1237], [1220, 1226], [1209, 1209], [1188, 1193], [1182, 1182], [1160, 1166], [1149, 1155], [1138, 1144], [1133, 1133], [1111, 1111], [1095, 1095], [1084, 1084], [1062, 1067], [1056, 1056], [1045, 1045], [1023, 1023], [991, 991], [974, 974], [958, 963], [941, 941], [919, 925], [914, 914], [887, 887], [859, 870], [854, 854], [843, 843], [815, 815], [799, 799], [783, 783], [766, 766], [744, 750], [739, 739], [717, 722], [706, 711], [690, 690], [668, 668], [651, 651], [629, 635], [607, 607], [580, 580], [558, 569], [553, 553], [536, 536], [509, 514], [493, 493], [454, 465], [449, 449], [438, 438], [416, 416], [405, 405], [356, 361], [345, 345], [328, 328], [306, 306], [290, 290], [268, 268], [246, 246], [224, 224], [203, 213], [197, 197], [186, 186], [164, 164], [148, 148], [131, 131], [109, 109], [82, 82], [55, 55], [27, 33]], "confidences": [0.9998189806938171, 0.9999316930770874, 0.9999616146087646, 0.9999963045120239, 0.9904739260673523, 0.9999723434448242, 0.9971580505371094, 0.9988645315170288, 0.9999966621398926, 0.9999974966049194, 0.9999973773956299, 0.9999791383743286, 0.9999858140945435, 0.9999887943267822, 0.5477295517921448, 0.9999678134918213, 0.9999643564224243, 0.8171812295913696, 0.9827367067337036, 0.9935495257377625, 0.9999936819076538, 0.999975323677063, 0.9999910593032837, 0.998406708240509, 0.9999222755432129, 0.9998999834060669, 0.9343510866165161, 0.9997228980064392, 0.7628433108329773, 0.6818570494651794, 0.950019121170044, 0.6418173313140869, 0.9943951368331909, 0.9706724882125854, 0.9999768733978271, 0.9994531273841858, 0.9995731711387634, 0.9997699856758118, 0.9988842606544495, 0.9997255206108093, 0.9999997615814209, 0.9999980926513672, 0.999735414981842, 0.9235820770263672, 0.9999998807907104, 0.9999927282333374, 0.9976077079772949, 0.9999990463256836, 0.8485846519470215, 0.9999995231628418, 0.9999078512191772, 0.9999904632568359, 0.999980092048645, 0.9999996423721313, 0.9956209063529968, 0.9999990463256836, 0.9995309114456177, 0.9999940395355225, 0.9999079704284668, 1.0, 0.9180242419242859, 0.9995797276496887, 0.9999831914901733, 0.9998835325241089, 0.9994398951530457, 0.988334059715271, 0.9999781847000122, 0.9999990463256836, 0.8295435309410095, 0.9995015859603882, 0.9999979734420776, 0.9999895095825195], "line": {"boundary": [[159, 947], [163, 923], [210, 894], [247, 920], [276, 906], [317, 920], [337, 902], [362, 916], [389, 918], [430, 892], [456, 908], [479, 900], [510, 920], [549, 896], [586, 896], [610, 918], [643, 898], [670, 921], [762, 912], [775, 900], [812, 921], [853, 898], [898, 925], [923, 902], [947, 918], [990, 898], [1019, 920], [1066, 920], [1087, 906], [1111, 921], [1136, 902], [1155, 920], [1183, 900], [1200, 902], [1218, 918], [1235, 902], [1259, 916], [1282, 896], [1298, 896], [1327, 900], [1347, 918], [1372, 912], [1391, 923], [1434, 912], [1473, 953], [1446, 970], [1428, 964], [1395, 972], [1343, 953], [1302, 962], [1276, 957], [1261, 968], [1216, 953], [1138, 957], [1099, 974], [1072, 953], [1037, 974], [1003, 957], [962, 957], [949, 970], [906, 980], [888, 964], [867, 968], [853, 957], [793, 968], [777, 957], [721, 953], [699, 966], [674, 957], [645, 968], [615, 957], [600, 966], [580, 955], [528, 957], [506, 945], [450, 968], [419, 953], [382, 976], [356, 953], [335, 966], [313, 957], [276, 955], [251, 966], [200, 955], [177, 976], [163, 974]], "baseline": [[161, 949], [241, 945], [664, 945], [705, 949], [729, 945], [822, 955], [923, 951], [1087, 951], [1107, 955], [1214, 945], [1362, 955], [1475, 954]], "id": "line_9", "type": "baselines"}}, {"prediction": "\u0645\u0646 \u062d\u064a\u062b \u0644\u0627 \u062a\u0639\u0644\u0645\u0648\u0646.", "cuts": [[343, 343], [316, 321], [294, 298], [276, 276], [258, 258], [230, 230], [199, 203], [185, 190], [172, 181], [158, 163], [149, 149], [136, 136], [118, 118], [95, 99], [77, 81], [54, 59], [32, 32]], "confidences": [0.9013516902923584, 0.9993886947631836, 0.9999945163726807, 0.9106606841087341, 0.9922044277191162, 0.9999985694885254, 0.999998927116394, 0.9999998807907104, 0.9999948740005493, 0.9999319314956665, 0.9999568462371826, 0.9999945163726807, 0.5355215072631836, 0.9999971389770508, 0.9999983310699463, 0.9999912977218628, 0.9786094427108765], "line": {"boundary": [[1109, 1025], [1146, 980], [1173, 997], [1189, 997], [1210, 976], [1231, 988], [1294, 976], [1309, 992], [1333, 984], [1348, 999], [1364, 992], [1395, 1007], [1409, 994], [1424, 1001], [1444, 997], [1473, 1027], [1454, 1029], [1411, 1056], [1380, 1031], [1347, 1046], [1300, 1029], [1274, 1036], [1263, 1025], [1241, 1036], [1191, 1036], [1171, 1050], [1118, 1025]], "baseline": [[1111, 1027], [1274, 1023], [1366, 1033], [1475, 1029]], "id": "line_10", "type": "baselines"}}, {"prediction": "\u0648\u0645\u062a\u0649 \u0631\u0627\u0654\u064a\u062a\u0645 \u0627\u0644\u0639\u0627\u0644\u0645 \u064a\u0642\u0628\u0644 \u0627\u0644\u0647\u062f\u064a\u0629 \u0645\u0646 \u0627\u0644\u0645\u0633\u062a\u0641\u062a\u064a \u0648\u064a\u0641\u062a\u064a\u0647 \u0639\u0644\u0649 \u063a\u0631\u0636\u0647\u060c \u0648\u064a\u062f\u062e\u0644 \u0641\u064a", "cuts": [[1225, 1225], [1201, 1207], [1189, 1189], [1172, 1172], [1136, 1148], [1130, 1130], [1112, 1118], [1106, 1106], [1100, 1100], [1088, 1088], [1064, 1070], [1041, 1047], [1029, 1035], [1023, 1023], [1011, 1011], [993, 993], [981, 981], [957, 963], [934, 940], [928, 928], [916, 916], [898, 898], [880, 886], [850, 856], [838, 844], [827, 833], [815, 815], [797, 797], [779, 779], [761, 761], [737, 743], [726, 731], [702, 702], [678, 684], [666, 672], [654, 660], [636, 642], [613, 618], [595, 595], [583, 583], [565, 565], [553, 553], [517, 523], [505, 505], [488, 488], [476, 476], [458, 458], [446, 446], [434, 434], [410, 416], [393, 393], [375, 375], [363, 363], [327, 333], [309, 309], [291, 291], [268, 268], [238, 238], [220, 220], [196, 202], [184, 184], [167, 167], [155, 155], [125, 131], [101, 107], [59, 71], [54, 54], [36, 42]], "confidences": [0.9998977184295654, 0.9992066025733948, 0.9999544620513916, 0.9999667406082153, 0.9999969005584717, 0.9999951124191284, 0.9999479055404663, 0.8893346190452576, 0.9999771118164062, 0.9999749660491943, 0.9999734163284302, 0.9999407529830933, 0.9999978542327881, 0.888961911201477, 0.999985933303833, 0.9997301697731018, 0.9997461438179016, 0.9999942779541016, 0.9999889135360718, 0.9999947547912598, 0.7681607007980347, 0.9985297918319702, 0.9992446899414062, 0.9999771118164062, 0.9999252557754517, 0.9995318651199341, 0.9955322742462158, 0.9999263286590576, 0.9855678081512451, 0.8572127223014832, 0.9958655834197998, 0.9997792840003967, 0.8732478022575378, 0.9998902082443237, 0.9997214674949646, 0.9999871253967285, 0.999970555305481, 0.9999971389770508, 0.9999786615371704, 0.9999481439590454, 0.9997740387916565, 0.8626158833503723, 0.9999806880950928, 0.9998955726623535, 0.9999974966049194, 0.9999513626098633, 0.9972359538078308, 0.9995180368423462, 0.9999905824661255, 1.0, 0.9999990463256836, 0.9999991655349731, 0.9999984502792358, 0.9999990463256836, 0.9999250173568726, 0.9994828701019287, 0.9996166229248047, 0.995541512966156, 0.9999992847442627, 0.999984860420227, 0.9904344081878662, 0.9992062449455261, 0.9999986886978149, 0.9761358499526978, 0.999893069267273, 0.9999963045120239, 0.9997863173484802, 0.9999911785125732], "line": {"boundary": [[159, 1103], [163, 1081], [196, 1052], [224, 1072], [249, 1050], [348, 1073], [382, 1062], [393, 1070], [409, 1056], [432, 1068], [458, 1052], [487, 1079], [518, 1050], [561, 1075], [573, 1064], [623, 1052], [641, 1070], [684, 1081], [727, 1052], [760, 1073], [773, 1073], [799, 1050], [834, 1072], [849, 1066], [859, 1073], [883, 1070], [908, 1052], [927, 1066], [955, 1066], [980, 1050], [1007, 1072], [1027, 1052], [1040, 1060], [1056, 1056], [1089, 1083], [1120, 1054], [1150, 1066], [1173, 1054], [1204, 1079], [1245, 1048], [1257, 1048], [1296, 1085], [1321, 1068], [1370, 1072], [1395, 1105], [1364, 1126], [1339, 1114], [1317, 1128], [1298, 1128], [1282, 1114], [1269, 1124], [1228, 1118], [1210, 1134], [1179, 1111], [1126, 1111], [1093, 1134], [1079, 1120], [1052, 1114], [1019, 1128], [990, 1109], [953, 1122], [939, 1111], [912, 1120], [892, 1101], [853, 1124], [838, 1124], [818, 1107], [721, 1109], [692, 1134], [662, 1111], [643, 1120], [612, 1109], [584, 1120], [565, 1101], [502, 1124], [485, 1122], [465, 1103], [428, 1122], [411, 1109], [360, 1107], [350, 1099], [325, 1118], [276, 1103], [239, 1126], [214, 1109], [177, 1130], [163, 1116]], "baseline": [[161, 1105], [214, 1111], [276, 1105], [296, 1099], [421, 1103], [906, 1101], [1005, 1111], [1093, 1111], [1113, 1107], [1165, 1105], [1206, 1111], [1397, 1107]], "id": "line_11", "type": "baselines"}}, {"prediction": "\u0627\u0644\u062a\u0627\u0654\u0648\u064a\u0644\u0627\u062a \u0648\u0627\u0644\u0634\u0628\u0647\u0627\u062a \u060c \u0643\u0645\u0633\u0627\u0654\u0644\u0629 \u0627\u0644\u0627\u0633\u062a\u062d\u0644\u0627\u0644\u060c \u0648\u0645\u0633\u0627\u0654\u0644\u0629 \u0627\u0644\u0631\u0628\u0627 \u0648\u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629\u060c \u0648\u0644\u0627 \u062a\u062c\u062f\u0648\u0646\u0647", "cuts": [[1293, 1298], [1284, 1289], [1274, 1274], [1260, 1265], [1255, 1255], [1245, 1245], [1231, 1231], [1212, 1216], [1202, 1207], [1168, 1168], [1130, 1140], [1120, 1120], [1101, 1106], [1091, 1096], [1077, 1077], [1053, 1053], [1039, 1039], [1019, 1024], [995, 995], [976, 976], [971, 971], [942, 947], [928, 928], [904, 904], [880, 885], [861, 865], [856, 856], [851, 851], [837, 837], [808, 813], [798, 803], [784, 789], [774, 779], [755, 755], [731, 731], [702, 702], [683, 688], [673, 678], [659, 659], [630, 630], [601, 611], [591, 591], [572, 572], [548, 553], [529, 529], [519, 524], [514, 514], [505, 505], [476, 481], [466, 466], [457, 457], [442, 442], [428, 428], [409, 414], [389, 394], [380, 380], [361, 361], [351, 351], [332, 332], [308, 308], [293, 298], [279, 284], [264, 264], [250, 250], [231, 236], [207, 212], [197, 197], [173, 178], [159, 168], [130, 139], [125, 125], [101, 101], [82, 82], [58, 58], [38, 38], [24, 24]], "confidences": [0.9996144771575928, 0.9999929666519165, 0.9999830722808838, 0.9999926090240479, 0.999995231628418, 0.9467358589172363, 0.999972939491272, 0.9995086193084717, 0.9998672008514404, 0.9942428469657898, 0.9999955892562866, 0.9999592304229736, 0.9999781847000122, 0.999994158744812, 0.9999866485595703, 0.999920129776001, 0.9999884366989136, 0.9986990690231323, 0.9997000694274902, 0.9911819696426392, 0.978091299533844, 0.999427855014801, 0.9999485015869141, 0.7997534275054932, 0.9999580383300781, 0.999704897403717, 0.520932137966156, 0.9891839027404785, 0.9960983991622925, 0.999637246131897, 0.9975180625915527, 0.9990247488021851, 0.9999979734420776, 0.7142682075500488, 0.9256128668785095, 1.0, 0.9999996423721313, 0.9998838901519775, 0.9999998807907104, 0.9960355162620544, 0.9999982118606567, 0.999958872795105, 0.9999998807907104, 1.0, 0.9999998807907104, 0.999992847442627, 0.9999973773956299, 0.9999991655349731, 0.9975195527076721, 0.9820659756660461, 0.9999998807907104, 0.9999421834945679, 0.9999996423721313, 0.9999991655349731, 0.9999985694885254, 0.6958007216453552, 0.9832131266593933, 0.9999997615814209, 0.9999964237213135, 0.9855285286903381, 0.9999996423721313, 0.9993840456008911, 0.9999988079071045, 0.9999823570251465, 0.9999992847442627, 0.9999185800552368, 0.9999986886978149, 0.9999874830245972, 0.9999970197677612, 0.9999932050704956, 0.9994638562202454, 0.9987408518791199, 0.999816358089447, 0.9999561309814453, 0.9999673366546631, 0.9998775720596313], "line": {"boundary": [[159, 1165], [163, 1146], [185, 1132], [210, 1146], [224, 1136], [253, 1146], [267, 1134], [286, 1138], [315, 1126], [327, 1126], [360, 1155], [389, 1130], [405, 1128], [426, 1138], [442, 1128], [467, 1148], [502, 1128], [536, 1150], [559, 1130], [578, 1146], [598, 1128], [629, 1142], [676, 1122], [707, 1151], [746, 1148], [758, 1157], [799, 1130], [836, 1132], [861, 1150], [875, 1140], [892, 1148], [912, 1130], [949, 1132], [962, 1144], [1001, 1122], [1042, 1153], [1081, 1132], [1105, 1151], [1150, 1144], [1163, 1132], [1200, 1151], [1241, 1130], [1286, 1161], [1309, 1144], [1360, 1134], [1378, 1148], [1405, 1124], [1450, 1142], [1467, 1179], [1444, 1190], [1405, 1190], [1387, 1202], [1290, 1183], [1269, 1200], [1239, 1188], [1193, 1200], [1163, 1187], [1111, 1188], [1099, 1179], [1056, 1190], [984, 1188], [961, 1179], [931, 1190], [910, 1185], [799, 1192], [762, 1179], [736, 1198], [713, 1187], [656, 1188], [623, 1179], [588, 1200], [567, 1196], [547, 1179], [526, 1196], [499, 1187], [401, 1187], [366, 1177], [345, 1194], [329, 1194], [296, 1175], [253, 1192], [220, 1185], [191, 1194], [163, 1179]], "baseline": [[161, 1167], [191, 1173], [306, 1177], [469, 1177], [493, 1181], [1469, 1181]], "id": "line_12", "type": "baselines"}}, {"prediction": "\u0645\u062a\u0639\u0641\u0641\u0627 \u0641\u064a \u0645\u0639\u064a\u0634\u062a\u0647\u060c \u062a\u0631\u0648\u0646\u0647 \u0637\u0627\u0645\u0639\u0627 \u0641\u064a \u0627\u0654\u0645\u0648\u0627\u0644 \u0627\u0644\u0646\u0627\u0633\u060c \u064a\u062f\u0627\u062e\u0644 \u0627\u0644\u0642\u0636\u0627\u0629 \u0644\u064a\u0648\u0644\u0648\u0647 \u0627\u0644\u0648\u0644\u0627\u064a\u0627\u062a\u060c", "cuts": [[1294, 1294], [1276, 1276], [1264, 1264], [1246, 1246], [1228, 1228], [1210, 1216], [1192, 1198], [1186, 1186], [1168, 1168], [1131, 1137], [1125, 1125], [1101, 1101], [1089, 1089], [1071, 1071], [1047, 1047], [1035, 1035], [1017, 1017], [999, 1005], [987, 987], [975, 975], [957, 957], [939, 939], [921, 921], [897, 903], [879, 879], [861, 867], [849, 849], [831, 831], [812, 818], [794, 800], [788, 788], [770, 770], [740, 740], [728, 734], [722, 722], [710, 710], [698, 698], [680, 680], [668, 668], [638, 638], [626, 632], [614, 620], [602, 602], [590, 596], [572, 572], [536, 536], [512, 518], [506, 506], [487, 494], [469, 475], [451, 451], [433, 433], [397, 403], [391, 391], [379, 379], [367, 367], [343, 343], [313, 313], [301, 301], [277, 289], [271, 271], [259, 259], [241, 247], [229, 229], [211, 211], [193, 193], [175, 181], [163, 169], [150, 157], [138, 138], [114, 120], [102, 108], [90, 90], [72, 78], [48, 48], [24, 24]], "confidences": [0.9999475479125977, 0.9999927282333374, 0.999996542930603, 0.9999957084655762, 0.999872088432312, 0.9999810457229614, 0.9999687671661377, 0.9999939203262329, 0.9999991655349731, 0.9942613840103149, 0.9999487400054932, 0.9999334812164307, 0.9999005794525146, 0.9999839067459106, 0.9999810457229614, 0.989007830619812, 0.9996200799942017, 0.9999685287475586, 0.6469784379005432, 0.6665834188461304, 0.7252474427223206, 0.9857919216156006, 0.9997385144233704, 0.9999765157699585, 0.9963619112968445, 0.9994021654129028, 0.9998681545257568, 0.9810250401496887, 0.9838308095932007, 0.9998787641525269, 0.9988665580749512, 0.9999058246612549, 0.6534377336502075, 0.9997734427452087, 0.631395697593689, 0.9998962879180908, 0.9999980926513672, 0.9978647828102112, 0.9999958276748657, 0.9721218943595886, 0.9996869564056396, 0.9999868869781494, 0.9235882759094238, 0.9999985694885254, 0.9997712969779968, 0.826903223991394, 0.999829888343811, 0.9994933605194092, 0.9999945163726807, 0.9999911785125732, 0.9996364116668701, 0.9999428987503052, 0.9976553916931152, 0.9999971389770508, 0.71103435754776, 0.9999946355819702, 0.9999889135360718, 0.9995948672294617, 0.9999077320098877, 0.9999817609786987, 0.9998291730880737, 0.999971866607666, 0.9999986886978149, 0.9999973773956299, 0.9999977350234985, 0.9933046698570251, 0.9999994039535522, 0.9999998807907104, 0.9999985694885254, 0.9998321533203125, 0.9999990463256836, 0.9999988079071045, 0.9999668598175049, 0.9999896287918091, 0.9999967813491821, 0.9679267406463623], "line": {"boundary": [[159, 1249], [167, 1220], [245, 1204], [267, 1204], [282, 1216], [300, 1204], [331, 1224], [348, 1224], [370, 1204], [391, 1220], [411, 1204], [432, 1216], [460, 1208], [473, 1220], [530, 1206], [555, 1226], [577, 1208], [590, 1216], [656, 1210], [697, 1235], [732, 1210], [762, 1206], [789, 1224], [816, 1208], [840, 1224], [867, 1200], [906, 1227], [961, 1194], [992, 1222], [1023, 1210], [1050, 1233], [1076, 1216], [1109, 1231], [1128, 1216], [1154, 1229], [1214, 1216], [1233, 1231], [1272, 1229], [1286, 1243], [1350, 1198], [1362, 1198], [1409, 1227], [1430, 1224], [1477, 1257], [1458, 1257], [1430, 1272], [1356, 1270], [1345, 1263], [1309, 1292], [1272, 1266], [1222, 1280], [1212, 1270], [1146, 1261], [1124, 1280], [1109, 1282], [1081, 1278], [1048, 1257], [1029, 1268], [959, 1268], [947, 1259], [916, 1288], [904, 1288], [877, 1265], [824, 1278], [783, 1261], [729, 1263], [707, 1280], [688, 1280], [668, 1263], [643, 1274], [598, 1261], [563, 1282], [538, 1263], [477, 1266], [430, 1257], [409, 1274], [345, 1276], [319, 1257], [270, 1276], [257, 1265], [230, 1272], [214, 1261], [163, 1259]], "baseline": [[161, 1251], [272, 1255], [292, 1259], [1424, 1257], [1478, 1258]], "id": "line_13", "type": "baselines"}}, {"prediction": "\u0645\u0639 \u0634\u0631\u0647\u0647 \u0639\u0644\u0649 \u0627\u0644\u062f\u0646\u064a\u0627\u060c \u0648\u0642\u0644\u0629 \u0648\u0631\u0639\u0647 \u0648\u0645\u0628\u0627\u0644\u0627\u062a\u0647 \u0628\u0627\u0644\u062d\u0644\u0627\u0644 \u0648\u0627\u0644\u062d\u0631\u0627\u0645\u060c \u0641\u0627\u062a\u0647\u0645\u0648\u0647 \u0639\u0644\u0649 \u0639\u0644\u0645\u0647", "cuts": [[1287, 1287], [1265, 1265], [1232, 1237], [1221, 1221], [1193, 1199], [1172, 1172], [1155, 1155], [1128, 1133], [1111, 1111], [1095, 1095], [1078, 1078], [1046, 1051], [1035, 1040], [1024, 1024], [1007, 1013], [991, 991], [980, 980], [964, 969], [953, 953], [931, 936], [920, 920], [898, 898], [881, 887], [870, 870], [843, 849], [832, 832], [810, 816], [788, 788], [772, 772], [745, 750], [734, 734], [712, 712], [695, 695], [684, 684], [668, 673], [657, 662], [646, 646], [630, 630], [602, 613], [597, 597], [586, 586], [575, 575], [547, 547], [526, 531], [515, 520], [498, 498], [460, 471], [449, 454], [432, 438], [422, 427], [400, 400], [378, 383], [361, 361], [345, 345], [328, 328], [307, 312], [296, 296], [285, 285], [274, 274], [257, 257], [235, 235], [219, 219], [197, 197], [170, 175], [159, 159], [137, 137], [126, 126], [82, 93], [71, 71], [55, 55], [33, 38], [22, 22]], "confidences": [0.9999666213989258, 0.9999809265136719, 0.9999946355819702, 0.9999746084213257, 0.9999938011169434, 0.9999914169311523, 0.9090831279754639, 0.9998230338096619, 0.9976154565811157, 0.9993928670883179, 0.9999699592590332, 0.9991900324821472, 0.9999030828475952, 0.999919056892395, 0.9999741315841675, 0.983220100402832, 0.9999629259109497, 0.9999812841415405, 0.6795229315757751, 0.9999853372573853, 0.9986742734909058, 0.9999790191650391, 0.9995899796485901, 0.9987137317657471, 0.9991518259048462, 0.9978784322738647, 0.9999507665634155, 0.9689961075782776, 0.9987661838531494, 0.9999948740005493, 0.581307590007782, 0.9999948740005493, 0.9670306444168091, 0.9999184608459473, 0.9983538389205933, 0.9998610019683838, 0.9507318735122681, 0.9808312058448792, 0.9999997615814209, 0.9999678134918213, 0.9999990463256836, 0.9445680975914001, 0.9999923706054688, 0.9999840259552002, 0.9999967813491821, 0.9999991655349731, 0.9999967813491821, 0.9999933242797852, 0.9997896552085876, 0.9999817609786987, 0.9999405145645142, 0.9997538924217224, 0.9999948740005493, 0.9972209930419922, 0.9999998807907104, 0.9999997615814209, 0.9762755036354065, 0.9999904632568359, 0.9999934434890747, 1.0, 0.9999963045120239, 0.9913928508758545, 0.9357872009277344, 0.9999316930770874, 1.0, 0.9693567752838135, 0.9998525381088257, 0.9999986886978149, 0.9999988079071045, 0.9999994039535522, 0.9999954700469971, 0.9990108013153076], "line": {"boundary": [[167, 1327], [171, 1296], [189, 1300], [208, 1282], [255, 1313], [292, 1282], [335, 1307], [348, 1300], [403, 1305], [436, 1284], [473, 1303], [497, 1300], [512, 1286], [538, 1303], [555, 1302], [582, 1284], [621, 1309], [651, 1284], [686, 1288], [705, 1303], [731, 1286], [766, 1313], [803, 1286], [840, 1288], [859, 1305], [896, 1305], [904, 1313], [941, 1300], [998, 1307], [1017, 1290], [1033, 1288], [1058, 1290], [1091, 1313], [1116, 1290], [1161, 1298], [1177, 1288], [1218, 1313], [1251, 1288], [1290, 1311], [1302, 1302], [1339, 1303], [1376, 1280], [1407, 1307], [1446, 1307], [1463, 1335], [1430, 1370], [1405, 1368], [1380, 1344], [1347, 1360], [1323, 1360], [1288, 1335], [1233, 1362], [1216, 1362], [1196, 1346], [1148, 1348], [1126, 1358], [1095, 1339], [1068, 1358], [1007, 1339], [986, 1356], [953, 1356], [908, 1339], [886, 1356], [844, 1356], [832, 1344], [775, 1341], [744, 1356], [732, 1344], [637, 1346], [625, 1339], [598, 1354], [555, 1341], [536, 1356], [516, 1352], [504, 1362], [465, 1337], [454, 1344], [428, 1342], [419, 1352], [387, 1342], [366, 1356], [331, 1331], [276, 1356], [261, 1354], [241, 1337], [202, 1344], [169, 1339]], "baseline": [[169, 1329], [200, 1327], [249, 1333], [461, 1333], [500, 1337], [1335, 1335], [1378, 1337], [1397, 1341], [1465, 1337]], "id": "line_14", "type": "baselines"}}, {"prediction": "\u0648\u062f\u064a\u0646\u0647.", "cuts": [[103, 106], [84, 84], [68, 68], [53, 53], [42, 42], [27, 27]], "confidences": [0.9999996423721313, 0.9999984502792358, 0.9997429251670837, 0.9999673366546631, 0.99901282787323, 0.9717188477516174], "line": {"boundary": [[1343, 1411], [1350, 1391], [1387, 1374], [1444, 1383], [1483, 1415], [1462, 1415], [1432, 1438], [1345, 1418]], "baseline": [[1345, 1413], [1419, 1413], [1484, 1417]], "id": "line_15", "type": "baselines"}}, {"prediction": "\u0648\u0645\u062a\u0649 \u0631\u0627\u0654\u064a\u062a\u0645 \u0639\u0627\u0644\u0645\u0627 \u0641\u064a \u0639\u0642\u0644\u0647 \u0633\u062e\u0627\u0641\u0629\u060c \u0648\u0641\u064a \u0646\u0638\u0631\u0647 \u0642\u0635\u0648\u0631\u060c \u064a\u0636\u0639 \u0627\u0644\u0627\u0654\u0634\u064a\u0627\u0621 - \u063a\u0627\u0644\u0628\u0627- \u0641\u064a", "cuts": [[1207, 1207], [1188, 1188], [1169, 1176], [1157, 1157], [1126, 1132], [1120, 1120], [1101, 1101], [1095, 1095], [1089, 1089], [1076, 1076], [1057, 1057], [1033, 1045], [1026, 1026], [1008, 1008], [995, 995], [977, 977], [958, 964], [939, 945], [933, 933], [914, 921], [890, 896], [871, 871], [852, 852], [840, 840], [821, 821], [802, 809], [790, 790], [753, 753], [734, 740], [722, 722], [709, 709], [690, 690], [672, 678], [666, 666], [647, 647], [628, 628], [597, 603], [591, 591], [566, 566], [547, 554], [535, 535], [510, 516], [504, 504], [485, 485], [454, 454], [435, 435], [417, 417], [398, 404], [392, 392], [367, 373], [330, 330], [311, 317], [305, 305], [286, 292], [280, 280], [268, 274], [261, 261], [236, 236], [218, 224], [205, 212], [187, 193], [174, 174], [156, 162], [143, 143], [124, 124], [112, 112], [100, 100], [87, 93], [68, 68], [50, 56], [37, 37], [25, 25]], "confidences": [0.9859687089920044, 0.9289069175720215, 0.9999728202819824, 0.9997435212135315, 0.9999949932098389, 0.9999815225601196, 0.999997615814209, 0.9999803304672241, 0.9999959468841553, 0.7412486672401428, 0.9978557229042053, 0.9999803304672241, 0.9999420642852783, 0.9999202489852905, 0.999981164932251, 0.9999773502349854, 0.9999395608901978, 0.9999784231185913, 0.9947001934051514, 0.9998576641082764, 0.9994139671325684, 0.9998432397842407, 0.9999716281890869, 0.9998818635940552, 0.6902597546577454, 0.999955415725708, 0.9993599057197571, 0.9993149042129517, 0.9999468326568604, 0.9852787256240845, 0.9907258749008179, 0.9999005794525146, 0.997058629989624, 0.9781426191329956, 0.8489178419113159, 0.8708791732788086, 0.9999767541885376, 0.9941668510437012, 0.966301441192627, 0.9999921321868896, 0.9917047023773193, 0.9999977350234985, 0.999850869178772, 0.589336633682251, 0.9973306655883789, 0.9999990463256836, 0.9893065094947815, 0.999998927116394, 0.9999986886978149, 0.9999996423721313, 0.999987006187439, 0.9929701685905457, 0.9999936819076538, 0.9999984502792358, 0.9898472428321838, 0.9999828338623047, 0.9971639513969421, 0.965297281742096, 0.9999982118606567, 0.9999784231185913, 0.9949177503585815, 0.9999829530715942, 0.9999810457229614, 0.9888534545898438, 0.9037330150604248, 0.9999834299087524, 0.9911187291145325, 0.9999808073043823, 0.9999874830245972, 0.9999430179595947, 0.9984645843505859, 0.9996715784072876], "line": {"boundary": [[173, 1489], [177, 1456], [192, 1440], [214, 1452], [253, 1422], [269, 1436], [300, 1438], [321, 1456], [352, 1457], [376, 1440], [399, 1452], [430, 1430], [467, 1442], [485, 1459], [508, 1459], [524, 1444], [557, 1463], [567, 1456], [631, 1463], [658, 1442], [695, 1459], [727, 1438], [750, 1444], [771, 1463], [795, 1442], [834, 1461], [861, 1442], [896, 1442], [914, 1444], [933, 1463], [964, 1463], [988, 1442], [1000, 1442], [1039, 1456], [1054, 1471], [1113, 1428], [1140, 1448], [1155, 1442], [1187, 1456], [1200, 1469], [1257, 1434], [1296, 1471], [1321, 1454], [1370, 1459], [1393, 1496], [1360, 1512], [1337, 1500], [1313, 1516], [1284, 1506], [1231, 1506], [1216, 1524], [1183, 1500], [1130, 1502], [1107, 1495], [1077, 1522], [1060, 1520], [1039, 1498], [978, 1500], [964, 1493], [927, 1500], [838, 1493], [787, 1520], [775, 1520], [752, 1496], [697, 1512], [676, 1495], [625, 1502], [614, 1512], [578, 1508], [567, 1496], [547, 1508], [532, 1502], [508, 1522], [487, 1522], [461, 1498], [423, 1495], [387, 1506], [374, 1493], [319, 1483], [263, 1506], [235, 1487], [214, 1489], [187, 1516], [175, 1516]], "baseline": [[175, 1491], [370, 1483], [403, 1487], [483, 1489], [502, 1493], [1216, 1491], [1276, 1496], [1339, 1495], [1395, 1498]], "id": "line_16", "type": "baselines"}}, {"prediction": "\u063a\u064a\u0631 \u0645\u0648\u0627\u0636\u0639\u0647\u0627\u060c \u0641\u0627\u062a\u0647\u0645\u0648\u0647 \u0639\u0644\u0649 \u0627\u0633\u062a\u0646\u0628\u0627\u0637\u0647 \u0648\u0639\u0644\u0645\u0647 \u0648\u0631\u0627\u0654\u064a\u0647\u060c \u0648\u0644\u0627 \u062a\u0642\u0644\u062f\u0648\u0647", "cuts": [[967, 967], [946, 946], [929, 935], [908, 913], [902, 902], [886, 886], [865, 870], [848, 848], [816, 816], [794, 794], [778, 778], [767, 767], [746, 751], [740, 740], [724, 729], [713, 713], [697, 697], [675, 675], [659, 659], [638, 638], [621, 627], [605, 605], [589, 589], [573, 573], [540, 546], [535, 535], [519, 519], [497, 497], [481, 481], [470, 475], [459, 465], [438, 438], [421, 421], [400, 405], [389, 394], [367, 367], [351, 351], [330, 330], [313, 313], [292, 297], [281, 281], [265, 265], [243, 249], [238, 238], [232, 232], [222, 222], [200, 205], [184, 189], [178, 178], [151, 157], [140, 146], [124, 130], [119, 119], [103, 103], [86, 86], [70, 70], [49, 49], [27, 27]], "confidences": [0.9998652935028076, 0.5277007222175598, 0.9999955892562866, 0.9999880790710449, 0.9999693632125854, 0.9982054233551025, 0.9999960660934448, 0.8161394596099854, 0.9999929666519165, 0.9999971389770508, 0.9999768733978271, 0.9989445805549622, 0.9983943104743958, 0.835041344165802, 0.9998206496238708, 0.9999831914901733, 0.9942564368247986, 0.999908447265625, 0.9996181726455688, 0.5019206404685974, 0.9998630285263062, 0.9985489249229431, 0.9094343781471252, 0.9999619722366333, 0.999971866607666, 0.9999991655349731, 0.9999998807907104, 0.9989573955535889, 0.9999986886978149, 0.9999964237213135, 0.9999872446060181, 0.916301965713501, 0.9883456230163574, 0.9999982118606567, 0.9999991655349731, 0.9999978542327881, 0.6548713445663452, 0.936079204082489, 0.9999892711639404, 0.9997774958610535, 0.9999997615814209, 0.9538446664810181, 0.9998297691345215, 0.9999701976776123, 0.9999457597732544, 0.9999912977218628, 0.9999996423721313, 0.999927282333374, 0.9924691319465637, 0.9999955892562866, 0.9999499320983887, 0.9999344348907471, 0.993513286113739, 0.999993085861206, 0.9991191029548645, 0.9999837875366211, 0.9999768733978271, 0.9998847246170044], "line": {"boundary": [[481, 1563], [489, 1533], [522, 1532], [547, 1506], [561, 1506], [571, 1516], [580, 1508], [600, 1518], [631, 1516], [658, 1539], [684, 1533], [707, 1510], [744, 1537], [766, 1539], [785, 1530], [795, 1537], [814, 1518], [875, 1541], [898, 1518], [933, 1520], [980, 1539], [1005, 1520], [1027, 1541], [1052, 1518], [1093, 1541], [1157, 1541], [1189, 1522], [1208, 1522], [1226, 1537], [1249, 1522], [1263, 1535], [1298, 1541], [1335, 1524], [1354, 1541], [1374, 1539], [1391, 1553], [1432, 1526], [1465, 1565], [1417, 1592], [1387, 1594], [1370, 1578], [1352, 1596], [1321, 1578], [1280, 1578], [1257, 1588], [1222, 1571], [1187, 1576], [1175, 1588], [1142, 1578], [1115, 1590], [1089, 1569], [1039, 1592], [1021, 1590], [1005, 1574], [957, 1576], [939, 1588], [922, 1572], [879, 1571], [865, 1584], [847, 1586], [834, 1574], [768, 1571], [754, 1584], [731, 1588], [662, 1571], [641, 1588], [600, 1565], [557, 1584], [534, 1574], [506, 1584], [483, 1572]], "baseline": [[483, 1565], [651, 1565], [779, 1571], [1362, 1569], [1417, 1576], [1466, 1567]], "id": "line_17", "type": "baselines"}}, {"prediction": "\u0648\u0645\u062a\u0649 \u0631\u0627\u0654\u064a\u062a\u0645 \u0627\u0644\u0639\u0627\u0644\u0645 \u0644\u0627 \u064a\u062a\u0645\u0645 \u0635\u0644\u0627\u062a\u0647 \u0627\u0644\u0645\u0641\u0631\u0648\u0636\u0629 \u060c \u0648\u0644\u0627 \u064a\u0637\u0645\u064a\u0654\u0646 \u0641\u064a \u0631\u0643\u0648\u0639\u0647\u0627", "cuts": [[1209, 1209], [1187, 1187], [1176, 1176], [1159, 1159], [1109, 1115], [1098, 1098], [1081, 1087], [1076, 1076], [1070, 1070], [1059, 1059], [1042, 1042], [1004, 1015], [998, 998], [987, 993], [970, 970], [954, 954], [943, 943], [920, 920], [887, 893], [871, 876], [859, 865], [826, 837], [821, 821], [804, 804], [787, 793], [765, 765], [726, 737], [710, 710], [676, 682], [665, 671], [649, 649], [638, 638], [604, 610], [593, 599], [582, 582], [566, 566], [549, 549], [532, 532], [510, 510], [482, 488], [455, 455], [444, 444], [438, 438], [399, 410], [394, 394], [366, 372], [355, 360], [322, 333], [316, 316], [288, 294], [272, 272], [255, 255], [250, 250], [233, 238], [194, 205], [183, 183], [172, 172], [122, 133], [111, 111], [94, 94], [72, 72], [50, 50], [28, 28], [11, 11]], "confidences": [0.999711811542511, 0.9999942779541016, 0.9999964237213135, 0.9999276399612427, 0.9999908208847046, 0.9999871253967285, 0.9998900890350342, 0.9831660985946655, 0.9998063445091248, 0.999962329864502, 0.9997965693473816, 0.9999898672103882, 0.99998939037323, 0.9999788999557495, 0.9994357228279114, 0.9999730587005615, 0.7908631563186646, 0.9956527948379517, 0.9997575879096985, 0.9996732473373413, 0.9956046342849731, 0.999534010887146, 0.9465213418006897, 0.9551798105239868, 0.9997909665107727, 0.974587619304657, 0.9998075366020203, 0.999998927116394, 0.9999898672103882, 0.9993416666984558, 0.9999842643737793, 0.999870777130127, 0.9998094439506531, 0.9999909400939941, 0.9999817609786987, 0.9999905824661255, 0.7308676242828369, 0.9999252557754517, 0.9999912977218628, 0.9999830722808838, 0.9993329644203186, 0.9937452077865601, 0.9980292916297913, 0.9999990463256836, 0.9999905824661255, 0.9998887777328491, 0.9999932050704956, 0.9999985694885254, 0.9999996423721313, 0.9999998807907104, 0.9999985694885254, 0.8817663788795471, 0.9893107414245605, 0.9999843835830688, 0.9999984502792358, 0.9999974966049194, 0.9999927282333374, 0.9999198913574219, 0.9998809099197388, 0.9999985694885254, 0.9999926090240479, 0.9989744424819946, 0.9999724626541138, 0.7024262547492981], "line": {"boundary": [[169, 1647], [173, 1594], [185, 1606], [210, 1604], [222, 1613], [259, 1594], [296, 1629], [335, 1596], [370, 1621], [403, 1602], [424, 1608], [442, 1592], [481, 1615], [508, 1592], [532, 1592], [571, 1625], [602, 1596], [617, 1596], [629, 1608], [647, 1602], [678, 1617], [701, 1598], [723, 1610], [744, 1596], [777, 1621], [799, 1604], [838, 1600], [857, 1617], [877, 1611], [900, 1633], [959, 1598], [992, 1613], [1009, 1598], [1037, 1598], [1066, 1625], [1093, 1596], [1122, 1610], [1146, 1596], [1185, 1623], [1241, 1590], [1284, 1631], [1329, 1606], [1354, 1617], [1368, 1613], [1407, 1648], [1382, 1650], [1360, 1666], [1333, 1654], [1309, 1670], [1272, 1652], [1253, 1666], [1212, 1660], [1193, 1676], [1163, 1650], [1101, 1652], [1070, 1676], [1040, 1648], [1021, 1658], [998, 1647], [978, 1664], [933, 1664], [920, 1678], [885, 1650], [822, 1658], [779, 1647], [705, 1654], [686, 1668], [582, 1647], [543, 1662], [506, 1647], [491, 1647], [475, 1660], [415, 1650], [397, 1666], [380, 1666], [354, 1647], [327, 1672], [315, 1672], [288, 1647], [265, 1660], [247, 1650], [230, 1662], [200, 1650], [185, 1660], [173, 1654]], "baseline": [[171, 1648], [1204, 1647], [1249, 1648], [1270, 1654], [1408, 1650]], "id": "line_18", "type": "baselines"}}, {"prediction": "\u0648\u0633\u062c\u0648\u062f\u0647\u0627\u060c \u0648\u0644\u0627 \u064a\u062d\u0636\u0631 \u0645\u0639 \u0642\u0631\u0627\u0621\u062a\u0647 \u0641\u064a\u0647\u0627 \u0628\u0627\u0644\u062e\u0634\u0648\u0639 \u0648\u0627\u0644\u062d\u0636\u0648\u0631\u060c \u0648\u0627\u0644\u062a\u062f\u0628\u0631 \u0648\u0627\u0644\u062a\u0631\u062a\u064a\u0644", "cuts": [[1292, 1292], [1267, 1267], [1231, 1231], [1213, 1213], [1194, 1194], [1170, 1170], [1152, 1158], [1139, 1139], [1109, 1121], [1097, 1103], [1072, 1079], [1060, 1066], [1030, 1042], [1024, 1024], [999, 999], [975, 975], [944, 944], [908, 914], [896, 896], [877, 877], [841, 847], [829, 829], [817, 817], [798, 798], [786, 786], [768, 768], [756, 756], [725, 731], [713, 713], [701, 701], [689, 689], [670, 670], [640, 652], [634, 634], [622, 622], [609, 609], [585, 585], [561, 561], [536, 536], [512, 512], [475, 481], [469, 469], [451, 451], [439, 439], [414, 414], [390, 390], [360, 360], [335, 335], [317, 317], [286, 293], [274, 274], [256, 262], [250, 250], [238, 238], [225, 225], [201, 201], [189, 189], [152, 165], [146, 146], [128, 128], [116, 122], [104, 104], [91, 91], [79, 79], [61, 61], [49, 49]], "confidences": [0.9998243451118469, 0.9999920129776001, 0.9999985694885254, 0.9999624490737915, 0.9999974966049194, 0.9999874830245972, 0.9999926090240479, 0.9999836683273315, 0.999990701675415, 0.9999855756759644, 0.99998939037323, 0.9999979734420776, 0.9996892213821411, 0.9999874830245972, 0.9997640252113342, 0.9999427795410156, 0.9993060827255249, 0.9446314573287964, 0.7036338448524475, 0.9967960715293884, 0.9986769556999207, 0.9841193556785583, 0.9994528889656067, 0.9409279823303223, 0.9999997615814209, 0.9999942779541016, 0.9934862852096558, 0.9999960660934448, 0.9999674558639526, 0.9067964553833008, 0.9972527623176575, 0.999915599822998, 0.9999898672103882, 0.9999929666519165, 0.9999849796295166, 0.9999780654907227, 0.9999867677688599, 0.999346911907196, 0.9999964237213135, 0.9825494289398193, 0.9995606541633606, 0.9960000514984131, 0.9999972581863403, 0.9731088280677795, 0.9996663331985474, 0.5042705535888672, 1.0, 0.9998852014541626, 0.9999935626983643, 0.9747305512428284, 0.7328495383262634, 0.9999992847442627, 0.9982652068138123, 0.9998162388801575, 1.0, 0.9999856948852539, 0.8613400459289551, 0.9995511174201965, 0.9720507264137268, 0.9999809265136719, 0.9999556541442871, 0.9989655017852783, 0.9860791563987732, 0.9992793202400208, 0.9793171882629395, 0.9999933242797852], "line": {"boundary": [[161, 1732], [165, 1686], [194, 1670], [237, 1684], [270, 1670], [319, 1707], [387, 1670], [409, 1674], [442, 1699], [461, 1686], [514, 1693], [532, 1678], [561, 1687], [588, 1670], [633, 1701], [656, 1684], [678, 1695], [701, 1680], [740, 1684], [752, 1674], [764, 1674], [787, 1695], [810, 1676], [830, 1689], [861, 1678], [885, 1699], [908, 1682], [945, 1678], [955, 1687], [980, 1678], [1003, 1699], [1046, 1693], [1070, 1713], [1115, 1682], [1175, 1695], [1200, 1674], [1226, 1674], [1261, 1703], [1296, 1676], [1348, 1695], [1440, 1693], [1469, 1726], [1456, 1726], [1432, 1746], [1389, 1734], [1347, 1748], [1321, 1732], [1280, 1732], [1270, 1725], [1233, 1744], [1193, 1725], [1171, 1742], [1142, 1730], [1074, 1748], [1060, 1736], [1033, 1758], [1007, 1754], [982, 1730], [949, 1748], [927, 1730], [904, 1734], [886, 1725], [851, 1744], [822, 1742], [803, 1725], [779, 1744], [760, 1730], [703, 1732], [668, 1756], [653, 1754], [627, 1730], [612, 1740], [584, 1728], [518, 1730], [489, 1742], [438, 1725], [411, 1740], [395, 1728], [364, 1728], [352, 1740], [325, 1742], [306, 1726], [286, 1740], [253, 1728], [228, 1744], [216, 1736], [179, 1744], [165, 1732]], "baseline": [[163, 1734], [214, 1732], [255, 1725], [364, 1726], [397, 1723], [419, 1723], [438, 1726], [1419, 1725], [1471, 1728]], "id": "line_19", "type": "baselines"}}, {"prediction": "\u0641\u0627\u062a\u0647\u0645\u0648\u0647 \u0628\u0642\u0633\u0627\u0648\u0629 \u0627\u0644\u0642\u0644\u0628\u060c \u0648\u0628\u0639\u062f\u0647 \u0639\u0646 \u0627\u0644\u0631\u0628 \u0639\u0632 \u0648\u062c\u0644.", "cuts": [[683, 683], [668, 673], [659, 659], [644, 644], [620, 620], [601, 606], [582, 582], [563, 567], [558, 558], [543, 543], [524, 524], [500, 500], [490, 490], [466, 466], [452, 452], [442, 447], [433, 433], [418, 418], [399, 404], [375, 375], [346, 346], [327, 332], [317, 322], [298, 303], [284, 284], [269, 269], [245, 245], [226, 231], [212, 212], [188, 192], [163, 168], [159, 159], [149, 149], [135, 135], [106, 106], [72, 77], [63, 63], [53, 58], [48, 48], [43, 43], [38, 38], [29, 34], [19, 19]], "confidences": [0.9739862084388733, 0.9999884366989136, 0.9997276663780212, 0.9999849796295166, 0.9990725517272949, 0.9999985694885254, 0.9983306527137756, 0.9980822801589966, 0.9998204112052917, 0.997825026512146, 0.9833168387413025, 0.9999716281890869, 0.999618411064148, 0.9978547692298889, 0.6419629454612732, 0.9951518774032593, 0.9999998807907104, 1.0, 0.9999918937683105, 0.9991405010223389, 0.9999971389770508, 1.0, 1.0, 0.9999991655349731, 0.9999963045120239, 0.9999998807907104, 0.9999983310699463, 0.999997615814209, 0.9999990463256836, 0.9999960660934448, 0.9999496936798096, 0.9999961853027344, 0.9999966621398926, 0.9999440908432007, 0.9999513626098633, 0.9999853372573853, 0.9999990463256836, 0.9999951124191284, 0.9946951270103455, 0.9999998807907104, 0.9999974966049194, 0.9999954700469971, 0.9960901141166687], "line": {"boundary": [[764, 1799], [766, 1769], [783, 1752], [812, 1746], [849, 1775], [879, 1767], [898, 1750], [929, 1769], [974, 1765], [986, 1773], [1025, 1762], [1048, 1771], [1103, 1767], [1122, 1777], [1150, 1752], [1189, 1752], [1233, 1767], [1253, 1754], [1272, 1773], [1288, 1758], [1304, 1758], [1321, 1775], [1384, 1775], [1426, 1756], [1463, 1783], [1469, 1802], [1415, 1810], [1401, 1822], [1368, 1812], [1354, 1824], [1327, 1812], [1306, 1822], [1292, 1810], [1253, 1810], [1231, 1822], [1206, 1806], [1146, 1810], [1130, 1824], [1093, 1806], [1072, 1820], [1048, 1820], [1035, 1808], [994, 1810], [980, 1802], [935, 1826], [912, 1808], [886, 1822], [851, 1822], [830, 1804], [785, 1812], [766, 1806]], "baseline": [[766, 1801], [846, 1801], [867, 1804], [1470, 1804]], "id": "line_20", "type": "baselines"}}, {"prediction": "\u0648\u0645\u062a\u0649 \u0648\u062c\u062f\u062a\u0645 \u0627\u0644\u0639\u0627\u0644\u0645 \u0644\u0627 \u0645\u0639\u0627\u0645\u0644\u0629 \u0644\u0647 \u0645\u0639 \u0631\u0628\u0647 \u0639\u0632 \u0648\u062c\u0644 \u060c \u062a\u0638\u0647\u0631 \u0639\u0644\u064a\u0647 \u0628\u0647\u062c\u062a\u0647\u0627 \u0648\u0627\u0654\u0646\u0648\u0627\u0631\u0647\u0627", "cuts": [[1236, 1236], [1214, 1214], [1197, 1197], [1186, 1186], [1142, 1153], [1131, 1136], [1103, 1103], [1086, 1086], [1064, 1064], [1042, 1042], [1014, 1020], [1009, 1009], [998, 998], [981, 981], [964, 964], [953, 953], [931, 937], [898, 909], [887, 892], [876, 881], [853, 859], [842, 842], [820, 820], [804, 809], [792, 792], [770, 770], [759, 759], [732, 743], [726, 726], [709, 709], [682, 687], [671, 671], [648, 648], [621, 626], [610, 610], [593, 593], [576, 576], [554, 560], [543, 543], [532, 538], [526, 526], [521, 521], [515, 515], [504, 510], [499, 499], [493, 493], [471, 477], [460, 460], [438, 443], [421, 421], [399, 405], [371, 377], [355, 355], [338, 338], [327, 327], [310, 310], [283, 288], [277, 277], [260, 260], [233, 233], [211, 211], [200, 200], [177, 183], [155, 166], [150, 150], [133, 133], [122, 127], [116, 116], [105, 105], [83, 89], [72, 72], [50, 50], [33, 33]], "confidences": [0.9999624490737915, 0.9999873638153076, 0.9999958276748657, 0.9999871253967285, 0.9999827146530151, 0.9999901056289673, 0.999958872795105, 0.519729733467102, 0.9999949932098389, 0.990899920463562, 0.9998747110366821, 0.9999719858169556, 0.9997586607933044, 0.9992938041687012, 0.9987748265266418, 0.9998395442962646, 0.9999606609344482, 0.9999958276748657, 0.999937891960144, 0.9987975358963013, 0.9998902082443237, 0.9642751216888428, 0.9995637536048889, 0.9999383687973022, 0.9973805546760559, 0.9987190961837769, 0.524466335773468, 0.9997130036354065, 0.9221267104148865, 0.9419159293174744, 0.9999997615814209, 0.9999914169311523, 0.9996623992919922, 0.999992847442627, 0.9999985694885254, 0.999937891960144, 0.9998610019683838, 0.9999767541885376, 0.9999998807907104, 0.8760433197021484, 0.9968647360801697, 0.9999954700469971, 0.999546229839325, 0.9998810291290283, 0.656394362449646, 0.9994986057281494, 0.9998539686203003, 0.9695175290107727, 0.9999977350234985, 0.9999958276748657, 0.9999986886978149, 0.9999974966049194, 0.9999914169311523, 0.9999973773956299, 0.9956705570220947, 0.9975166320800781, 0.9996503591537476, 0.9999966621398926, 0.9999432563781738, 0.9999326467514038, 0.960350751876831, 0.9999790191650391, 0.9999817609786987, 0.9995361566543579, 0.9995700716972351, 0.9970190525054932, 0.9999990463256836, 0.9999368190765381, 0.7645747065544128, 0.9985374212265015, 0.9979060888290405, 0.9999816417694092, 0.990431010723114], "line": {"boundary": [[144, 1867], [146, 1841], [161, 1828], [196, 1843], [214, 1828], [233, 1838], [263, 1816], [290, 1841], [315, 1826], [329, 1840], [399, 1840], [423, 1853], [473, 1828], [516, 1861], [559, 1828], [598, 1832], [614, 1845], [658, 1822], [693, 1845], [713, 1840], [746, 1847], [758, 1859], [775, 1845], [808, 1845], [820, 1855], [849, 1828], [871, 1840], [900, 1828], [920, 1838], [935, 1828], [957, 1847], [978, 1847], [1000, 1828], [1021, 1826], [1052, 1851], [1079, 1828], [1107, 1841], [1132, 1830], [1161, 1855], [1193, 1836], [1249, 1851], [1265, 1845], [1286, 1863], [1327, 1840], [1368, 1847], [1407, 1882], [1376, 1886], [1364, 1898], [1347, 1898], [1337, 1888], [1298, 1904], [1276, 1886], [1261, 1900], [1189, 1890], [1165, 1910], [1142, 1888], [1087, 1886], [1052, 1908], [1031, 1886], [1007, 1888], [994, 1877], [961, 1890], [898, 1890], [869, 1875], [853, 1888], [826, 1880], [781, 1910], [752, 1888], [717, 1896], [690, 1875], [668, 1888], [635, 1888], [606, 1873], [584, 1888], [524, 1900], [499, 1880], [460, 1896], [432, 1880], [409, 1894], [376, 1884], [329, 1894], [302, 1875], [276, 1894], [253, 1884], [237, 1896], [196, 1894], [148, 1869]], "baseline": [[146, 1869], [194, 1875], [323, 1873], [345, 1878], [499, 1882], [555, 1880], [590, 1873], [859, 1875], [900, 1871], [923, 1877], [1037, 1878], [1056, 1882], [1276, 1880], [1354, 1888], [1408, 1884]], "id": "line_21", "type": "baselines"}}, {"prediction": "\u0648\u0633\u0643\u064a\u0646\u062a\u0647\u0627\u060c \u0645\u0646 \u062a\u0644\u0627\u0648\u0629 \u0648\u0635\u064a\u0627\u0645 \u0648\u0642\u064a\u0627\u0645\u060c \u0641\u0627\u0639\u0644\u0645\u0648\u0627 \u0627\u0654\u0646\u0647 \u0642\u0644\u064a\u0644 \u0627\u0644\u0646\u0635\u064a\u0628 \u0645\u0646 \u062b\u0645\u0631\u0629 \u0627\u0644\u0639\u0644\u0645 \u0627\u0655\u0630 \u062b\u0645\u0631\u0629", "cuts": [[1298, 1298], [1273, 1278], [1243, 1243], [1228, 1228], [1213, 1213], [1203, 1203], [1188, 1188], [1173, 1173], [1158, 1158], [1138, 1143], [1128, 1133], [1108, 1108], [1082, 1087], [1072, 1072], [1057, 1062], [1047, 1052], [1027, 1027], [1007, 1007], [987, 992], [977, 977], [947, 947], [922, 922], [907, 907], [892, 892], [872, 877], [862, 862], [842, 842], [827, 827], [817, 822], [797, 802], [782, 782], [762, 767], [757, 757], [742, 742], [727, 727], [707, 707], [687, 687], [667, 672], [651, 651], [636, 641], [626, 631], [621, 621], [616, 616], [601, 601], [581, 586], [571, 571], [556, 561], [546, 546], [531, 536], [501, 506], [491, 496], [481, 486], [471, 471], [451, 451], [426, 426], [396, 401], [366, 371], [356, 356], [331, 331], [306, 311], [296, 301], [281, 281], [261, 261], [246, 246], [226, 231], [216, 221], [205, 210], [190, 190], [175, 175], [150, 155], [135, 135], [125, 130], [115, 120], [110, 110], [90, 95], [80, 80], [65, 65], [45, 45], [30, 30]], "confidences": [0.9999417066574097, 0.9999945163726807, 0.9999974966049194, 0.999985933303833, 0.9999626874923706, 0.99998939037323, 0.9999910593032837, 0.9999959468841553, 0.756621778011322, 0.9993665814399719, 0.9999896287918091, 0.9500626921653748, 0.9996504783630371, 0.9999996423721313, 0.9999978542327881, 0.9999961853027344, 0.9998416900634766, 0.9999421834945679, 0.9999947547912598, 0.9550725221633911, 0.999901294708252, 0.999994158744812, 0.99993896484375, 0.9998705387115479, 0.9994296431541443, 0.9963602423667908, 0.9768261909484863, 0.9845020174980164, 0.9991129040718079, 0.9998034834861755, 0.9999189376831055, 0.9999998807907104, 0.9999986886978149, 0.9999935626983643, 0.9999996423721313, 0.9999974966049194, 0.999970555305481, 0.9999955892562866, 0.9999997615814209, 1.0, 0.9998965263366699, 0.9999996423721313, 0.9999357461929321, 0.7053399085998535, 0.9999959468841553, 0.9999908208847046, 0.9990590214729309, 0.9999946355819702, 0.9999847412109375, 0.9993951320648193, 0.9999172687530518, 0.9937519431114197, 0.9999966621398926, 0.9998257756233215, 0.514997661113739, 0.9999998807907104, 0.9999972581863403, 0.9961175918579102, 0.996932864189148, 0.9999979734420776, 0.9999998807907104, 0.9999791383743286, 0.9999998807907104, 0.9914675951004028, 0.9999983310699463, 0.9999983310699463, 0.9999997615814209, 0.9999996423721313, 0.9999963045120239, 0.9999997615814209, 0.9999983310699463, 0.9999831914901733, 1.0, 0.9999969005584717, 0.999922513961792, 0.6258425116539001, 0.9992828965187073, 0.9999939203262329, 0.9998599290847778], "line": {"boundary": [[152, 1951], [155, 1912], [163, 1906], [192, 1923], [214, 1904], [255, 1904], [288, 1923], [311, 1902], [329, 1912], [354, 1902], [368, 1912], [387, 1908], [409, 1925], [440, 1904], [460, 1921], [520, 1919], [543, 1929], [575, 1927], [617, 1904], [635, 1906], [653, 1921], [670, 1906], [684, 1912], [695, 1904], [734, 1919], [762, 1898], [795, 1908], [814, 1925], [840, 1906], [859, 1917], [873, 1908], [896, 1908], [914, 1923], [931, 1923], [955, 1906], [984, 1908], [1015, 1929], [1040, 1908], [1070, 1929], [1085, 1921], [1122, 1925], [1140, 1912], [1159, 1921], [1194, 1908], [1230, 1925], [1278, 1929], [1306, 1908], [1327, 1921], [1393, 1906], [1417, 1927], [1438, 1925], [1471, 1953], [1434, 1976], [1387, 1964], [1368, 1976], [1343, 1966], [1319, 1976], [1278, 1958], [1253, 1978], [1230, 1980], [1212, 1964], [1150, 1974], [1128, 1960], [1115, 1974], [1085, 1964], [1056, 1976], [1042, 1970], [1029, 1984], [1005, 1970], [951, 1972], [933, 1984], [902, 1958], [826, 1962], [795, 1976], [775, 1958], [742, 1962], [727, 1955], [658, 1980], [631, 1960], [534, 1974], [506, 1955], [463, 1976], [440, 1958], [387, 1972], [368, 1955], [313, 1960], [284, 1980], [233, 1955], [185, 1972], [155, 1955]], "baseline": [[153, 1953], [830, 1951], [916, 1953], [941, 1962], [961, 1958], [1419, 1960], [1473, 1955]], "id": "line_22", "type": "baselines"}}, {"prediction": "\u0627\u0644\u0639\u0644\u0645 \u0627\u0644\u0645\u0639\u0627\u0645\u0644\u0629 \u060c \u0648\u0642\u0644\u064a\u0644 \u0627\u0644\u0646\u0635\u064a\u0628 \u0645\u0646 \u0627\u0644\u0645\u062d\u0628\u0629 \u0648\u0627\u0644\u062e\u0634\u064a\u0629\u060c \u0648( \u0627\u0655\u0646\u0645\u0627 \u064a\u062e\u0634\u0649 \u0627\u0644\u0644\u0647 \u0645\u0646 \u0639\u0628\u0627\u062f\u0648", "cuts": [[1303, 1303], [1290, 1290], [1272, 1272], [1260, 1260], [1235, 1235], [1211, 1217], [1198, 1204], [1186, 1192], [1168, 1168], [1149, 1149], [1131, 1137], [1118, 1118], [1106, 1106], [1088, 1088], [1081, 1081], [1075, 1075], [1051, 1057], [1038, 1038], [1014, 1014], [1002, 1002], [989, 989], [977, 977], [940, 946], [928, 934], [916, 922], [903, 903], [885, 885], [860, 860], [836, 836], [793, 799], [780, 780], [756, 762], [725, 731], [719, 719], [707, 713], [688, 688], [664, 664], [645, 645], [633, 633], [602, 608], [590, 596], [571, 578], [559, 565], [535, 535], [516, 516], [492, 492], [479, 479], [461, 461], [436, 442], [424, 424], [399, 399], [381, 381], [369, 375], [363, 363], [356, 356], [338, 338], [326, 326], [313, 320], [301, 301], [289, 289], [270, 270], [246, 252], [221, 227], [215, 215], [203, 209], [191, 191], [178, 184], [160, 166], [154, 154], [135, 135], [104, 111], [92, 92], [80, 80], [61, 61], [49, 49], [37, 37]], "confidences": [0.9999939203262329, 0.9962407350540161, 0.6148149967193604, 0.9995049238204956, 0.9999679327011108, 0.9998955726623535, 0.9999966621398926, 0.9999812841415405, 0.9999535083770752, 0.9999920129776001, 0.9999990463256836, 0.9946582913398743, 0.7702367901802063, 0.9436891078948975, 0.9403108358383179, 0.874081015586853, 0.9999908208847046, 0.9999887943267822, 0.999915599822998, 0.9999622106552124, 0.9999816417694092, 0.9999862909317017, 0.9991334080696106, 0.9935688972473145, 0.9999759197235107, 0.9654875993728638, 0.9996823072433472, 0.9990022778511047, 0.564159095287323, 0.9998770952224731, 0.9986807703971863, 0.9983581900596619, 0.9994006156921387, 0.9421390295028687, 0.9977754950523376, 0.9938074946403503, 0.9999985694885254, 0.9493253231048584, 0.9998681545257568, 0.9999979734420776, 0.9999966621398926, 0.9997482895851135, 0.9999991655349731, 0.9999998807907104, 0.9024093747138977, 0.8440074920654297, 0.9990659356117249, 0.9999818801879883, 0.98737633228302, 0.9999896287918091, 0.9998379945755005, 0.9999996423721313, 0.9999951124191284, 0.9999514818191528, 0.9996600151062012, 0.971716046333313, 0.9997962117195129, 0.999996542930603, 0.9999830722808838, 0.9999959468841553, 0.9999998807907104, 0.999964714050293, 0.9999979734420776, 0.5567030906677246, 0.999757707118988, 0.8596031069755554, 0.998282790184021, 0.7934605479240417, 0.9993875026702881, 0.9990580677986145, 0.9998717308044434, 0.9960359930992126, 0.998126208782196, 0.9995434880256653, 0.5599195957183838, 0.99636310338974], "line": {"boundary": [[152, 2046], [165, 2009], [218, 1982], [247, 2005], [269, 1986], [300, 2005], [331, 1984], [358, 1982], [378, 1999], [401, 1982], [440, 1980], [458, 1993], [483, 1982], [512, 1995], [530, 1986], [555, 2009], [582, 2019], [610, 1993], [637, 2003], [647, 1995], [686, 1999], [701, 1990], [740, 2013], [771, 1995], [789, 2011], [816, 2015], [851, 1993], [879, 2015], [894, 2007], [927, 2009], [939, 2019], [947, 2011], [966, 2019], [1011, 2017], [1050, 1992], [1089, 2017], [1109, 1999], [1124, 2003], [1138, 1995], [1157, 1997], [1191, 2025], [1222, 1997], [1237, 1995], [1255, 2005], [1270, 1997], [1300, 2015], [1329, 1993], [1362, 2019], [1391, 1995], [1409, 2005], [1430, 1995], [1463, 2021], [1469, 2040], [1438, 2056], [1395, 2056], [1378, 2071], [1347, 2054], [1230, 2058], [1196, 2048], [1171, 2068], [1144, 2058], [1093, 2071], [1072, 2052], [966, 2066], [939, 2044], [898, 2070], [865, 2052], [799, 2052], [777, 2066], [750, 2044], [725, 2064], [680, 2050], [623, 2062], [584, 2044], [567, 2060], [541, 2060], [528, 2071], [497, 2066], [483, 2054], [436, 2058], [424, 2050], [389, 2062], [368, 2060], [356, 2048], [309, 2048], [294, 2060], [259, 2058], [251, 2050], [228, 2060], [202, 2050], [187, 2058], [155, 2054]], "baseline": [[153, 2048], [491, 2048], [604, 2042], [816, 2042], [883, 2046], [1470, 2042]], "id": "line_23", "type": "baselines"}}, {"prediction": "\u0627\u0644\u0639\u0644\u0645\u0648\u0627).", "cuts": [[358, 365], [352, 352], [338, 338], [325, 325], [311, 311], [291, 291], [270, 277], [250, 250], [34, 41]], "confidences": [0.9943757057189941, 0.7291178107261658, 0.9799628257751465, 0.7520625591278076, 0.6908395886421204, 0.9932884573936462, 0.9999109506607056, 0.48956286907196045, 0.997548520565033], "line": {"boundary": [[1099, 2132], [1101, 2107], [1132, 2075], [1212, 2099], [1228, 2081], [1245, 2089], [1280, 2077], [1309, 2097], [1352, 2064], [1378, 2079], [1446, 2077], [1465, 2097], [1471, 2126], [1442, 2144], [1384, 2146], [1343, 2165], [1327, 2165], [1304, 2144], [1284, 2153], [1247, 2140], [1208, 2157], [1193, 2144], [1134, 2149], [1107, 2132]], "baseline": [[1101, 2134], [1473, 2128]], "id": "line_24", "type": "baselines"}}], "regions": {"text": [{"id": "region_0", "boundary": [[0, 0], [1655, 0], [1655, 2339], [0, 2339]], "imagename": null, "tags": null}]}} \ No newline at end of file diff --git a/tests/resources/bsb00084914_00007.xml b/tests/resources/bsb00084914_00007.xml index 311751ad1..538e4a107 100644 --- a/tests/resources/bsb00084914_00007.xml +++ b/tests/resources/bsb00084914_00007.xml @@ -6,10 +6,10 @@ pixel bsb00084914_00007.jpg - + - + @@ -154,7 +154,7 @@ VPOS="0" WIDTH="3177" HEIGHT="4308"> - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - + - + - - + + - + - + - - + + - - + + - + - + - - + + - + - - + + diff --git a/tests/resources/cPAS-2000.xml b/tests/resources/cPAS-2000.xml index d9f844121..adc36de41 100644 --- a/tests/resources/cPAS-2000.xml +++ b/tests/resources/cPAS-2000.xml @@ -1,410 +1,410 @@ - - - - TRP - 2018-12-24T11:28:19+07:00 - 2019-02-05T09:16:48Z - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + TRP + 2018-12-24T11:28:19+07:00 + 2019-02-05T09:16:48Z + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/resources/merge_tests/0014.xml b/tests/resources/merge_tests/0014.xml index 1752f7117..c801094b5 100644 --- a/tests/resources/merge_tests/0014.xml +++ b/tests/resources/merge_tests/0014.xml @@ -6,15 +6,15 @@ pixel 0014.jpg - + - + - + - + - - + + - - + + - - + + - + - + diff --git a/tests/resources/overfit_newpoly.mlmodel b/tests/resources/overfit_newpoly.mlmodel new file mode 100644 index 000000000..cb7b40aa9 Binary files /dev/null and b/tests/resources/overfit_newpoly.mlmodel differ diff --git a/tests/resources/pagecontent.xsd b/tests/resources/pagecontent.xsd index 5874131c8..d45d51680 100644 --- a/tests/resources/pagecontent.xsd +++ b/tests/resources/pagecontent.xsd @@ -1,2644 +1,2644 @@ - - - - - - Page Content - Ground Truth and Storage - - - - - - - - - - - - - - - - The timestamp has to be in UTC (Coordinated - Universal Time) and not local time. - - - - - - - The timestamp has to be in UTC - (Coordinated Universal Time) - and not local time. - - - - - - - - - - - - - External reference of any kind - - - - - - - - Semantic labels / tags - - - - - - - Type of metadata (e.g. author) - - - - - - - - - - - - - - - E.g. imagePhotometricInterpretation - - - - - - E.g. RGB - - - - - - - - - - A semantic label / tag - - - - - - - - Reference to external model / ontology / schema - - - - - - - E.g. an RDF resource identifier - (to be used as subject or object of an RDF triple) - - - - - - - Prefix for all labels (e.g. first part of an URI) - - - - - - - - Semantic label - - - - - The label / tag (e.g. 'person'). - Can be an RDF resource identifier - (e.g. object of an RDF triple). - - - - - - - Additional information on the label - (e.g. 'YYYY-mm-dd' for a date label). - Can be used as predicate of an RDF triple. - - - - - - - - - - - - Alternative document page images - (e.g. black-and-white). - - - - - - - - - - Order of blocks within the page. - - - - - - Unassigned regions are considered to be in the - (virtual) default layer which is to be treated - as below any other layers. - - - - - - - - Default text style - - - - - - - Semantic labels / tags - - - - - - - - - - - - - - - - - - - - - - - - Contains the image file name including the file extension. - - - - - - Specifies the width of the image. - - - - - Specifies the height of the image. - - - - - Specifies the image resolution in width. - - - - - Specifies the image resolution in height. - - - - - - Specifies the unit of the resolution information - referring to a standardised unit of measurement - (pixels per inch, pixels per centimeter or other). - - - - - - - - - - - - - For generic use - - - - - - The angle the rectangle encapsulating the page - (or its Border) has to be rotated in clockwise direction - in order to correct the present skew - (negative values indicate anti-clockwise rotation). - (The rotated image can be further referenced - via “AlternativeImage”.) - Range: -179.999,180 - - - - - - - The type of the page within the document - (e.g. cover page). - - - - - - - The primary language used in the page - (lower-level definitions override the page-level definition). - - - - - - - The secondary language used in the page - (lower-level definitions override the page-level definition). - - - - - - - The primary script used in the page - (lower-level definitions override the page-level definition). - - - - - - - The secondary script used in the page - (lower-level definitions override the page-level definition). - - - - - - - The direction in which text within lines - should be read (order of words and characters), - in addition to “textLineOrder” - (lower-level definitions override the page-level definition). - - - - - - - The order of text lines within a block, - in addition to “readingDirection” - (lower-level definitions override the page-level definition). - - - - - - Confidence value for whole page (between 0 and 1) - - - - - - - Pure text is represented as a text region. This includes - drop capitals, but practically ornate text may be - considered as a graphic. - - - - - - - - - - - - - The angle the rectangle encapsulating the region - has to be rotated in clockwise direction - in order to correct the present skew - (negative values indicate anti-clockwise rotation). - (The rotated image can be further referenced - via “AlternativeImage”.) - Range: -179.999,180 - - - - - - - The nature of the text in the region - - - - - - - The degree of space in points between the lines of - text (line spacing) - - - - - - - The direction in which text within lines - should be read (order of words and characters), - in addition to “textLineOrder”. - - - - - - - The order of text lines within the block, - in addition to “readingDirection”. - - - - - - - The angle the baseline of text within the region - has to be rotated (relative to the rectangle - encapsulating the region) in clockwise direction - in order to correct the present skew, - in addition to “orientation” - (negative values indicate anti-clockwise rotation). - Range: -179.999,180 - - - - - - - Defines whether a region of text is indented or not - - - - - - Text align - - - - - - The primary language used in the region - - - - - - - The secondary language used in the region - - - - - - - The primary script used in the region - - - - - - - The secondary script used in the region - - - - - - - - - - - - Polygon outline of the element as a path of points. - No points may lie outside the outline of its parent, - which in the case of Border is the bounding rectangle - of the root image. Paths are closed by convention, - i.e. the last point logically connects with the first - (and at least 3 points are required to span an area). - Paths must be planar (i.e. must not self-intersect). - - - - - - Confidence value (between 0 and 1) - - - - - - - - - Alternative text line images (e.g. - black-and-white) - - - - - - - - Multiple connected points that mark the baseline - of the glyphs - - - - - - - - - - - - - - Semantic labels / tags - - - - - - - - Overrides primaryLanguage attribute of parent text - region - - - - - - - The primary script used in the text line - - - - - - - The secondary script used in the text line - - - - - - - The direction in which text within the line - should be read (order of words and characters). - - - - - - - Overrides the production attribute of the parent - text region - - - - - - For generic use - - - - - - - Position (order number) of this text line within the - parent text region. - - - - - - - - - - Alternative word images (e.g. - black-and-white) - - - - - - - - - - - - - - - Semantic labels / tags - - - - - - - - Overrides primaryLanguage attribute of parent line - and/or text region - - - - - - - The primary script used in the word - - - - - - - The secondary script used in the word - - - - - - - The direction in which text within the word - should be read (order of characters). - - - - - - - Overrides the production attribute of the parent - text line and/or text region. - - - - - - For generic use - - - - - - - - - - Alternative glyph images (e.g. - black-and-white) - - - - - - - - Container for graphemes, grapheme groups and - non-printing characters - - - - - - - - - - - - Semantic labels / tags - - - - - - - - - - The script used for the glyph - - - - - - - Overrides the production attribute of the parent - word / text line / text region. - - - - - - For generic use - - - - - - - - - - Text in a "simple" form (ASCII or extended ASCII - as mostly used for typing). I.e. no use of - special characters for ligatures (should be - stored as two separate characters) etc. - - - - - - - Correct encoding of the original, always using - the corresponding Unicode code point. I.e. - ligatures have to be represented as one - character etc. - - - - - - - - Used for sort order in case multiple TextEquivs are defined. - The text content with the lowest index should be interpreted - as the main text content. - - - - - - - - - - - OCR confidence value (between 0 and 1) - - - - - - Type of text content (is it free text or a number, for instance). - This is only a descriptive attribute, the text type - is not checked during XML validation. - - - - - - - Refinement for dataType attribute. Can be a regular expression, for instance. - - - - - - - - - - An image is considered to be more intricate and complex - than a graphic. These can be photos or drawings. - - - - - - - - The angle the rectangle encapsulating a region - has to be rotated in clockwise direction - in order to correct the present skew - (negative values indicate anti-clockwise rotation). - Range: -179.999,180 - - - - - - - The colour bit depth required for the region - - - - - - - The background colour of the region - - - - - - - Specifies whether the region also contains - text - - - - - - - - - - A line drawing is a single colour illustration without - solid areas. - - - - - - - - The angle the rectangle encapsulating a region - has to be rotated in clockwise direction - in order to correct the present skew - (negative values indicate anti-clockwise rotation). - Range: -179.999,180 - - - - - - - The pen (foreground) colour of the region - - - - - - - The background colour of the region - - - - - - - Specifies whether the region also contains - text - - - - - - - - - - Regions containing simple graphics, such as a company - logo, should be marked as graphic regions. - - - - - - - - The angle the rectangle encapsulating a region - has to be rotated in clockwise direction - in order to correct the present skew - (negative values indicate anti-clockwise rotation). - Range: -179.999,180 - - - - - - - The type of graphic in the region - - - - - - - An approximation of the number of colours - used in the region - - - - - - - Specifies whether the region also contains - text. - - - - - - - - - - Tabular data in any form is represented with a table - region. Rows and columns may or may not have separator - lines; these lines are not separator regions. - - - - - - - - Table grid (visible or virtual grid lines) - - - - - - - The angle the rectangle encapsulating a region - has to be rotated in clockwise direction - in order to correct the present skew - (negative values indicate anti-clockwise rotation). - Range: -179.999,180 - - - - - - - The number of rows present in the table - - - - - - - The number of columns present in the table - - - - - - - The colour of the lines used in the region - - - - - - - The background colour of the region - - - - - - - Specifies the presence of line separators - - - - - - - Specifies whether the region also contains - text - - - - - - - - - - Matrix of grid points defining the table grid on the page. - - - - - - - One row in the grid point matrix. - Points with x,y coordinates. - (note: for a table with n table rows there should be n+1 grid rows) - - - - - - - - Points with x,y coordinates. - - - - - The grid row index - - - - - - - - - Regions containing charts or graphs of any type, should - be marked as chart regions. - - - - - - - - The angle the rectangle encapsulating a region - has to be rotated in clockwise direction - in order to correct the present skew - (negative values indicate anti-clockwise rotation). - Range: -179.999,180 - - - - - - - The type of chart in the region - - - - - - - An approximation of the number of colours - used in the region - - - - - - - The background colour of the region - - - - - - - Specifies whether the region also contains - text - - - - - - - - - - Separators are lines that lie between columns and - paragraphs and can be used to logically separate - different articles from each other. - - - - - - - - The angle the rectangle encapsulating a region - has to be rotated in clockwise direction - in order to correct the present skew - (negative values indicate anti-clockwise rotation). - Range: -179.999,180 - - - - - - - The colour of the separator - - - - - - - - - - Regions containing equations and mathematical symbols - should be marked as maths regions. - - - - - - - - The angle the rectangle encapsulating a region - has to be rotated in clockwise direction - in order to correct the present skew - (negative values indicate anti-clockwise rotation). - Range: -179.999,180 - - - - - - - The background colour of the region - - - - - - - - - - Regions containing chemical formulas. - - - - - - - - The angle the rectangle encapsulating a - region has to be rotated in clockwise - direction in order to correct the present - skew (negative values indicate - anti-clockwise rotation). Range: - -179.999,180 - - - - - - - The background colour of the region - - - - - - - - - - Regions containing maps. - - - - - - - - The angle the rectangle encapsulating a - region has to be rotated in clockwise - direction in order to correct the present - skew (negative values indicate - anti-clockwise rotation). Range: - -179.999,180 - - - - - - - - - - Regions containing musical notations. - - - - - - - - The angle the rectangle encapsulating a region - has to be rotated in clockwise direction - in order to correct the present skew - (negative values indicate anti-clockwise rotation). - Range: -179.999,180 - - - - - - - The background colour of the region - - - - - - - - - - Regions containing advertisements. - - - - - - - - The angle the rectangle encapsulating a region - has to be rotated in clockwise direction - in order to correct the present skew - (negative values indicate anti-clockwise rotation). - Range: -179.999,180 - - - - - - - The background colour of the region - - - - - - - - - - Noise regions are regions where no real data lies, only - false data created by artifacts on the document or - scanner noise. - - - - - - - - - - To be used if the region type cannot be ascertained. - - - - - - - - - - Regions containing content that is not covered - by the default types (text, graphic, image, - line drawing, chart, table, separator, maths, - map, music, chem, advert, noise, unknown). - - - - - - - - Information on the type of content represented by this region - - - - - - - - - - Determines the effective area on the paper of a printed page. - Its size is equal for all pages of a book - (exceptions: titlepage, multipage pictures). - It contains all living elements (except marginals) - like body type, footnotes, headings, running titles. - It does not contain pagenumber (if not part of running title), - marginals, signature mark, preview words. - - - - - - - - - - Definition of the reading order within the page. - To express a reading order between elements - they have to be included in an OrderedGroup. - Groups may contain further groups. - - - - - - - - - Confidence value (between 0 and 1) - - - - - - Numbered region - - - - Position (order number) of this item within the current hierarchy level. - - - - - - - - Indexed group containing ordered elements - - - - - - - Semantic labels / tags - - - - - - - - - - - - - Optional link to a parent region of nested regions. - The parent region doubles as reading order group. - Only the nested regions should be allowed as group members. - - - - - - - Position (order number) of this item within the - current hierarchy level. - - - - - - - - - Is this group a continuation of another group (from - previous column or page, for example)? - - - - - - For generic use - - - - - - - - Indexed group containing unordered elements - - - - - - - - Semantic labels / tags - - - - - - - - - - - - - Optional link to a parent region of nested regions. - The parent region doubles as reading order group. - Only the nested regions should be allowed as group members. - - - - - - - Position (order number) of this item within the - current hierarchy level. - - - - - - - - - Is this group a continuation of another group - (from previous column or page, for example)? - - - - - - For generic use - - - - - - - - - - - Numbered group (contains ordered elements) - - - - - - - - Semantic labels / tags - - - - - - - - - - - - - Optional link to a parent region of nested regions. - The parent region doubles as reading order group. - Only the nested regions should be allowed as group members. - - - - - - - - - Is this group a continuation of another group - (from previous column or page, for example)? - - - - - - For generic use - - - - - - - - Numbered group (contains unordered elements) - - - - - - - - Semantic labels / tags - - - - - - - - - - - - - Optional link to a parent region of nested regions. - The parent region doubles as reading order group. - Only the nested regions should be allowed as group members. - - - - - - - - - Is this group a continuation of another group - (from previous column or page, for example)? - - - - - - For generic use - - - - - - - - Border of the actual page (if the scanned image - contains parts not belonging to the page). - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ISO 639.x 2016-07-14 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - iso15924 2016-07-14 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Can be used to express the z-index of overlapping - regions. An element with a greater z-index is always in - front of another element with lower z-index. - - - - - - - - - - - - - - - - - - - - - - Confidence value (between 0 and 1) - - - - - - - - Point list with format "x1,y1 x2,y2 ...", where - "x" / "y" refer to the horizontal / vertical - pixel positions in a coordinate system which always - references the root PageType/@imageFilename, with - "0,0" in the upper left corner of the root image and - "imageWidth,imageHeight" in the lower right. - - - - - - - - - - Container for one-to-one relations between layout - objects (for example: DropCap - paragraph, caption - - image). - - - - - - - - - - - One-to-one relation between to layout object. Use 'link' - for loose relations and 'join' for strong relations - (where something is fragmented for instance). - - Examples for 'link': caption - image floating - - paragraph paragraph - paragraph (when a paragraph is - split across columns and the last word of the first - paragraph DOES NOT continue in the second paragraph) - drop-cap - paragraph (when the drop-cap is a whole word) - - Examples for 'join': word - word (separated word at the - end of a line) drop-cap - paragraph (when the drop-cap - is not a whole word) paragraph - paragraph (when a - pragraph is split across columns and the last word of - the first paragraph DOES continue in the second - paragraph) - - - - - - Semantic labels / tags - - - - - - - - - - - - - - - - - - - For generic use - - - - - - - - Text production type - - - - - - - - - - - - - - - Monospace (fixed-pitch, non-proportional) or - proportional font. - - - - - - For instance: Arial, Times New Roman. - Add more information if necessary - (e.g. blackletter, antiqua). - - - - - - - Serif or sans-serif typeface. - - - - - - - - The size of the characters in points. - - - - - - - The x-height or corpus size refers to the distance - between the baseline and the mean line of - lower-case letters in a typeface. - The unit is assumed to be pixels. - - - - - - - The degree of space (in points) between - the characters in a string of text. - - - - - - - - Text colour in RGB encoded format - (red value) + (256 x green value) + (65536 x blue value). - - - - - - Background colour - - - - - - Background colour in RGB encoded format - (red value) + (256 x green value) + (65536 x blue value). - - - - - - - Specifies whether the colour of the text appears - reversed against a background colour. - - - - - - - - - Line style details if "underlined" is TRUE - - - - - - - - - - - - - - - - Alternative region images - (e.g. black-and-white). - - - - - - - - - Semantic labels / tags - - - - - - Roles the region takes - (e.g. in context of a parent region). - - - - - - - - - - - - - - - - - - - - - - - - For generic use - - - - - - - Is this region a continuation of another region - (in previous column or page, for example)? - - - - - - - - - - - Confidence value (between 0 and 1) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Examples: - "123.456", "+1234.456", - "-1234.456", "-.456", "-456" - - - - - - - Examples: - "123.456", "+1234.456", "-1.2344e56", - "-.45E-6", "INF", "-INF", "NaN" - - - - - - - Examples: - "123456", "+00000012", "-1", "-456" - - - - - - - Examples: "true", "false", "1", "0" - - - - - - - Examples: - "2001-10-26", "2001-10-26+02:00", - "2001-10-26Z", "2001-10-26+00:00", - "-2001-10-26", "-20000-04-01" - - - - - - - Examples: - "21:32:52", "21:32:52+02:00", "19:32:52Z", - "19:32:52+00:00", "21:32:52.12679" - - - - - - - Examples: - "2001-10-26T21:32:52", "2001-10-26T21:32:52+02:00", - "2001-10-26T19:32:52Z", "2001-10-26T19:32:52+00:00", - "-2001-10-26T21:32:52", "2001-10-26T21:32:52.12679" - - - - - - Generic text string - - - - - - An XSD type that is not listed or a custom type - (use dataTypeDetails attribute). - - - - - - - - - Container for graphemes, grapheme groups and - non-printing characters. - - - - - - - - - - - - Base type for graphemes, grapheme groups and non-printing characters. - - - - - - - - - - Order index of grapheme, group, or non-printing character - within the parent container (graphemes or glyph or grapheme group). - - - - - - - - - - - - - Type of character represented by the - grapheme, group, or non-printing character element. - - - - - - - - - - - - For generic use - - - - - For generic use - - - - - - - Represents a sub-element of a glyph. - Smallest graphical unit that can be - assigned a Unicode code point. - - - - - - - - - - - - - - A glyph component without visual representation - but with Unicode code point. - Non-visual / non-printing / control character. - Part of grapheme container (of glyph) or grapheme sub group. - - - - - - - - - - - - - - - - - - - - - Container for user-defined attributes - - - - - - - - - Structured custom data defined by name, type and value. - - - - - - - - - - - - - - - - - - - - Cell position in table starting with row 0 - - - - - Cell position in table starting with column 0 - - - - - Number of rows the cell spans (optional; default is 1) - - - - - Number of columns the cell spans (optional; default is 1) - - - - - - Is the cell a column or row header? - - - - - - - - - - Data for a region that takes on the role - of a table cell within a parent table region. - - - - - - - - - - - - - + + + + + + Page Content - Ground Truth and Storage + + + + + + + + + + + + + + + + The timestamp has to be in UTC (Coordinated + Universal Time) and not local time. + + + + + + + The timestamp has to be in UTC + (Coordinated Universal Time) + and not local time. + + + + + + + + + + + + + External reference of any kind + + + + + + + + Semantic labels / tags + + + + + + + Type of metadata (e.g. author) + + + + + + + + + + + + + + + E.g. imagePhotometricInterpretation + + + + + + E.g. RGB + + + + + + + + + + A semantic label / tag + + + + + + + + Reference to external model / ontology / schema + + + + + + + E.g. an RDF resource identifier + (to be used as subject or object of an RDF triple) + + + + + + + Prefix for all labels (e.g. first part of an URI) + + + + + + + + Semantic label + + + + + The label / tag (e.g. 'person'). + Can be an RDF resource identifier + (e.g. object of an RDF triple). + + + + + + + Additional information on the label + (e.g. 'YYYY-mm-dd' for a date label). + Can be used as predicate of an RDF triple. + + + + + + + + + + + + Alternative document page images + (e.g. black-and-white). + + + + + + + + + + Order of blocks within the page. + + + + + + Unassigned regions are considered to be in the + (virtual) default layer which is to be treated + as below any other layers. + + + + + + + + Default text style + + + + + + + Semantic labels / tags + + + + + + + + + + + + + + + + + + + + + + + + Contains the image file name including the file extension. + + + + + + Specifies the width of the image. + + + + + Specifies the height of the image. + + + + + Specifies the image resolution in width. + + + + + Specifies the image resolution in height. + + + + + + Specifies the unit of the resolution information + referring to a standardised unit of measurement + (pixels per inch, pixels per centimeter or other). + + + + + + + + + + + + + For generic use + + + + + + The angle the rectangle encapsulating the page + (or its Border) has to be rotated in clockwise direction + in order to correct the present skew + (negative values indicate anti-clockwise rotation). + (The rotated image can be further referenced + via “AlternativeImage”.) + Range: -179.999,180 + + + + + + + The type of the page within the document + (e.g. cover page). + + + + + + + The primary language used in the page + (lower-level definitions override the page-level definition). + + + + + + + The secondary language used in the page + (lower-level definitions override the page-level definition). + + + + + + + The primary script used in the page + (lower-level definitions override the page-level definition). + + + + + + + The secondary script used in the page + (lower-level definitions override the page-level definition). + + + + + + + The direction in which text within lines + should be read (order of words and characters), + in addition to “textLineOrder” + (lower-level definitions override the page-level definition). + + + + + + + The order of text lines within a block, + in addition to “readingDirection” + (lower-level definitions override the page-level definition). + + + + + + Confidence value for whole page (between 0 and 1) + + + + + + + Pure text is represented as a text region. This includes + drop capitals, but practically ornate text may be + considered as a graphic. + + + + + + + + + + + + + The angle the rectangle encapsulating the region + has to be rotated in clockwise direction + in order to correct the present skew + (negative values indicate anti-clockwise rotation). + (The rotated image can be further referenced + via “AlternativeImage”.) + Range: -179.999,180 + + + + + + + The nature of the text in the region + + + + + + + The degree of space in points between the lines of + text (line spacing) + + + + + + + The direction in which text within lines + should be read (order of words and characters), + in addition to “textLineOrder”. + + + + + + + The order of text lines within the block, + in addition to “readingDirection”. + + + + + + + The angle the baseline of text within the region + has to be rotated (relative to the rectangle + encapsulating the region) in clockwise direction + in order to correct the present skew, + in addition to “orientation” + (negative values indicate anti-clockwise rotation). + Range: -179.999,180 + + + + + + + Defines whether a region of text is indented or not + + + + + + Text align + + + + + + The primary language used in the region + + + + + + + The secondary language used in the region + + + + + + + The primary script used in the region + + + + + + + The secondary script used in the region + + + + + + + + + + + + Polygon outline of the element as a path of points. + No points may lie outside the outline of its parent, + which in the case of Border is the bounding rectangle + of the root image. Paths are closed by convention, + i.e. the last point logically connects with the first + (and at least 3 points are required to span an area). + Paths must be planar (i.e. must not self-intersect). + + + + + + Confidence value (between 0 and 1) + + + + + + + + + Alternative text line images (e.g. + black-and-white) + + + + + + + + Multiple connected points that mark the baseline + of the glyphs + + + + + + + + + + + + + + Semantic labels / tags + + + + + + + + Overrides primaryLanguage attribute of parent text + region + + + + + + + The primary script used in the text line + + + + + + + The secondary script used in the text line + + + + + + + The direction in which text within the line + should be read (order of words and characters). + + + + + + + Overrides the production attribute of the parent + text region + + + + + + For generic use + + + + + + + Position (order number) of this text line within the + parent text region. + + + + + + + + + + Alternative word images (e.g. + black-and-white) + + + + + + + + + + + + + + + Semantic labels / tags + + + + + + + + Overrides primaryLanguage attribute of parent line + and/or text region + + + + + + + The primary script used in the word + + + + + + + The secondary script used in the word + + + + + + + The direction in which text within the word + should be read (order of characters). + + + + + + + Overrides the production attribute of the parent + text line and/or text region. + + + + + + For generic use + + + + + + + + + + Alternative glyph images (e.g. + black-and-white) + + + + + + + + Container for graphemes, grapheme groups and + non-printing characters + + + + + + + + + + + + Semantic labels / tags + + + + + + + + + + The script used for the glyph + + + + + + + Overrides the production attribute of the parent + word / text line / text region. + + + + + + For generic use + + + + + + + + + + Text in a "simple" form (ASCII or extended ASCII + as mostly used for typing). I.e. no use of + special characters for ligatures (should be + stored as two separate characters) etc. + + + + + + + Correct encoding of the original, always using + the corresponding Unicode code point. I.e. + ligatures have to be represented as one + character etc. + + + + + + + + Used for sort order in case multiple TextEquivs are defined. + The text content with the lowest index should be interpreted + as the main text content. + + + + + + + + + + + OCR confidence value (between 0 and 1) + + + + + + Type of text content (is it free text or a number, for instance). + This is only a descriptive attribute, the text type + is not checked during XML validation. + + + + + + + Refinement for dataType attribute. Can be a regular expression, for instance. + + + + + + + + + + An image is considered to be more intricate and complex + than a graphic. These can be photos or drawings. + + + + + + + + The angle the rectangle encapsulating a region + has to be rotated in clockwise direction + in order to correct the present skew + (negative values indicate anti-clockwise rotation). + Range: -179.999,180 + + + + + + + The colour bit depth required for the region + + + + + + + The background colour of the region + + + + + + + Specifies whether the region also contains + text + + + + + + + + + + A line drawing is a single colour illustration without + solid areas. + + + + + + + + The angle the rectangle encapsulating a region + has to be rotated in clockwise direction + in order to correct the present skew + (negative values indicate anti-clockwise rotation). + Range: -179.999,180 + + + + + + + The pen (foreground) colour of the region + + + + + + + The background colour of the region + + + + + + + Specifies whether the region also contains + text + + + + + + + + + + Regions containing simple graphics, such as a company + logo, should be marked as graphic regions. + + + + + + + + The angle the rectangle encapsulating a region + has to be rotated in clockwise direction + in order to correct the present skew + (negative values indicate anti-clockwise rotation). + Range: -179.999,180 + + + + + + + The type of graphic in the region + + + + + + + An approximation of the number of colours + used in the region + + + + + + + Specifies whether the region also contains + text. + + + + + + + + + + Tabular data in any form is represented with a table + region. Rows and columns may or may not have separator + lines; these lines are not separator regions. + + + + + + + + Table grid (visible or virtual grid lines) + + + + + + + The angle the rectangle encapsulating a region + has to be rotated in clockwise direction + in order to correct the present skew + (negative values indicate anti-clockwise rotation). + Range: -179.999,180 + + + + + + + The number of rows present in the table + + + + + + + The number of columns present in the table + + + + + + + The colour of the lines used in the region + + + + + + + The background colour of the region + + + + + + + Specifies the presence of line separators + + + + + + + Specifies whether the region also contains + text + + + + + + + + + + Matrix of grid points defining the table grid on the page. + + + + + + + One row in the grid point matrix. + Points with x,y coordinates. + (note: for a table with n table rows there should be n+1 grid rows) + + + + + + + + Points with x,y coordinates. + + + + + The grid row index + + + + + + + + + Regions containing charts or graphs of any type, should + be marked as chart regions. + + + + + + + + The angle the rectangle encapsulating a region + has to be rotated in clockwise direction + in order to correct the present skew + (negative values indicate anti-clockwise rotation). + Range: -179.999,180 + + + + + + + The type of chart in the region + + + + + + + An approximation of the number of colours + used in the region + + + + + + + The background colour of the region + + + + + + + Specifies whether the region also contains + text + + + + + + + + + + Separators are lines that lie between columns and + paragraphs and can be used to logically separate + different articles from each other. + + + + + + + + The angle the rectangle encapsulating a region + has to be rotated in clockwise direction + in order to correct the present skew + (negative values indicate anti-clockwise rotation). + Range: -179.999,180 + + + + + + + The colour of the separator + + + + + + + + + + Regions containing equations and mathematical symbols + should be marked as maths regions. + + + + + + + + The angle the rectangle encapsulating a region + has to be rotated in clockwise direction + in order to correct the present skew + (negative values indicate anti-clockwise rotation). + Range: -179.999,180 + + + + + + + The background colour of the region + + + + + + + + + + Regions containing chemical formulas. + + + + + + + + The angle the rectangle encapsulating a + region has to be rotated in clockwise + direction in order to correct the present + skew (negative values indicate + anti-clockwise rotation). Range: + -179.999,180 + + + + + + + The background colour of the region + + + + + + + + + + Regions containing maps. + + + + + + + + The angle the rectangle encapsulating a + region has to be rotated in clockwise + direction in order to correct the present + skew (negative values indicate + anti-clockwise rotation). Range: + -179.999,180 + + + + + + + + + + Regions containing musical notations. + + + + + + + + The angle the rectangle encapsulating a region + has to be rotated in clockwise direction + in order to correct the present skew + (negative values indicate anti-clockwise rotation). + Range: -179.999,180 + + + + + + + The background colour of the region + + + + + + + + + + Regions containing advertisements. + + + + + + + + The angle the rectangle encapsulating a region + has to be rotated in clockwise direction + in order to correct the present skew + (negative values indicate anti-clockwise rotation). + Range: -179.999,180 + + + + + + + The background colour of the region + + + + + + + + + + Noise regions are regions where no real data lies, only + false data created by artifacts on the document or + scanner noise. + + + + + + + + + + To be used if the region type cannot be ascertained. + + + + + + + + + + Regions containing content that is not covered + by the default types (text, graphic, image, + line drawing, chart, table, separator, maths, + map, music, chem, advert, noise, unknown). + + + + + + + + Information on the type of content represented by this region + + + + + + + + + + Determines the effective area on the paper of a printed page. + Its size is equal for all pages of a book + (exceptions: titlepage, multipage pictures). + It contains all living elements (except marginals) + like body type, footnotes, headings, running titles. + It does not contain pagenumber (if not part of running title), + marginals, signature mark, preview words. + + + + + + + + + + Definition of the reading order within the page. + To express a reading order between elements + they have to be included in an OrderedGroup. + Groups may contain further groups. + + + + + + + + + Confidence value (between 0 and 1) + + + + + + Numbered region + + + + Position (order number) of this item within the current hierarchy level. + + + + + + + + Indexed group containing ordered elements + + + + + + + Semantic labels / tags + + + + + + + + + + + + + Optional link to a parent region of nested regions. + The parent region doubles as reading order group. + Only the nested regions should be allowed as group members. + + + + + + + Position (order number) of this item within the + current hierarchy level. + + + + + + + + + Is this group a continuation of another group (from + previous column or page, for example)? + + + + + + For generic use + + + + + + + + Indexed group containing unordered elements + + + + + + + + Semantic labels / tags + + + + + + + + + + + + + Optional link to a parent region of nested regions. + The parent region doubles as reading order group. + Only the nested regions should be allowed as group members. + + + + + + + Position (order number) of this item within the + current hierarchy level. + + + + + + + + + Is this group a continuation of another group + (from previous column or page, for example)? + + + + + + For generic use + + + + + + + + + + + Numbered group (contains ordered elements) + + + + + + + + Semantic labels / tags + + + + + + + + + + + + + Optional link to a parent region of nested regions. + The parent region doubles as reading order group. + Only the nested regions should be allowed as group members. + + + + + + + + + Is this group a continuation of another group + (from previous column or page, for example)? + + + + + + For generic use + + + + + + + + Numbered group (contains unordered elements) + + + + + + + + Semantic labels / tags + + + + + + + + + + + + + Optional link to a parent region of nested regions. + The parent region doubles as reading order group. + Only the nested regions should be allowed as group members. + + + + + + + + + Is this group a continuation of another group + (from previous column or page, for example)? + + + + + + For generic use + + + + + + + + Border of the actual page (if the scanned image + contains parts not belonging to the page). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ISO 639.x 2016-07-14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + iso15924 2016-07-14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Can be used to express the z-index of overlapping + regions. An element with a greater z-index is always in + front of another element with lower z-index. + + + + + + + + + + + + + + + + + + + + + + Confidence value (between 0 and 1) + + + + + + + + Point list with format "x1,y1 x2,y2 ...", where + "x" / "y" refer to the horizontal / vertical + pixel positions in a coordinate system which always + references the root PageType/@imageFilename, with + "0,0" in the upper left corner of the root image and + "imageWidth,imageHeight" in the lower right. + + + + + + + + + + Container for one-to-one relations between layout + objects (for example: DropCap - paragraph, caption - + image). + + + + + + + + + + + One-to-one relation between to layout object. Use 'link' + for loose relations and 'join' for strong relations + (where something is fragmented for instance). + + Examples for 'link': caption - image floating - + paragraph paragraph - paragraph (when a paragraph is + split across columns and the last word of the first + paragraph DOES NOT continue in the second paragraph) + drop-cap - paragraph (when the drop-cap is a whole word) + + Examples for 'join': word - word (separated word at the + end of a line) drop-cap - paragraph (when the drop-cap + is not a whole word) paragraph - paragraph (when a + pragraph is split across columns and the last word of + the first paragraph DOES continue in the second + paragraph) + + + + + + Semantic labels / tags + + + + + + + + + + + + + + + + + + + For generic use + + + + + + + + Text production type + + + + + + + + + + + + + + + Monospace (fixed-pitch, non-proportional) or + proportional font. + + + + + + For instance: Arial, Times New Roman. + Add more information if necessary + (e.g. blackletter, antiqua). + + + + + + + Serif or sans-serif typeface. + + + + + + + + The size of the characters in points. + + + + + + + The x-height or corpus size refers to the distance + between the baseline and the mean line of + lower-case letters in a typeface. + The unit is assumed to be pixels. + + + + + + + The degree of space (in points) between + the characters in a string of text. + + + + + + + + Text colour in RGB encoded format + (red value) + (256 x green value) + (65536 x blue value). + + + + + + Background colour + + + + + + Background colour in RGB encoded format + (red value) + (256 x green value) + (65536 x blue value). + + + + + + + Specifies whether the colour of the text appears + reversed against a background colour. + + + + + + + + + Line style details if "underlined" is TRUE + + + + + + + + + + + + + + + + Alternative region images + (e.g. black-and-white). + + + + + + + + + Semantic labels / tags + + + + + + Roles the region takes + (e.g. in context of a parent region). + + + + + + + + + + + + + + + + + + + + + + + + For generic use + + + + + + + Is this region a continuation of another region + (in previous column or page, for example)? + + + + + + + + + + + Confidence value (between 0 and 1) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Examples: + "123.456", "+1234.456", + "-1234.456", "-.456", "-456" + + + + + + + Examples: + "123.456", "+1234.456", "-1.2344e56", + "-.45E-6", "INF", "-INF", "NaN" + + + + + + + Examples: + "123456", "+00000012", "-1", "-456" + + + + + + + Examples: "true", "false", "1", "0" + + + + + + + Examples: + "2001-10-26", "2001-10-26+02:00", + "2001-10-26Z", "2001-10-26+00:00", + "-2001-10-26", "-20000-04-01" + + + + + + + Examples: + "21:32:52", "21:32:52+02:00", "19:32:52Z", + "19:32:52+00:00", "21:32:52.12679" + + + + + + + Examples: + "2001-10-26T21:32:52", "2001-10-26T21:32:52+02:00", + "2001-10-26T19:32:52Z", "2001-10-26T19:32:52+00:00", + "-2001-10-26T21:32:52", "2001-10-26T21:32:52.12679" + + + + + + Generic text string + + + + + + An XSD type that is not listed or a custom type + (use dataTypeDetails attribute). + + + + + + + + + Container for graphemes, grapheme groups and + non-printing characters. + + + + + + + + + + + + Base type for graphemes, grapheme groups and non-printing characters. + + + + + + + + + + Order index of grapheme, group, or non-printing character + within the parent container (graphemes or glyph or grapheme group). + + + + + + + + + + + + + Type of character represented by the + grapheme, group, or non-printing character element. + + + + + + + + + + + + For generic use + + + + + For generic use + + + + + + + Represents a sub-element of a glyph. + Smallest graphical unit that can be + assigned a Unicode code point. + + + + + + + + + + + + + + A glyph component without visual representation + but with Unicode code point. + Non-visual / non-printing / control character. + Part of grapheme container (of glyph) or grapheme sub group. + + + + + + + + + + + + + + + + + + + + + Container for user-defined attributes + + + + + + + + + Structured custom data defined by name, type and value. + + + + + + + + + + + + + + + + + + + + Cell position in table starting with row 0 + + + + + Cell position in table starting with column 0 + + + + + Number of rows the cell spans (optional; default is 1) + + + + + Number of columns the cell spans (optional; default is 1) + + + + + + Is the cell a column or row header? + + + + + + + + + + Data for a region that takes on the role + of a table cell within a parent table region. + + + + + + + + + + + + + diff --git a/tests/resources/records.json b/tests/resources/records.json index cf735d14b..c084b2f23 100644 --- a/tests/resources/records.json +++ b/tests/resources/records.json @@ -1 +1 @@ -[{"prediction": "\u0645\u0627\u0644\u0633\u0644\u0627 \u0647\u064a\u0644\u0639 \u0647\u062a\u0627\u0632\u062c\u0639\u0645 \u064a\u0641", "cuts": [[[1437, 119], [1437, 256], [1449, 256], [1449, 119]], [[1484, 119], [1484, 256], [1496, 256], [1496, 119]], [[1508, 119], [1508, 256], [1520, 256], [1520, 119]], [[1568, 119], [1568, 256], [1568, 256], [1568, 119]], [[1603, 119], [1603, 256], [1603, 256], [1603, 119]], [[1615, 119], [1615, 256], [1627, 256], [1627, 119]], [[1639, 119], [1639, 256], [1639, 256], [1639, 119]], [[1663, 119], [1663, 256], [1674, 256], [1674, 119]], [[1698, 119], [1698, 256], [1698, 256], [1698, 119]], [[1722, 119], [1722, 256], [1734, 256], [1734, 119]], [[1746, 119], [1746, 256], [1758, 256], [1758, 119]], [[1793, 119], [1793, 256], [1805, 256], [1805, 119]], [[1817, 119], [1817, 256], [1829, 256], [1829, 119]], [[1853, 119], [1853, 256], [1853, 256], [1853, 119]], [[1876, 119], [1876, 256], [1888, 256], [1888, 119]], [[1924, 119], [1924, 256], [1936, 256], [1936, 119]], [[1959, 119], [1959, 256], [1971, 256], [1971, 119]], [[2007, 119], [2007, 256], [2019, 256], [2019, 119]], [[2054, 119], [2054, 256], [2054, 256], [2054, 119]], [[2078, 119], [2078, 256], [2090, 256], [2090, 119]], [[2149, 119], [2149, 256], [2149, 256], [2149, 119]], [[2161, 119], [2161, 256], [2173, 256], [2173, 119]]], "confidences": [0.9999573230743408, 0.8209527730941772, 0.9964040517807007, 0.667267382144928, 0.9973480701446533, 0.9998679161071777, 0.9999040365219116, 0.999890923500061, 0.8255242109298706, 0.9995707869529724, 0.9976646900177002, 0.9889178276062012, 0.9869346618652344, 0.9966957569122314, 0.9958117008209229, 0.980436384677887, 0.9956343770027161, 0.9984177350997925, 0.762851893901825, 0.9997056126594543, 0.9977449178695679, 0.9985793828964233], "line": {"id": "45b2dd04-e945-4788-92b2-83a9ed26092d", "bbox": [1437, 119, 2185, 256], "type": "bbox"}}, {"prediction": "(294)", "cuts": [[[2838, 119], [2838, 265], [2838, 265], [2838, 119]], [[2904, 119], [2904, 265], [2904, 265], [2904, 119]], [[2954, 119], [2954, 265], [2954, 265], [2954, 119]], [[3019, 119], [3019, 265], [3019, 265], [3019, 119]], [[3069, 119], [3069, 265], [3085, 265], [3085, 119]]], "confidences": [0.5292237997055054, 0.9998055100440979, 0.9602159857749939, 0.9988068342208862, 0.994594395160675], "line": {"id": "def66cf7-3d4d-41f2-9d7b-b5009f125834", "bbox": [2821, 119, 3119, 265], "type": "bbox"}}, {"prediction": "\u0627\u0630\u0643\u0648 \u0627\u0630\u0643\u062a\u0642\u0648 \u0641 \u0646\u064a\u0646\u0645\u0654\u0648\u0645\u0644\u0627 \u0631\u064a\u0645\u0654\u0627 \u0627\u0647\u0628 \u0647\u0645\u0631\u0643\u0627 \u0649\u062a\u0644\u0627 \u0629\u0639\u0627\u0631\u062f\u0644\u0627 \u0647\u064a\u0644\u0627 \u0644\u0645\u062d \u062f\u0642\u0648 \u0629\u0646\u0633 \u0644\u0643 \u064a\u0641", "cuts": [[[358, 365], [358, 542], [358, 542], [358, 365]], [[402, 365], [402, 542], [402, 542], [402, 365]], [[460, 365], [460, 542], [474, 542], [474, 365]], [[648, 365], [648, 542], [663, 542], [663, 365]], [[677, 365], [677, 542], [706, 542], [706, 365]], [[735, 365], [735, 542], [750, 542], [750, 365]], [[779, 365], [779, 542], [779, 542], [779, 365]], [[852, 365], [852, 542], [852, 542], [852, 365]], [[939, 365], [939, 542], [939, 542], [939, 365]], [[997, 365], [997, 542], [997, 542], [997, 365]], [[1055, 365], [1055, 542], [1055, 542], [1055, 365]], [[1069, 365], [1069, 542], [1084, 542], [1084, 365]], [[1127, 365], [1127, 542], [1142, 542], [1142, 365]], [[1171, 365], [1171, 542], [1171, 542], [1171, 365]], [[1200, 365], [1200, 542], [1215, 542], [1215, 365]], [[1229, 365], [1229, 542], [1244, 542], [1244, 365]], [[1273, 365], [1273, 542], [1273, 542], [1273, 365]], [[1302, 365], [1302, 542], [1302, 542], [1302, 365]], [[1345, 365], [1345, 542], [1345, 542], [1345, 365]], [[1360, 365], [1360, 542], [1360, 542], [1360, 365]], [[1374, 365], [1374, 542], [1374, 542], [1374, 365]], [[1389, 365], [1389, 542], [1403, 542], [1403, 365]], [[1418, 365], [1418, 542], [1432, 542], [1432, 365]], [[1447, 365], [1447, 542], [1447, 542], [1447, 365]], [[1490, 365], [1490, 542], [1490, 542], [1490, 365]], [[1505, 365], [1505, 542], [1519, 542], [1519, 365]], [[1548, 365], [1548, 542], [1548, 542], [1548, 365]], [[1578, 365], [1578, 542], [1578, 542], [1578, 365]], [[1592, 365], [1592, 542], [1592, 542], [1592, 365]], [[1607, 365], [1607, 542], [1621, 542], [1621, 365]], [[1650, 365], [1650, 542], [1650, 542], [1650, 365]], [[1665, 365], [1665, 542], [1679, 542], [1679, 365]], [[1694, 365], [1694, 542], [1708, 542], [1708, 365]], [[1723, 365], [1723, 542], [1737, 542], [1737, 365]], [[1766, 365], [1766, 542], [1766, 542], [1766, 365]], [[1810, 365], [1810, 542], [1810, 542], [1810, 365]], [[1853, 365], [1853, 542], [1868, 542], [1868, 365]], [[1882, 365], [1882, 542], [1882, 542], [1882, 365]], [[1955, 365], [1955, 542], [1969, 542], [1969, 365]], [[1984, 365], [1984, 542], [1999, 542], [1999, 365]], [[2057, 365], [2057, 542], [2057, 542], [2057, 365]], [[2071, 365], [2071, 542], [2071, 542], [2071, 365]], [[2086, 365], [2086, 542], [2100, 542], [2100, 365]], [[2115, 365], [2115, 542], [2115, 542], [2115, 365]], [[2129, 365], [2129, 542], [2144, 542], [2144, 365]], [[2173, 365], [2173, 542], [2173, 542], [2173, 365]], [[2202, 365], [2202, 542], [2202, 542], [2202, 365]], [[2245, 365], [2245, 542], [2260, 542], [2260, 365]], [[2303, 365], [2303, 542], [2303, 542], [2303, 365]], [[2332, 365], [2332, 542], [2347, 542], [2347, 365]], [[2361, 365], [2361, 542], [2361, 542], [2361, 365]], [[2376, 365], [2376, 542], [2391, 542], [2391, 365]], [[2405, 365], [2405, 542], [2420, 542], [2420, 365]], [[2434, 365], [2434, 542], [2449, 542], [2449, 365]], [[2478, 365], [2478, 542], [2478, 542], [2478, 365]], [[2492, 365], [2492, 542], [2507, 542], [2507, 365]], [[2521, 365], [2521, 542], [2521, 542], [2521, 365]], [[2536, 365], [2536, 542], [2550, 542], [2550, 365]], [[2594, 365], [2594, 542], [2594, 542], [2594, 365]], [[2623, 365], [2623, 542], [2623, 542], [2623, 365]], [[2637, 365], [2637, 542], [2652, 542], [2652, 365]], [[2681, 365], [2681, 542], [2695, 542], [2695, 365]], [[2724, 365], [2724, 542], [2724, 542], [2724, 365]], [[2753, 365], [2753, 542], [2753, 542], [2753, 365]], [[2812, 365], [2812, 542], [2812, 542], [2812, 365]], [[2841, 365], [2841, 542], [2855, 542], [2855, 365]], [[2870, 365], [2870, 542], [2870, 542], [2870, 365]], [[2899, 365], [2899, 542], [2899, 542], [2899, 365]], [[2942, 365], [2942, 542], [2957, 542], [2957, 365]], [[2986, 365], [2986, 542], [3000, 542], [3000, 365]], [[3058, 365], [3058, 542], [3058, 542], [3058, 365]], [[3073, 365], [3073, 542], [3073, 542], [3073, 365]], [[3116, 365], [3116, 542], [3131, 542], [3131, 365]], [[3145, 365], [3145, 542], [3145, 542], [3145, 365]], [[3160, 365], [3160, 542], [3174, 542], [3174, 365]]], "confidences": [0.9912043213844299, 0.9701831340789795, 0.9999876022338867, 0.9710670113563538, 0.9999645948410034, 0.9999040365219116, 0.9999904632568359, 0.9276049733161926, 0.9949396848678589, 0.9172694683074951, 0.9944435954093933, 0.9998708963394165, 0.9994745850563049, 0.9999909400939941, 0.9929296374320984, 0.9996275901794434, 0.9654240012168884, 0.9978482723236084, 0.8331916928291321, 0.9914954900741577, 0.9862202405929565, 0.9967150688171387, 0.9994681477546692, 0.9422079920768738, 0.9996860027313232, 0.9978721141815186, 0.590356171131134, 0.9853919148445129, 0.9949153661727905, 0.9330083131790161, 0.902510941028595, 0.9991570711135864, 0.9937306642532349, 0.9962736368179321, 0.9969527721405029, 0.9955304265022278, 0.9975927472114563, 0.931627094745636, 0.9910709857940674, 0.994668185710907, 0.9977930784225464, 0.9947988986968994, 0.99834144115448, 0.9974583983421326, 0.9996436834335327, 0.9992924928665161, 0.9981145858764648, 0.9989506006240845, 0.9970920085906982, 0.9896613359451294, 0.6772571206092834, 0.9618531465530396, 0.9992746710777283, 0.998647153377533, 0.834701657295227, 0.9992173910140991, 0.9594298601150513, 0.9998399019241333, 0.9885919690132141, 0.9965444207191467, 0.9950836896896362, 0.8906474709510803, 0.8982319831848145, 0.520612359046936, 0.9998024106025696, 0.9991157650947571, 0.9997696280479431, 0.9865208864212036, 0.9990457892417908, 0.9984292387962341, 0.8027671575546265, 0.9970871806144714, 0.9498249292373657, 0.9898852109909058, 0.9846636056900024], "line": {"id": "b242cdcb-5ce1-4582-a71d-58c9ad54da92", "bbox": [358, 365, 3189, 542], "type": "bbox"}}, {"prediction": "\u0646\u0627\u0643 \u0646\u0627\u0641 \u0644\u0627\u062d\u0644\u0627 \u0647\u0630\u0647 \u0646\u0639 \u0646\u063a\u0634\u0643\u0627\u0644 \u0644\u0627\u0642\u0648 \u0627\u062f\u062f\u0634 \u064b\u0627\u0640\u0628\u0646\u063a \u0628\u0636\u063a\u0648 \u0643\u0644\u0630\u0644 \u062f\u064a\u0634\u0631\u0644\u0627 \u0637\u0627\u0634\u062a\u0633\u0627\u0641", "cuts": [[[364, 534], [364, 695], [377, 695], [377, 534]], [[405, 534], [405, 695], [405, 695], [405, 534]], [[419, 534], [419, 695], [419, 695], [419, 534]], [[460, 534], [460, 695], [487, 695], [487, 534]], [[514, 534], [514, 695], [528, 695], [528, 534]], [[555, 534], [555, 695], [555, 695], [555, 534]], [[569, 534], [569, 695], [583, 695], [583, 534]], [[610, 534], [610, 695], [624, 695], [624, 534]], [[665, 534], [665, 695], [665, 695], [665, 534]], [[679, 534], [679, 695], [692, 695], [692, 534]], [[720, 534], [720, 695], [720, 695], [720, 534]], [[733, 534], [733, 695], [747, 695], [747, 534]], [[774, 534], [774, 695], [788, 695], [788, 534]], [[802, 534], [802, 695], [816, 695], [816, 534]], [[829, 534], [829, 695], [843, 695], [843, 534]], [[884, 534], [884, 695], [884, 695], [884, 534]], [[911, 534], [911, 695], [925, 695], [925, 534]], [[952, 534], [952, 695], [966, 695], [966, 534]], [[1007, 534], [1007, 695], [1007, 695], [1007, 534]], [[1048, 534], [1048, 695], [1048, 695], [1048, 534]], [[1089, 534], [1089, 695], [1103, 695], [1103, 534]], [[1144, 534], [1144, 695], [1144, 695], [1144, 534]], [[1185, 534], [1185, 695], [1185, 695], [1185, 534]], [[1240, 534], [1240, 695], [1240, 695], [1240, 534]], [[1295, 534], [1295, 695], [1295, 695], [1295, 534]], [[1363, 534], [1363, 695], [1377, 695], [1377, 534]], [[1391, 534], [1391, 695], [1404, 695], [1404, 534]], [[1418, 534], [1418, 695], [1432, 695], [1432, 534]], [[1473, 534], [1473, 695], [1486, 695], [1486, 534]], [[1500, 534], [1500, 695], [1500, 695], [1500, 534]], [[1514, 534], [1514, 695], [1514, 695], [1514, 534]], [[1568, 534], [1568, 695], [1582, 695], [1582, 534]], [[1596, 534], [1596, 695], [1623, 695], [1623, 534]], [[1651, 534], [1651, 695], [1664, 695], [1664, 534]], [[1692, 534], [1692, 695], [1705, 695], [1705, 534]], [[1760, 534], [1760, 695], [1774, 695], [1774, 534]], [[1815, 534], [1815, 695], [1829, 695], [1829, 534]], [[1842, 534], [1842, 695], [1856, 695], [1856, 534]], [[1870, 534], [1870, 695], [1870, 695], [1870, 534]], [[1883, 534], [1883, 695], [1883, 695], [1883, 534]], [[1924, 534], [1924, 695], [1952, 695], [1952, 534]], [[2034, 534], [2034, 695], [2034, 695], [2034, 534]], [[2075, 534], [2075, 695], [2075, 695], [2075, 534]], [[2130, 534], [2130, 695], [2143, 695], [2143, 534]], [[2171, 534], [2171, 695], [2185, 695], [2185, 534]], [[2226, 534], [2226, 695], [2226, 695], [2226, 534]], [[2308, 534], [2308, 695], [2308, 695], [2308, 534]], [[2363, 534], [2363, 695], [2363, 695], [2363, 534]], [[2431, 534], [2431, 695], [2431, 695], [2431, 534]], [[2458, 534], [2458, 695], [2472, 695], [2472, 534]], [[2527, 534], [2527, 695], [2527, 695], [2527, 534]], [[2582, 534], [2582, 695], [2582, 695], [2582, 534]], [[2609, 534], [2609, 695], [2623, 695], [2623, 534]], [[2650, 534], [2650, 695], [2650, 695], [2650, 534]], [[2664, 534], [2664, 695], [2677, 695], [2677, 534]], [[2705, 534], [2705, 695], [2705, 695], [2705, 534]], [[2732, 534], [2732, 695], [2746, 695], [2746, 534]], [[2787, 534], [2787, 695], [2787, 695], [2787, 534]], [[2828, 534], [2828, 695], [2828, 695], [2828, 534]], [[2842, 534], [2842, 695], [2855, 695], [2855, 534]], [[2869, 534], [2869, 695], [2869, 695], [2869, 534]], [[2883, 534], [2883, 695], [2896, 695], [2896, 534]], [[2938, 534], [2938, 695], [2938, 695], [2938, 534]], [[2992, 534], [2992, 695], [2992, 695], [2992, 534]], [[3033, 534], [3033, 695], [3033, 695], [3033, 534]], [[3061, 534], [3061, 695], [3074, 695], [3074, 534]], [[3102, 534], [3102, 695], [3129, 695], [3129, 534]], [[3143, 534], [3143, 695], [3157, 695], [3157, 534]], [[3170, 534], [3170, 695], [3170, 695], [3170, 534]]], "confidences": [0.9985698461532593, 0.9999438524246216, 0.9994581341743469, 0.9928075075149536, 0.9999692440032959, 0.9775535464286804, 0.9994893074035645, 0.9992764592170715, 0.9999681711196899, 0.999976634979248, 0.5837891101837158, 0.9994819760322571, 0.9999487400054932, 0.6378462314605713, 0.9995593428611755, 0.9997476935386658, 0.9998375177383423, 0.9999092817306519, 0.9706422686576843, 0.9981306195259094, 0.999731719493866, 0.9984344840049744, 0.9999045133590698, 0.9998281002044678, 0.9965876340866089, 0.9981406927108765, 0.9998824596405029, 0.9994693398475647, 0.9985535740852356, 0.9371808171272278, 0.9999727010726929, 0.9998328685760498, 0.9986041188240051, 0.9998788833618164, 0.9969847798347473, 0.9979107975959778, 0.9678859114646912, 0.9965589642524719, 0.9958305954933167, 0.856151819229126, 0.9174501299858093, 0.977839469909668, 0.9722991585731506, 0.999629020690918, 0.9988741278648376, 0.5952739119529724, 0.8313284516334534, 0.6637697815895081, 0.9957481026649475, 0.9997797608375549, 0.99960857629776, 0.6831809282302856, 0.9987292885780334, 0.9998849630355835, 0.9514357447624207, 0.9951800107955933, 0.9758328795433044, 0.9967122077941895, 0.7513812184333801, 0.9999700784683228, 0.9964326620101929, 0.9970759153366089, 0.9622002243995667, 0.7601332068443298, 0.9990935325622559, 0.9990278482437134, 0.9987155199050903, 0.9829656481742859, 0.6010854244232178], "line": {"id": "38c5c359-ee24-49b1-916a-232a74148c17", "bbox": [350, 534, 3184, 695], "type": "bbox"}}, {"prediction": "\u0647\u064a\u062f\u064a \u0646\u064a\u0628 \u0644\u062b\u0645 \u0627\u0644\u0641 \u0646\u064a\u0637\u0642\u064a \u0646\u0628 \u0649\u0644\u0639 \u0631\u0627\u0636\u062d\u0627\u0628 \u062a\u0642\u0648\u0644\u0627 \u064a\u0641 \u0630\u0641\u0646\u0627\u0648 \u0647\u0633\u0641\u0646 \u062a\u0642\u0647\u0632\u0654\u0627 \u0644\u0648\u0642\u062a \u0627\u0645\u0643 \u0645\u0627\u0644\u0627", "cuts": [[[349, 703], [349, 875], [362, 875], [362, 703]], [[389, 703], [389, 875], [389, 875], [389, 703]], [[428, 703], [428, 875], [441, 875], [441, 703]], [[455, 703], [455, 875], [468, 875], [468, 703]], [[481, 703], [481, 875], [494, 875], [494, 703]], [[534, 703], [534, 875], [547, 875], [547, 703]], [[560, 703], [560, 875], [560, 875], [560, 703]], [[586, 703], [586, 875], [586, 875], [586, 703]], [[613, 703], [613, 875], [626, 875], [626, 703]], [[666, 703], [666, 875], [679, 875], [679, 703]], [[705, 703], [705, 875], [705, 875], [705, 703]], [[731, 703], [731, 875], [731, 875], [731, 703]], [[758, 703], [758, 875], [771, 875], [771, 703]], [[797, 703], [797, 875], [797, 875], [797, 703]], [[837, 703], [837, 875], [837, 875], [837, 703]], [[863, 703], [863, 875], [863, 875], [863, 703]], [[890, 703], [890, 875], [903, 875], [903, 703]], [[956, 703], [956, 875], [956, 875], [956, 703]], [[982, 703], [982, 875], [982, 875], [982, 703]], [[1008, 703], [1008, 875], [1022, 875], [1022, 703]], [[1074, 703], [1074, 875], [1074, 875], [1074, 703]], [[1101, 703], [1101, 875], [1101, 875], [1101, 703]], [[1127, 703], [1127, 875], [1140, 875], [1140, 703]], [[1180, 703], [1180, 875], [1193, 875], [1193, 703]], [[1206, 703], [1206, 875], [1219, 875], [1219, 703]], [[1233, 703], [1233, 875], [1246, 875], [1246, 703]], [[1312, 703], [1312, 875], [1312, 875], [1312, 703]], [[1325, 703], [1325, 875], [1338, 875], [1338, 703]], [[1351, 703], [1351, 875], [1351, 875], [1351, 703]], [[1391, 703], [1391, 875], [1404, 875], [1404, 703]], [[1444, 703], [1444, 875], [1444, 875], [1444, 703]], [[1470, 703], [1470, 875], [1483, 875], [1483, 703]], [[1509, 703], [1509, 875], [1523, 875], [1523, 703]], [[1575, 703], [1575, 875], [1589, 875], [1589, 703]], [[1628, 703], [1628, 875], [1641, 875], [1641, 703]], [[1655, 703], [1655, 875], [1655, 875], [1655, 703]], [[1681, 703], [1681, 875], [1694, 875], [1694, 703]], [[1747, 703], [1747, 875], [1747, 875], [1747, 703]], [[1800, 703], [1800, 875], [1800, 875], [1800, 703]], [[1839, 703], [1839, 875], [1852, 875], [1852, 703]], [[1865, 703], [1865, 875], [1879, 875], [1879, 703]], [[1892, 703], [1892, 875], [1905, 875], [1905, 703]], [[1918, 703], [1918, 875], [1918, 875], [1918, 703]], [[1958, 703], [1958, 875], [1958, 875], [1958, 703]], [[1971, 703], [1971, 875], [1971, 875], [1971, 703]], [[1997, 703], [1997, 875], [2011, 875], [2011, 703]], [[2050, 703], [2050, 875], [2050, 875], [2050, 703]], [[2090, 703], [2090, 875], [2090, 875], [2090, 703]], [[2116, 703], [2116, 875], [2116, 875], [2116, 703]], [[2156, 703], [2156, 875], [2156, 875], [2156, 703]], [[2195, 703], [2195, 875], [2208, 875], [2208, 703]], [[2222, 703], [2222, 875], [2235, 875], [2235, 703]], [[2261, 703], [2261, 875], [2261, 875], [2261, 703]], [[2301, 703], [2301, 875], [2327, 875], [2327, 703]], [[2353, 703], [2353, 875], [2367, 875], [2367, 703]], [[2380, 703], [2380, 875], [2393, 875], [2393, 703]], [[2406, 703], [2406, 875], [2419, 875], [2419, 703]], [[2472, 703], [2472, 875], [2472, 875], [2472, 703]], [[2538, 703], [2538, 875], [2538, 875], [2538, 703]], [[2564, 703], [2564, 875], [2578, 875], [2578, 703]], [[2617, 703], [2617, 875], [2630, 875], [2630, 703]], [[2643, 703], [2643, 875], [2657, 875], [2657, 703]], [[2670, 703], [2670, 875], [2670, 875], [2670, 703]], [[2683, 703], [2683, 875], [2696, 875], [2696, 703]], [[2749, 703], [2749, 875], [2749, 875], [2749, 703]], [[2789, 703], [2789, 875], [2789, 875], [2789, 703]], [[2828, 703], [2828, 875], [2828, 875], [2828, 703]], [[2854, 703], [2854, 875], [2854, 875], [2854, 703]], [[2881, 703], [2881, 875], [2894, 875], [2894, 703]], [[2907, 703], [2907, 875], [2907, 875], [2907, 703]], [[2920, 703], [2920, 875], [2934, 875], [2934, 703]], [[2947, 703], [2947, 875], [2947, 875], [2947, 703]], [[2973, 703], [2973, 875], [2986, 875], [2986, 703]], [[3065, 703], [3065, 875], [3065, 875], [3065, 703]], [[3105, 703], [3105, 875], [3118, 875], [3118, 703]], [[3131, 703], [3131, 875], [3145, 875], [3145, 703]], [[3158, 703], [3158, 875], [3171, 875], [3171, 703]]], "confidences": [0.9978576302528381, 0.9365259408950806, 0.9993323683738708, 0.9999881982803345, 0.995057225227356, 0.9951127171516418, 0.9600062966346741, 0.9987906813621521, 0.9990148544311523, 0.9999818801879883, 0.979132354259491, 0.9896356463432312, 0.9996901750564575, 0.9994376301765442, 0.9832384586334229, 0.9919760823249817, 0.9994718432426453, 0.99887615442276, 0.9999384880065918, 0.9999126195907593, 0.9968804121017456, 0.9998698234558105, 0.9996697902679443, 0.9999111890792847, 0.999935507774353, 0.9999529123306274, 0.9985625147819519, 0.9987615346908569, 0.9998716115951538, 0.9999983310699463, 0.9997947812080383, 0.9999533891677856, 0.9956774115562439, 0.9921483993530273, 0.9991742968559265, 0.8690173625946045, 0.9889227151870728, 0.990256130695343, 0.9499505758285522, 0.9942019581794739, 0.992321789264679, 0.9953250885009766, 0.9952391386032104, 0.9987290501594543, 0.9708223342895508, 0.9829660654067993, 0.998319685459137, 0.9980186223983765, 0.9733465313911438, 0.9576543569564819, 0.9972822666168213, 0.9974729418754578, 0.9998486042022705, 0.9998704195022583, 0.9851626753807068, 0.999782145023346, 0.9982467889785767, 0.5265796780586243, 0.9982032775878906, 0.9953908920288086, 0.9945998191833496, 0.9988899827003479, 0.932214617729187, 0.9992570281028748, 0.9942938685417175, 0.9976638555526733, 0.8540834784507751, 0.999862551689148, 0.999956488609314, 0.5673943161964417, 0.9989564418792725, 0.996831476688385, 0.9993277788162231, 0.9955874681472778, 0.995591402053833, 0.9929797053337097, 0.9888700246810913], "line": {"id": "a0cfd45b-cfc3-4068-ac25-417781cf2437", "bbox": [349, 703, 3171, 875], "type": "bbox"}}, {"prediction": "\u0645\u0648\u062a\u062e\u0645 \u0637\u0641\u0633 \u064a\u0641 \u0649\u062f\u0646\u0639 \u0646\u064a\u0646\u0645\u0654\u0648\u0645\u0644\u0627 \u0631\u064a\u0645\u0654\u0627\u064a \u0649\u0647 \u0644\u0627\u0642 \u0627\u0647\u0628 \u0643\u062a\u0648\u0633\u0643 \u0649\u062a\u0644\u0627 \u0629\u0639\u0631\u0627\u062f\u0644\u0627 \u0644\u0639\u0641 \u0627\u0645 \u0647\u0644 \u0644\u0627\u0642", "cuts": [[[347, 875], [347, 1045], [360, 1045], [360, 875]], [[414, 875], [414, 1045], [414, 1045], [414, 875]], [[454, 875], [454, 1045], [467, 1045], [467, 875]], [[480, 875], [480, 1045], [480, 1045], [480, 875]], [[494, 875], [494, 1045], [494, 1045], [494, 875]], [[534, 875], [534, 1045], [534, 1045], [534, 875]], [[574, 875], [574, 1045], [574, 1045], [574, 875]], [[641, 875], [641, 1045], [641, 1045], [641, 875]], [[681, 875], [681, 1045], [694, 1045], [694, 875]], [[721, 875], [721, 1045], [721, 1045], [721, 875]], [[761, 875], [761, 1045], [761, 1045], [761, 875]], [[774, 875], [774, 1045], [774, 1045], [774, 875]], [[801, 875], [801, 1045], [814, 1045], [814, 875]], [[854, 875], [854, 1045], [854, 1045], [854, 875]], [[921, 875], [921, 1045], [921, 1045], [921, 875]], [[948, 875], [948, 1045], [948, 1045], [948, 875]], [[974, 875], [974, 1045], [974, 1045], [974, 875]], [[1014, 875], [1014, 1045], [1028, 1045], [1028, 875]], [[1054, 875], [1054, 1045], [1068, 1045], [1068, 875]], [[1081, 875], [1081, 1045], [1094, 1045], [1094, 875]], [[1121, 875], [1121, 1045], [1121, 1045], [1121, 875]], [[1148, 875], [1148, 1045], [1161, 1045], [1161, 875]], [[1201, 875], [1201, 1045], [1201, 1045], [1201, 875]], [[1214, 875], [1214, 1045], [1214, 1045], [1214, 875]], [[1228, 875], [1228, 1045], [1228, 1045], [1228, 875]], [[1241, 875], [1241, 1045], [1255, 1045], [1255, 875]], [[1268, 875], [1268, 1045], [1281, 1045], [1281, 875]], [[1295, 875], [1295, 1045], [1295, 1045], [1295, 875]], [[1335, 875], [1335, 1045], [1348, 1045], [1348, 875]], [[1361, 875], [1361, 1045], [1361, 1045], [1361, 875]], [[1388, 875], [1388, 1045], [1401, 1045], [1401, 875]], [[1415, 875], [1415, 1045], [1428, 1045], [1428, 875]], [[1441, 875], [1441, 1045], [1468, 1045], [1468, 875]], [[1481, 875], [1481, 1045], [1495, 1045], [1495, 875]], [[1508, 875], [1508, 1045], [1535, 1045], [1535, 875]], [[1602, 875], [1602, 1045], [1602, 1045], [1602, 875]], [[1615, 875], [1615, 1045], [1628, 1045], [1628, 875]], [[1655, 875], [1655, 1045], [1682, 1045], [1682, 875]], [[1735, 875], [1735, 1045], [1735, 1045], [1735, 875]], [[1748, 875], [1748, 1045], [1748, 1045], [1748, 875]], [[1775, 875], [1775, 1045], [1775, 1045], [1775, 875]], [[1802, 875], [1802, 1045], [1802, 1045], [1802, 875]], [[1828, 875], [1828, 1045], [1828, 1045], [1828, 875]], [[1882, 875], [1882, 1045], [1895, 1045], [1895, 875]], [[1922, 875], [1922, 1045], [1922, 1045], [1922, 875]], [[1948, 875], [1948, 1045], [1962, 1045], [1962, 875]], [[2015, 875], [2015, 1045], [2029, 1045], [2029, 875]], [[2082, 875], [2082, 1045], [2082, 1045], [2082, 875]], [[2122, 875], [2122, 1045], [2135, 1045], [2135, 875]], [[2175, 875], [2175, 1045], [2189, 1045], [2189, 875]], [[2242, 875], [2242, 1045], [2242, 1045], [2242, 875]], [[2295, 875], [2295, 1045], [2295, 1045], [2295, 875]], [[2336, 875], [2336, 1045], [2336, 1045], [2336, 875]], [[2349, 875], [2349, 1045], [2349, 1045], [2349, 875]], [[2362, 875], [2362, 1045], [2376, 1045], [2376, 875]], [[2389, 875], [2389, 1045], [2389, 1045], [2389, 875]], [[2402, 875], [2402, 1045], [2416, 1045], [2416, 875]], [[2429, 875], [2429, 1045], [2442, 1045], [2442, 875]], [[2456, 875], [2456, 1045], [2469, 1045], [2469, 875]], [[2522, 875], [2522, 1045], [2536, 1045], [2536, 875]], [[2549, 875], [2549, 1045], [2562, 1045], [2562, 875]], [[2589, 875], [2589, 1045], [2602, 1045], [2602, 875]], [[2629, 875], [2629, 1045], [2629, 1045], [2629, 875]], [[2642, 875], [2642, 1045], [2656, 1045], [2656, 875]], [[2669, 875], [2669, 1045], [2669, 1045], [2669, 875]], [[2776, 875], [2776, 1045], [2776, 1045], [2776, 875]], [[2803, 875], [2803, 1045], [2803, 1045], [2803, 875]], [[2843, 875], [2843, 1045], [2843, 1045], [2843, 875]], [[2869, 875], [2869, 1045], [2869, 1045], [2869, 875]], [[2896, 875], [2896, 1045], [2896, 1045], [2896, 875]], [[2923, 875], [2923, 1045], [2923, 1045], [2923, 875]], [[2963, 875], [2963, 1045], [2963, 1045], [2963, 875]], [[2989, 875], [2989, 1045], [2989, 1045], [2989, 875]], [[3016, 875], [3016, 1045], [3030, 1045], [3030, 875]], [[3043, 875], [3043, 1045], [3056, 1045], [3056, 875]], [[3123, 875], [3123, 1045], [3123, 1045], [3123, 875]], [[3136, 875], [3136, 1045], [3150, 1045], [3150, 875]], [[3163, 875], [3163, 1045], [3163, 1045], [3163, 875]]], "confidences": [0.9999685287475586, 0.7677904963493347, 0.9990272521972656, 0.9999896287918091, 0.9995161294937134, 0.9926141500473022, 0.9854110479354858, 0.9970456957817078, 0.9999581575393677, 0.9979928731918335, 0.9991545677185059, 0.9992891550064087, 0.9991033673286438, 0.9999771118164062, 0.9999916553497314, 0.6514611840248108, 0.7720828652381897, 0.9889744520187378, 0.9997015595436096, 0.9999628067016602, 0.8422739505767822, 0.9995865225791931, 0.9994408488273621, 0.9979164004325867, 0.9996676445007324, 0.9994599223136902, 0.9910250902175903, 0.9999783039093018, 0.9963022470474243, 0.6243562698364258, 0.9998552799224854, 0.9986860156059265, 0.999666690826416, 0.66583651304245, 0.9677010178565979, 0.9999728202819824, 0.9999947547912598, 0.9995187520980835, 0.9917859435081482, 0.9952231049537659, 0.988452136516571, 0.9948959946632385, 0.997393012046814, 0.984053909778595, 0.9514071345329285, 0.9919347763061523, 0.9954736828804016, 0.535146176815033, 0.9996613264083862, 0.9889037013053894, 0.9973983764648438, 0.7873133420944214, 0.814349353313446, 0.9971019625663757, 0.9976648092269897, 0.9264478087425232, 0.9916608929634094, 0.9994589686393738, 0.9972610473632812, 0.9991005659103394, 0.999413013458252, 0.9994602799415588, 0.9613319039344788, 0.9990511536598206, 0.9996521472930908, 0.7384001612663269, 0.9942810535430908, 0.9455984234809875, 0.9997734427452087, 0.9952616691589355, 0.9989475607872009, 0.9959900975227356, 0.9930391907691956, 0.9999250173568726, 0.998917818069458, 0.6285094618797302, 0.8354631662368774, 0.9813341498374939], "line": {"id": "fc8c2130-6470-4ef8-b1b9-d226bc5b64cd", "bbox": [347, 875, 3203, 1045], "type": "bbox"}}, {"prediction": "\u0627\u0647\u062a\u0644\u0628\u0642\u0648 \u0627\u0647\u0628 \u0627\u0643\u0631\u0628\u062a \u0627\u0647\u064a\u0644\u0627 \u062a\u0631\u0638\u0646\u0648 \u0637\u0641\u0633\u0644\u0627 \u062a\u062d\u062a\u0641\u0648 \u062a\u062d\u0628\u0635\u0654\u0627 \u0627\u0644\u0641 \u0627\u0647\u0628 \u062a\u0638\u0641\u062a\u062d\u0627 \u062f\u0642 \u0628\u064a\u0637 \u0647\u064a\u0641\u0648", "cuts": [[[349, 1045], [349, 1187], [362, 1187], [362, 1045]], [[375, 1045], [375, 1187], [375, 1187], [375, 1045]], [[425, 1045], [425, 1187], [425, 1187], [425, 1045]], [[451, 1045], [451, 1187], [451, 1187], [451, 1045]], [[476, 1045], [476, 1187], [476, 1187], [476, 1045]], [[502, 1045], [502, 1187], [502, 1187], [502, 1045]], [[552, 1045], [552, 1187], [565, 1187], [565, 1045]], [[578, 1045], [578, 1187], [603, 1187], [603, 1045]], [[629, 1045], [629, 1187], [641, 1187], [641, 1045]], [[692, 1045], [692, 1187], [705, 1187], [705, 1045]], [[730, 1045], [730, 1187], [730, 1187], [730, 1045]], [[756, 1045], [756, 1187], [756, 1187], [756, 1045]], [[781, 1045], [781, 1187], [781, 1187], [781, 1045]], [[794, 1045], [794, 1187], [794, 1187], [794, 1045]], [[857, 1045], [857, 1187], [857, 1187], [857, 1045]], [[870, 1045], [870, 1187], [870, 1187], [870, 1045]], [[896, 1045], [896, 1187], [896, 1187], [896, 1045]], [[921, 1045], [921, 1187], [934, 1187], [934, 1045]], [[959, 1045], [959, 1187], [972, 1187], [972, 1045]], [[984, 1045], [984, 1187], [984, 1187], [984, 1045]], [[1023, 1045], [1023, 1187], [1023, 1187], [1023, 1045]], [[1048, 1045], [1048, 1187], [1048, 1187], [1048, 1045]], [[1061, 1045], [1061, 1187], [1073, 1187], [1073, 1045]], [[1086, 1045], [1086, 1187], [1086, 1187], [1086, 1045]], [[1137, 1045], [1137, 1187], [1137, 1187], [1137, 1045]], [[1213, 1045], [1213, 1187], [1213, 1187], [1213, 1045]], [[1239, 1045], [1239, 1187], [1239, 1187], [1239, 1045]], [[1289, 1045], [1289, 1187], [1289, 1187], [1289, 1045]], [[1340, 1045], [1340, 1187], [1340, 1187], [1340, 1045]], [[1366, 1045], [1366, 1187], [1378, 1187], [1378, 1045]], [[1417, 1045], [1417, 1187], [1417, 1187], [1417, 1045]], [[1480, 1045], [1480, 1187], [1480, 1187], [1480, 1045]], [[1518, 1045], [1518, 1187], [1531, 1187], [1531, 1045]], [[1556, 1045], [1556, 1187], [1556, 1187], [1556, 1045]], [[1569, 1045], [1569, 1187], [1582, 1187], [1582, 1045]], [[1594, 1045], [1594, 1187], [1607, 1187], [1607, 1045]], [[1645, 1045], [1645, 1187], [1645, 1187], [1645, 1045]], [[1709, 1045], [1709, 1187], [1709, 1187], [1709, 1045]], [[1760, 1045], [1760, 1187], [1760, 1187], [1760, 1045]], [[1785, 1045], [1785, 1187], [1785, 1187], [1785, 1045]], [[1836, 1045], [1836, 1187], [1836, 1187], [1836, 1045]], [[1861, 1045], [1861, 1187], [1874, 1187], [1874, 1045]], [[1925, 1045], [1925, 1187], [1925, 1187], [1925, 1045]], [[1988, 1045], [1988, 1187], [1988, 1187], [1988, 1045]], [[2039, 1045], [2039, 1187], [2039, 1187], [2039, 1045]], [[2090, 1045], [2090, 1187], [2090, 1187], [2090, 1045]], [[2128, 1045], [2128, 1187], [2128, 1187], [2128, 1045]], [[2141, 1045], [2141, 1187], [2154, 1187], [2154, 1045]], [[2166, 1045], [2166, 1187], [2179, 1187], [2179, 1045]], [[2204, 1045], [2204, 1187], [2204, 1187], [2204, 1045]], [[2243, 1045], [2243, 1187], [2243, 1187], [2243, 1045]], [[2268, 1045], [2268, 1187], [2268, 1187], [2268, 1045]], [[2293, 1045], [2293, 1187], [2306, 1187], [2306, 1045]], [[2319, 1045], [2319, 1187], [2331, 1187], [2331, 1045]], [[2344, 1045], [2344, 1187], [2357, 1187], [2357, 1045]], [[2370, 1045], [2370, 1187], [2370, 1187], [2370, 1045]], [[2395, 1045], [2395, 1187], [2408, 1187], [2408, 1045]], [[2471, 1045], [2471, 1187], [2471, 1187], [2471, 1045]], [[2522, 1045], [2522, 1187], [2522, 1187], [2522, 1045]], [[2586, 1045], [2586, 1187], [2586, 1187], [2586, 1045]], [[2611, 1045], [2611, 1187], [2611, 1187], [2611, 1045]], [[2649, 1045], [2649, 1187], [2649, 1187], [2649, 1045]], [[2700, 1045], [2700, 1187], [2713, 1187], [2713, 1045]], [[2725, 1045], [2725, 1187], [2725, 1187], [2725, 1045]], [[2764, 1045], [2764, 1187], [2776, 1187], [2776, 1045]], [[2789, 1045], [2789, 1187], [2802, 1187], [2802, 1045]], [[2827, 1045], [2827, 1187], [2827, 1187], [2827, 1045]], [[2865, 1045], [2865, 1187], [2878, 1187], [2878, 1045]], [[2929, 1045], [2929, 1187], [2929, 1187], [2929, 1045]], [[2967, 1045], [2967, 1187], [2967, 1187], [2967, 1045]], [[3005, 1045], [3005, 1187], [3030, 1187], [3030, 1045]], [[3056, 1045], [3056, 1187], [3056, 1187], [3056, 1045]], [[3094, 1045], [3094, 1187], [3094, 1187], [3094, 1045]], [[3119, 1045], [3119, 1187], [3119, 1187], [3119, 1045]], [[3170, 1045], [3170, 1187], [3170, 1187], [3170, 1045]]], "confidences": [0.9951897859573364, 0.9994397759437561, 0.9996225833892822, 0.9996881484985352, 0.9991863369941711, 0.522216796875, 0.9999700784683228, 0.9999351501464844, 0.9608615040779114, 0.9998836517333984, 0.9998319149017334, 0.9999574422836304, 0.9995219707489014, 0.9832330346107483, 0.9993361830711365, 0.9289281964302063, 0.9628921747207642, 0.9998667240142822, 0.9999779462814331, 0.9990992546081543, 0.9141392707824707, 0.9998242259025574, 0.9967435002326965, 0.9999244213104248, 0.9998732805252075, 0.9988711476325989, 0.9987514019012451, 0.9988617897033691, 0.6241702437400818, 0.979806125164032, 0.9399409294128418, 0.9999160766601562, 0.9905988574028015, 0.9990541338920593, 0.9999421834945679, 0.960566520690918, 0.9946881532669067, 0.9999477863311768, 0.833644688129425, 0.9959911704063416, 0.9991551637649536, 0.9996606111526489, 0.9877347350120544, 0.9679129123687744, 0.9596376419067383, 0.986365795135498, 0.9459453225135803, 0.9946697354316711, 0.9895763397216797, 0.9849644303321838, 0.903245210647583, 0.7387762665748596, 0.9958617687225342, 0.9985413551330566, 0.9970884919166565, 0.6466483473777771, 0.9444775581359863, 0.8205862045288086, 0.9942649006843567, 0.984862744808197, 0.9972048401832581, 0.8482417464256287, 0.9919762015342712, 0.9672141671180725, 0.9989006519317627, 0.9998776912689209, 0.9994097948074341, 0.9945313334465027, 0.9889154434204102, 0.9952592253684998, 0.999559223651886, 0.99980229139328, 0.9894945025444031, 0.7909385561943054, 0.9917729496955872], "line": {"id": "355dd1af-317b-4282-b778-48a722db18de", "bbox": [349, 1045, 3183, 1187], "type": "bbox"}}, {"prediction": "\u0645\u0639\u0646 \u0644\u0627\u0642 \u0629\u0639\u0627\u0633\u0644\u0627 \u0627\u0640\u0647\u0631\u0636\u062d\u0627 \u0644\u0627\u0642\u0641 \u0643\u0644\u0630 \u0644\u062b\u0645 \u062a\u0639\u0646\u0635 \u062a\u064a\u0633\u0645\u0654\u0627 \u0627\u0644\u0643\u0648 \u0627\u0647\u0639\u0636\u0648\u0645 \u0649\u0644\u0627 \u0627\u0647\u062f\u062f\u0631\u0648", "cuts": [[[342, 1217], [342, 1386], [354, 1386], [354, 1217]], [[404, 1217], [404, 1386], [404, 1386], [404, 1217]], [[428, 1217], [428, 1386], [428, 1386], [428, 1217]], [[453, 1217], [453, 1386], [465, 1386], [465, 1217]], [[527, 1217], [527, 1386], [527, 1386], [527, 1217]], [[539, 1217], [539, 1386], [539, 1386], [539, 1217]], [[564, 1217], [564, 1386], [564, 1386], [564, 1217]], [[589, 1217], [589, 1386], [613, 1386], [613, 1217]], [[638, 1217], [638, 1386], [650, 1386], [650, 1217]], [[675, 1217], [675, 1386], [675, 1386], [675, 1217]], [[712, 1217], [712, 1386], [724, 1386], [724, 1217]], [[761, 1217], [761, 1386], [774, 1386], [774, 1217]], [[786, 1217], [786, 1386], [798, 1386], [798, 1217]], [[811, 1217], [811, 1386], [823, 1386], [823, 1217]], [[835, 1217], [835, 1386], [835, 1386], [835, 1217]], [[860, 1217], [860, 1386], [872, 1386], [872, 1217]], [[909, 1217], [909, 1386], [922, 1386], [922, 1217]], [[1020, 1217], [1020, 1386], [1020, 1386], [1020, 1217]], [[1082, 1217], [1082, 1386], [1082, 1386], [1082, 1217]], [[1119, 1217], [1119, 1386], [1131, 1386], [1131, 1217]], [[1181, 1217], [1181, 1386], [1193, 1386], [1193, 1217]], [[1242, 1217], [1242, 1386], [1255, 1386], [1255, 1217]], [[1267, 1217], [1267, 1386], [1267, 1386], [1267, 1217]], [[1329, 1217], [1329, 1386], [1341, 1386], [1341, 1217]], [[1353, 1217], [1353, 1386], [1366, 1386], [1366, 1217]], [[1390, 1217], [1390, 1386], [1390, 1386], [1390, 1217]], [[1427, 1217], [1427, 1386], [1427, 1386], [1427, 1217]], [[1452, 1217], [1452, 1386], [1452, 1386], [1452, 1217]], [[1501, 1217], [1501, 1386], [1501, 1386], [1501, 1217]], [[1551, 1217], [1551, 1386], [1563, 1386], [1563, 1217]], [[1575, 1217], [1575, 1386], [1588, 1386], [1588, 1217]], [[1612, 1217], [1612, 1386], [1625, 1386], [1625, 1217]], [[1686, 1217], [1686, 1386], [1699, 1386], [1699, 1217]], [[1711, 1217], [1711, 1386], [1723, 1386], [1723, 1217]], [[1736, 1217], [1736, 1386], [1748, 1386], [1748, 1217]], [[1773, 1217], [1773, 1386], [1785, 1386], [1785, 1217]], [[1822, 1217], [1822, 1386], [1835, 1386], [1835, 1217]], [[1884, 1217], [1884, 1386], [1884, 1386], [1884, 1217]], [[1921, 1217], [1921, 1386], [1933, 1386], [1933, 1217]], [[1970, 1217], [1970, 1386], [1983, 1386], [1983, 1217]], [[2007, 1217], [2007, 1386], [2020, 1386], [2020, 1217]], [[2069, 1217], [2069, 1386], [2069, 1386], [2069, 1217]], [[2118, 1217], [2118, 1386], [2118, 1386], [2118, 1217]], [[2155, 1217], [2155, 1386], [2168, 1386], [2168, 1217]], [[2192, 1217], [2192, 1386], [2205, 1386], [2205, 1217]], [[2217, 1217], [2217, 1386], [2229, 1386], [2229, 1217]], [[2242, 1217], [2242, 1386], [2254, 1386], [2254, 1217]], [[2266, 1217], [2266, 1386], [2279, 1386], [2279, 1217]], [[2316, 1217], [2316, 1386], [2328, 1386], [2328, 1217]], [[2353, 1217], [2353, 1386], [2365, 1386], [2365, 1217]], [[2377, 1217], [2377, 1386], [2377, 1386], [2377, 1217]], [[2439, 1217], [2439, 1386], [2439, 1386], [2439, 1217]], [[2464, 1217], [2464, 1386], [2476, 1386], [2476, 1217]], [[2501, 1217], [2501, 1386], [2501, 1386], [2501, 1217]], [[2525, 1217], [2525, 1386], [2525, 1386], [2525, 1217]], [[2575, 1217], [2575, 1386], [2575, 1386], [2575, 1217]], [[2624, 1217], [2624, 1386], [2624, 1386], [2624, 1217]], [[2698, 1217], [2698, 1386], [2698, 1386], [2698, 1217]], [[2735, 1217], [2735, 1386], [2735, 1386], [2735, 1217]], [[2760, 1217], [2760, 1386], [2772, 1386], [2772, 1217]], [[2821, 1217], [2821, 1386], [2821, 1386], [2821, 1217]], [[2834, 1217], [2834, 1386], [2834, 1386], [2834, 1217]], [[2858, 1217], [2858, 1386], [2858, 1386], [2858, 1217]], [[2871, 1217], [2871, 1386], [2895, 1386], [2895, 1217]], [[2932, 1217], [2932, 1386], [2932, 1386], [2932, 1217]], [[2957, 1217], [2957, 1386], [2957, 1386], [2957, 1217]], [[3019, 1217], [3019, 1386], [3019, 1386], [3019, 1217]], [[3056, 1217], [3056, 1386], [3056, 1386], [3056, 1217]], [[3105, 1217], [3105, 1386], [3105, 1386], [3105, 1217]], [[3154, 1217], [3154, 1386], [3167, 1386], [3167, 1217]]], "confidences": [0.9998668432235718, 0.9939495325088501, 0.9999988079071045, 0.9995810389518738, 0.9973961114883423, 0.9925320744514465, 0.9987910389900208, 0.9998966455459595, 0.9999004602432251, 0.981810450553894, 0.99687659740448, 0.9998045563697815, 0.9998052716255188, 0.9931424856185913, 0.9988383650779724, 0.9999014139175415, 0.8104275465011597, 0.9999496936798096, 0.9994741082191467, 0.9992212057113647, 0.9998238682746887, 0.9998308420181274, 0.9993120431900024, 0.998877227306366, 0.999991774559021, 0.9525014758110046, 0.9995104074478149, 0.9983181953430176, 0.9150962829589844, 0.9546083807945251, 0.9991251826286316, 0.9999608993530273, 0.9821158647537231, 0.9985532164573669, 0.9999796152114868, 0.9997883439064026, 0.9903550148010254, 0.9928650856018066, 0.9961369633674622, 0.9909413456916809, 0.9947617650032043, 0.9631214737892151, 0.9943027496337891, 0.9706187844276428, 0.998685896396637, 0.9429393410682678, 0.9975836277008057, 0.9990416169166565, 0.9978206157684326, 0.9992419481277466, 0.9985764026641846, 0.9849389791488647, 0.9799551367759705, 0.9954046010971069, 0.9584742784500122, 0.9991908669471741, 0.994751513004303, 0.9992371797561646, 0.8995857834815979, 0.99809330701828, 0.999932050704956, 0.8690654039382935, 0.5987728834152222, 0.9988412261009216, 0.6917583346366882, 0.9999560117721558, 0.904447615146637, 0.9634166955947876, 0.9973717927932739, 0.9989099502563477], "line": {"id": "309303ba-7ddf-4f08-bb5f-8487c14139dc", "bbox": [342, 1217, 3179, 1386], "type": "bbox"}}, {"prediction": "\u0630\u0640\u062e\u0646 \u0649\u0631\u0627\u062f \u0646\u0645 \u0646\u0627\u0644\u0641\u0644\u0627 \u062a\u064a\u0628\u0644\u0627 \u0649\u0644\u0627 \u0636\u0645\u0627 \u0647\u0644 \u0644\u0627\u0642\u0641 \u0647\u0645\u062f\u062e \u0636\u0639\u0628 \u0649\u0639\u062f\u062a\u0633\u0627\u0642 \u0646\u064a\u0646\u0645\u0654\u0648\u0645\u0644\u0627 \u0631\u064a\u0645\u0654\u0627\u0627\u064a", "cuts": [[[363, 1386], [363, 1518], [363, 1518], [363, 1386]], [[413, 1386], [413, 1518], [426, 1518], [426, 1386]], [[514, 1386], [514, 1518], [514, 1518], [514, 1386]], [[551, 1386], [551, 1518], [551, 1518], [551, 1386]], [[564, 1386], [564, 1518], [589, 1518], [589, 1386]], [[652, 1386], [652, 1518], [652, 1518], [652, 1386]], [[702, 1386], [702, 1518], [715, 1518], [715, 1386]], [[740, 1386], [740, 1518], [752, 1518], [752, 1386]], [[765, 1386], [765, 1518], [777, 1518], [777, 1386]], [[802, 1386], [802, 1518], [815, 1518], [815, 1386]], [[865, 1386], [865, 1518], [865, 1518], [865, 1386]], [[903, 1386], [903, 1518], [903, 1518], [903, 1386]], [[928, 1386], [928, 1518], [940, 1518], [940, 1386]], [[991, 1386], [991, 1518], [991, 1518], [991, 1386]], [[1041, 1386], [1041, 1518], [1053, 1518], [1053, 1386]], [[1066, 1386], [1066, 1518], [1078, 1518], [1078, 1386]], [[1116, 1386], [1116, 1518], [1116, 1518], [1116, 1386]], [[1141, 1386], [1141, 1518], [1141, 1518], [1141, 1386]], [[1154, 1386], [1154, 1518], [1166, 1518], [1166, 1386]], [[1179, 1386], [1179, 1518], [1191, 1518], [1191, 1386]], [[1229, 1386], [1229, 1518], [1229, 1518], [1229, 1386]], [[1279, 1386], [1279, 1518], [1279, 1518], [1279, 1386]], [[1304, 1386], [1304, 1518], [1304, 1518], [1304, 1386]], [[1329, 1386], [1329, 1518], [1342, 1518], [1342, 1386]], [[1354, 1386], [1354, 1518], [1354, 1518], [1354, 1386]], [[1367, 1386], [1367, 1518], [1380, 1518], [1380, 1386]], [[1417, 1386], [1417, 1518], [1417, 1518], [1417, 1386]], [[1430, 1386], [1430, 1518], [1442, 1518], [1442, 1386]], [[1455, 1386], [1455, 1518], [1467, 1518], [1467, 1386]], [[1480, 1386], [1480, 1518], [1480, 1518], [1480, 1386]], [[1568, 1386], [1568, 1518], [1568, 1518], [1568, 1386]], [[1618, 1386], [1618, 1518], [1631, 1518], [1631, 1386]], [[1668, 1386], [1668, 1518], [1668, 1518], [1668, 1386]], [[1681, 1386], [1681, 1518], [1693, 1518], [1693, 1386]], [[1731, 1386], [1731, 1518], [1743, 1518], [1743, 1386]], [[1769, 1386], [1769, 1518], [1769, 1518], [1769, 1386]], [[1781, 1386], [1781, 1518], [1794, 1518], [1794, 1386]], [[1844, 1386], [1844, 1518], [1844, 1518], [1844, 1386]], [[1869, 1386], [1869, 1518], [1869, 1518], [1869, 1386]], [[1907, 1386], [1907, 1518], [1907, 1518], [1907, 1386]], [[1932, 1386], [1932, 1518], [1932, 1518], [1932, 1386]], [[1957, 1386], [1957, 1518], [1969, 1518], [1969, 1386]], [[1982, 1386], [1982, 1518], [1994, 1518], [1994, 1386]], [[2032, 1386], [2032, 1518], [2032, 1518], [2032, 1386]], [[2082, 1386], [2082, 1518], [2082, 1518], [2082, 1386]], [[2120, 1386], [2120, 1518], [2132, 1518], [2132, 1386]], [[2158, 1386], [2158, 1518], [2170, 1518], [2170, 1386]], [[2245, 1386], [2245, 1518], [2258, 1518], [2258, 1386]], [[2296, 1386], [2296, 1518], [2308, 1518], [2308, 1386]], [[2333, 1386], [2333, 1518], [2333, 1518], [2333, 1386]], [[2358, 1386], [2358, 1518], [2371, 1518], [2371, 1386]], [[2421, 1386], [2421, 1518], [2434, 1518], [2434, 1386]], [[2459, 1386], [2459, 1518], [2459, 1518], [2459, 1386]], [[2521, 1386], [2521, 1518], [2521, 1518], [2521, 1386]], [[2546, 1386], [2546, 1518], [2546, 1518], [2546, 1386]], [[2597, 1386], [2597, 1518], [2597, 1518], [2597, 1386]], [[2622, 1386], [2622, 1518], [2634, 1518], [2634, 1386]], [[2647, 1386], [2647, 1518], [2647, 1518], [2647, 1386]], [[2672, 1386], [2672, 1518], [2697, 1518], [2697, 1386]], [[2735, 1386], [2735, 1518], [2747, 1518], [2747, 1386]], [[2772, 1386], [2772, 1518], [2772, 1518], [2772, 1386]], [[2797, 1386], [2797, 1518], [2810, 1518], [2810, 1386]], [[2835, 1386], [2835, 1518], [2835, 1518], [2835, 1386]], [[2873, 1386], [2873, 1518], [2873, 1518], [2873, 1386]], [[2885, 1386], [2885, 1518], [2898, 1518], [2898, 1386]], [[2910, 1386], [2910, 1518], [2910, 1518], [2910, 1386]], [[2923, 1386], [2923, 1518], [2923, 1518], [2923, 1386]], [[2948, 1386], [2948, 1518], [2961, 1518], [2961, 1386]], [[2973, 1386], [2973, 1518], [2973, 1518], [2973, 1386]], [[3011, 1386], [3011, 1518], [3023, 1518], [3023, 1386]], [[3036, 1386], [3036, 1518], [3036, 1518], [3036, 1386]], [[3073, 1386], [3073, 1518], [3073, 1518], [3073, 1386]], [[3099, 1386], [3099, 1518], [3099, 1518], [3099, 1386]], [[3111, 1386], [3111, 1518], [3111, 1518], [3111, 1386]], [[3136, 1386], [3136, 1518], [3149, 1518], [3149, 1386]], [[3161, 1386], [3161, 1518], [3161, 1518], [3161, 1386]]], "confidences": [0.9999401569366455, 0.9998226761817932, 0.9994499087333679, 0.9997947812080383, 0.9999337196350098, 0.9999203681945801, 0.9999982118606567, 0.9687603116035461, 0.9988839030265808, 0.998324453830719, 0.9755439758300781, 0.9999986886978149, 0.9999879598617554, 0.9918851852416992, 0.8710991144180298, 0.9998831748962402, 0.9799282550811768, 0.9640147686004639, 0.9995965361595154, 0.9998983144760132, 0.9994907379150391, 0.9999008178710938, 0.9999949932098389, 0.9999257326126099, 0.9849360585212708, 0.9992073178291321, 0.9999591112136841, 0.9999978542327881, 0.9979308843612671, 0.9989111423492432, 0.9988147020339966, 0.999931812286377, 0.9295510649681091, 0.9994879961013794, 0.92276930809021, 0.9905250668525696, 0.9945216178894043, 0.997312605381012, 0.9944058656692505, 0.7167887091636658, 0.9777094125747681, 0.9938310384750366, 0.9831866025924683, 0.9466024041175842, 0.9909795522689819, 0.9944062232971191, 0.9905561804771423, 0.9995214939117432, 0.9992606043815613, 0.9838502407073975, 0.9978698492050171, 0.9995675683021545, 0.9971568584442139, 0.9990284442901611, 0.9905042052268982, 0.9607644081115723, 0.9984911680221558, 0.7474943399429321, 0.9998549222946167, 0.9999047517776489, 0.9814210534095764, 0.9995946288108826, 0.999559223651886, 0.9958802461624146, 0.9985283613204956, 0.9995490908622742, 0.9966185092926025, 0.9981649518013, 0.8663971424102783, 0.9913069605827332, 0.9690742492675781, 0.9696444869041443, 0.9100111126899719, 0.9691933393478394, 0.9827510714530945, 0.9762600064277649], "line": {"id": "418e5e37-02e7-45d7-8862-21caf565b075", "bbox": [338, 1386, 3174, 1518], "type": "bbox"}}, {"prediction": "\u062b\u0628\u0644\u064a \u0645\u0644\u0641 \u0647\u0645\u062a\u062e\u0628 \u0647\u064a\u0641 \u0649\u0630\u0644\u0627 \u0637\u0641\u0633\u0644\u0627\u0628 \u0649\u0646\u0654\u064a\u062c\u0644 \u0641\u0627\u0644\u0641\u0644\u0627 \u0642\u0648\u062f\u0646\u0635\u0644\u0627 \u062d\u062a\u0641\u0627 \u0645\u062b \u0647\u062d\u062a\u0641\u0627\u0648 \u064a\u0641\u0632\u0627\u062e \u0646\u0645 \u0647\u062d\u0627\u062a\u0641\u0645", "cuts": [[[361, 1567], [361, 1720], [361, 1720], [361, 1567]], [[413, 1567], [413, 1720], [413, 1720], [413, 1567]], [[439, 1567], [439, 1720], [439, 1720], [439, 1567]], [[465, 1567], [465, 1720], [465, 1720], [465, 1567]], [[491, 1567], [491, 1720], [504, 1720], [504, 1567]], [[517, 1567], [517, 1720], [530, 1720], [530, 1567]], [[543, 1567], [543, 1720], [543, 1720], [543, 1567]], [[556, 1567], [556, 1720], [569, 1720], [569, 1567]], [[582, 1567], [582, 1720], [595, 1720], [595, 1567]], [[621, 1567], [621, 1720], [621, 1720], [621, 1567]], [[660, 1567], [660, 1720], [660, 1720], [660, 1567]], [[699, 1567], [699, 1720], [699, 1720], [699, 1567]], [[725, 1567], [725, 1720], [725, 1720], [725, 1567]], [[764, 1567], [764, 1720], [764, 1720], [764, 1567]], [[777, 1567], [777, 1720], [790, 1720], [790, 1567]], [[816, 1567], [816, 1720], [816, 1720], [816, 1567]], [[855, 1567], [855, 1720], [855, 1720], [855, 1567]], [[881, 1567], [881, 1720], [881, 1720], [881, 1567]], [[907, 1567], [907, 1720], [920, 1720], [920, 1567]], [[972, 1567], [972, 1720], [972, 1720], [972, 1567]], [[1024, 1567], [1024, 1720], [1024, 1720], [1024, 1567]], [[1051, 1567], [1051, 1720], [1051, 1720], [1051, 1567]], [[1077, 1567], [1077, 1720], [1077, 1720], [1077, 1567]], [[1090, 1567], [1090, 1720], [1103, 1720], [1103, 1567]], [[1142, 1567], [1142, 1720], [1155, 1720], [1155, 1567]], [[1207, 1567], [1207, 1720], [1207, 1720], [1207, 1567]], [[1259, 1567], [1259, 1720], [1272, 1720], [1272, 1567]], [[1298, 1567], [1298, 1720], [1311, 1720], [1311, 1567]], [[1324, 1567], [1324, 1720], [1337, 1720], [1337, 1567]], [[1350, 1567], [1350, 1720], [1350, 1720], [1350, 1567]], [[1363, 1567], [1363, 1720], [1376, 1720], [1376, 1567]], [[1415, 1567], [1415, 1720], [1415, 1720], [1415, 1567]], [[1428, 1567], [1428, 1720], [1441, 1720], [1441, 1567]], [[1454, 1567], [1454, 1720], [1454, 1720], [1454, 1567]], [[1467, 1567], [1467, 1720], [1467, 1720], [1467, 1567]], [[1493, 1567], [1493, 1720], [1506, 1720], [1506, 1567]], [[1519, 1567], [1519, 1720], [1519, 1720], [1519, 1567]], [[1545, 1567], [1545, 1720], [1558, 1720], [1558, 1567]], [[1597, 1567], [1597, 1720], [1597, 1720], [1597, 1567]], [[1636, 1567], [1636, 1720], [1662, 1720], [1662, 1567]], [[1675, 1567], [1675, 1720], [1675, 1720], [1675, 1567]], [[1714, 1567], [1714, 1720], [1714, 1720], [1714, 1567]], [[1740, 1567], [1740, 1720], [1740, 1720], [1740, 1567]], [[1753, 1567], [1753, 1720], [1753, 1720], [1753, 1567]], [[1766, 1567], [1766, 1720], [1779, 1720], [1779, 1567]], [[1831, 1567], [1831, 1720], [1831, 1720], [1831, 1567]], [[1883, 1567], [1883, 1720], [1883, 1720], [1883, 1567]], [[1935, 1567], [1935, 1720], [1935, 1720], [1935, 1567]], [[1961, 1567], [1961, 1720], [1961, 1720], [1961, 1567]], [[2013, 1567], [2013, 1720], [2013, 1720], [2013, 1567]], [[2052, 1567], [2052, 1720], [2052, 1720], [2052, 1567]], [[2065, 1567], [2065, 1720], [2078, 1720], [2078, 1567]], [[2091, 1567], [2091, 1720], [2104, 1720], [2104, 1567]], [[2130, 1567], [2130, 1720], [2130, 1720], [2130, 1567]], [[2182, 1567], [2182, 1720], [2182, 1720], [2182, 1567]], [[2208, 1567], [2208, 1720], [2208, 1720], [2208, 1567]], [[2234, 1567], [2234, 1720], [2247, 1720], [2247, 1567]], [[2260, 1567], [2260, 1720], [2260, 1720], [2260, 1567]], [[2286, 1567], [2286, 1720], [2299, 1720], [2299, 1567]], [[2338, 1567], [2338, 1720], [2338, 1720], [2338, 1567]], [[2364, 1567], [2364, 1720], [2377, 1720], [2377, 1567]], [[2390, 1567], [2390, 1720], [2390, 1720], [2390, 1567]], [[2429, 1567], [2429, 1720], [2429, 1720], [2429, 1567]], [[2482, 1567], [2482, 1720], [2482, 1720], [2482, 1567]], [[2508, 1567], [2508, 1720], [2508, 1720], [2508, 1567]], [[2534, 1567], [2534, 1720], [2534, 1720], [2534, 1567]], [[2586, 1567], [2586, 1720], [2586, 1720], [2586, 1567]], [[2612, 1567], [2612, 1720], [2625, 1720], [2625, 1567]], [[2651, 1567], [2651, 1720], [2651, 1720], [2651, 1567]], [[2664, 1567], [2664, 1720], [2664, 1720], [2664, 1567]], [[2716, 1567], [2716, 1720], [2716, 1720], [2716, 1567]], [[2742, 1567], [2742, 1720], [2742, 1720], [2742, 1567]], [[2768, 1567], [2768, 1720], [2781, 1720], [2781, 1567]], [[2807, 1567], [2807, 1720], [2820, 1720], [2820, 1567]], [[2859, 1567], [2859, 1720], [2859, 1720], [2859, 1567]], [[2898, 1567], [2898, 1720], [2898, 1720], [2898, 1567]], [[2924, 1567], [2924, 1720], [2937, 1720], [2937, 1567]], [[2963, 1567], [2963, 1720], [2963, 1720], [2963, 1567]], [[3002, 1567], [3002, 1720], [3002, 1720], [3002, 1567]], [[3054, 1567], [3054, 1720], [3054, 1720], [3054, 1567]], [[3080, 1567], [3080, 1720], [3080, 1720], [3080, 1567]], [[3119, 1567], [3119, 1720], [3119, 1720], [3119, 1567]], [[3145, 1567], [3145, 1720], [3158, 1720], [3158, 1567]]], "confidences": [0.9997847676277161, 0.8071998953819275, 0.9448097944259644, 0.5688155293464661, 0.9998739957809448, 0.9982267022132874, 0.9191160798072815, 0.9526958465576172, 0.999830961227417, 0.9999995231628418, 0.9993177652359009, 0.7347162365913391, 0.9999439716339111, 0.9998359680175781, 0.9999669790267944, 0.9836472868919373, 0.7263768315315247, 0.9997736811637878, 0.977462887763977, 0.9863080382347107, 0.9985411167144775, 0.9811128377914429, 0.8683425784111023, 0.9999358654022217, 0.9999024868011475, 0.9963384866714478, 0.9992992877960205, 0.9999573230743408, 0.9997846484184265, 0.9697093963623047, 0.9807730913162231, 0.9946768283843994, 0.9997909665107727, 0.9734904170036316, 0.9997913241386414, 0.998504638671875, 0.9990155696868896, 0.9989411234855652, 0.54173743724823, 0.9961016178131104, 0.9981348514556885, 0.9947880506515503, 0.9791303277015686, 0.9969891905784607, 0.9995549321174622, 0.8724766969680786, 0.9847140908241272, 0.9845319390296936, 0.9821130037307739, 0.9790477156639099, 0.838432252407074, 0.8714025616645813, 0.9906243681907654, 0.9986967444419861, 0.9988054037094116, 0.9993483424186707, 0.9957486987113953, 0.8649066090583801, 0.9977350234985352, 0.9995262622833252, 0.9965477585792542, 0.9975600242614746, 0.8291054368019104, 0.9957834482192993, 0.9864495396614075, 0.9921678900718689, 0.9627065658569336, 0.9999135732650757, 0.95207279920578, 0.9991065859794617, 0.9793131947517395, 0.8521793484687805, 0.9974838495254517, 0.9999358654022217, 0.9997324347496033, 0.9997784495353699, 0.9984983205795288, 0.9993114471435547, 0.8725327849388123, 0.9996665716171265, 0.9979007244110107, 0.9954906105995178, 0.9731282591819763], "line": {"id": "54a56c8d-b064-49ff-bda6-5fc0cd5ecec7", "bbox": [335, 1567, 3171, 1720], "type": "bbox"}}, {"prediction": "\u0647\u0640\u062d\u062a\u0641\u0648 \u0647\u0645\u062a\u062e \u0631\u0633\u0643\u0628 \u0631\u0645\u0654\u0627\u0641 \u062f\u064a\u0634\u0631\u0644\u0627 \u0649\u062f\u064a \u0646\u064a\u0628 \u0639\u0636\u0648\u0641 \u0627\u0645\u0648\u062a\u062d\u0645 \u0637\u0641\u0633\u0644\u0627\u0628 \u0621\u0627\u062c \u0646\u0627 \u0645\u0627\u0644\u063a\u0644\u0627", "cuts": [[[332, 1721], [332, 1880], [345, 1880], [345, 1721]], [[384, 1721], [384, 1880], [397, 1880], [397, 1721]], [[501, 1721], [501, 1880], [514, 1880], [514, 1721]], [[553, 1721], [553, 1880], [553, 1880], [553, 1721]], [[579, 1721], [579, 1880], [579, 1880], [579, 1721]], [[631, 1721], [631, 1880], [644, 1880], [644, 1721]], [[657, 1721], [657, 1880], [683, 1880], [683, 1721]], [[709, 1721], [709, 1880], [709, 1880], [709, 1721]], [[748, 1721], [748, 1880], [748, 1880], [748, 1721]], [[787, 1721], [787, 1880], [787, 1880], [787, 1721]], [[826, 1721], [826, 1880], [826, 1880], [826, 1721]], [[865, 1721], [865, 1880], [878, 1880], [878, 1721]], [[917, 1721], [917, 1880], [917, 1880], [917, 1721]], [[956, 1721], [956, 1880], [969, 1880], [969, 1721]], [[1021, 1721], [1021, 1880], [1021, 1880], [1021, 1721]], [[1100, 1721], [1100, 1880], [1100, 1880], [1100, 1721]], [[1126, 1721], [1126, 1880], [1139, 1880], [1139, 1721]], [[1178, 1721], [1178, 1880], [1191, 1880], [1191, 1721]], [[1217, 1721], [1217, 1880], [1217, 1880], [1217, 1721]], [[1243, 1721], [1243, 1880], [1243, 1880], [1243, 1721]], [[1256, 1721], [1256, 1880], [1269, 1880], [1269, 1721]], [[1282, 1721], [1282, 1880], [1282, 1880], [1282, 1721]], [[1308, 1721], [1308, 1880], [1321, 1880], [1321, 1721]], [[1373, 1721], [1373, 1880], [1386, 1880], [1386, 1721]], [[1412, 1721], [1412, 1880], [1412, 1880], [1412, 1721]], [[1451, 1721], [1451, 1880], [1464, 1880], [1464, 1721]], [[1503, 1721], [1503, 1880], [1503, 1880], [1503, 1721]], [[1516, 1721], [1516, 1880], [1529, 1880], [1529, 1721]], [[1542, 1721], [1542, 1880], [1555, 1880], [1555, 1721]], [[1568, 1721], [1568, 1880], [1568, 1880], [1568, 1721]], [[1659, 1721], [1659, 1880], [1659, 1880], [1659, 1721]], [[1711, 1721], [1711, 1880], [1724, 1880], [1724, 1721]], [[1776, 1721], [1776, 1880], [1776, 1880], [1776, 1721]], [[1802, 1721], [1802, 1880], [1815, 1880], [1815, 1721]], [[1841, 1721], [1841, 1880], [1854, 1880], [1854, 1721]], [[1867, 1721], [1867, 1880], [1867, 1880], [1867, 1721]], [[1893, 1721], [1893, 1880], [1893, 1880], [1893, 1721]], [[1919, 1721], [1919, 1880], [1932, 1880], [1932, 1721]], [[1997, 1721], [1997, 1880], [1997, 1880], [1997, 1721]], [[2062, 1721], [2062, 1880], [2062, 1880], [2062, 1721]], [[2127, 1721], [2127, 1880], [2140, 1880], [2140, 1721]], [[2166, 1721], [2166, 1880], [2166, 1880], [2166, 1721]], [[2192, 1721], [2192, 1880], [2205, 1880], [2205, 1721]], [[2244, 1721], [2244, 1880], [2257, 1880], [2257, 1721]], [[2270, 1721], [2270, 1880], [2283, 1880], [2283, 1721]], [[2322, 1721], [2322, 1880], [2335, 1880], [2335, 1721]], [[2361, 1721], [2361, 1880], [2361, 1880], [2361, 1721]], [[2400, 1721], [2400, 1880], [2400, 1880], [2400, 1721]], [[2413, 1721], [2413, 1880], [2413, 1880], [2413, 1721]], [[2452, 1721], [2452, 1880], [2452, 1880], [2452, 1721]], [[2492, 1721], [2492, 1880], [2505, 1880], [2505, 1721]], [[2557, 1721], [2557, 1880], [2557, 1880], [2557, 1721]], [[2609, 1721], [2609, 1880], [2622, 1880], [2622, 1721]], [[2648, 1721], [2648, 1880], [2648, 1880], [2648, 1721]], [[2661, 1721], [2661, 1880], [2674, 1880], [2674, 1721]], [[2687, 1721], [2687, 1880], [2700, 1880], [2700, 1721]], [[2713, 1721], [2713, 1880], [2726, 1880], [2726, 1721]], [[2765, 1721], [2765, 1880], [2765, 1880], [2765, 1721]], [[2791, 1721], [2791, 1880], [2804, 1880], [2804, 1721]], [[2817, 1721], [2817, 1880], [2830, 1880], [2830, 1721]], [[2869, 1721], [2869, 1880], [2882, 1880], [2882, 1721]], [[2908, 1721], [2908, 1880], [2921, 1880], [2921, 1721]], [[2947, 1721], [2947, 1880], [2960, 1880], [2960, 1721]], [[2973, 1721], [2973, 1880], [2986, 1880], [2986, 1721]], [[2999, 1721], [2999, 1880], [3012, 1880], [3012, 1721]], [[3038, 1721], [3038, 1880], [3064, 1880], [3064, 1721]], [[3077, 1721], [3077, 1880], [3077, 1880], [3077, 1721]], [[3103, 1721], [3103, 1880], [3116, 1880], [3116, 1721]], [[3142, 1721], [3142, 1880], [3142, 1880], [3142, 1721]], [[3155, 1721], [3155, 1880], [3168, 1880], [3168, 1721]]], "confidences": [0.9992807507514954, 0.9998190999031067, 0.9999728202819824, 0.9843649864196777, 0.9963064193725586, 0.9997701048851013, 0.9999123811721802, 0.9973879456520081, 0.999208390712738, 0.9719638824462891, 0.9987868666648865, 0.9970434308052063, 0.9997827410697937, 0.9999145269393921, 0.9791185259819031, 0.9905698299407959, 0.9965567588806152, 0.9983978867530823, 0.9999661445617676, 0.9999735355377197, 0.9999608993530273, 0.9998136162757874, 0.9998812675476074, 0.9741519093513489, 0.9999430179595947, 0.9712876081466675, 0.9996782541275024, 0.9999500513076782, 0.9999716281890869, 0.9999657869338989, 0.9887442588806152, 0.9972917437553406, 0.9999973773956299, 0.997856080532074, 0.9842910766601562, 0.9882177710533142, 0.9942337870597839, 0.9974427223205566, 0.8417571187019348, 0.96481853723526, 0.9993478655815125, 0.9817719459533691, 0.8848896622657776, 0.9665166735649109, 0.9880167245864868, 0.9940158128738403, 0.9972080588340759, 0.9924798011779785, 0.999430239200592, 0.9886217713356018, 0.9994122982025146, 0.9545918107032776, 0.9984832406044006, 0.9997020363807678, 0.9989163875579834, 0.9997730851173401, 0.9998658895492554, 0.9669737815856934, 0.9264388084411621, 0.9989351630210876, 0.9926611185073853, 0.9998636245727539, 0.9986826777458191, 0.9965075850486755, 0.9996894598007202, 0.9975529313087463, 0.9992383718490601, 0.9993176460266113, 0.9744951128959656, 0.9796627163887024], "line": {"id": "f4d8e81c-2263-4b82-8a7f-4ee5afe0205b", "bbox": [332, 1721, 3207, 1880], "type": "bbox"}}, {"prediction": "\u0647\u0628\u0636\u063a \u0646\u0645 \u062f\u064a\u0634\u0631\u0644\u0627 \u0646\u0643\u0633\u0641 \u0628\u064a\u0637\u0644\u0627 \u064a\u0641 \u0629\u0646\u0648\u0641\u062f\u0645 \u0629\u064a\u0648\u0637\u0645 \u0627\u0647\u0644\u0627\u062d \u0647\u064a\u0641 \u0629\u0639\u0627\u0631\u062f\u0644\u0627 \u0649\u0644\u0627 \u0631\u0638\u0646 \u062d\u062a\u0641 \u0627\u0644\u0646", "cuts": [[[331, 1906], [331, 2053], [331, 2053], [331, 1906]], [[370, 1906], [370, 2053], [370, 2053], [370, 1906]], [[409, 1906], [409, 2053], [409, 2053], [409, 1906]], [[473, 1906], [473, 2053], [473, 2053], [473, 1906]], [[512, 1906], [512, 2053], [525, 2053], [525, 1906]], [[563, 1906], [563, 2053], [563, 2053], [563, 1906]], [[602, 1906], [602, 2053], [602, 2053], [602, 1906]], [[628, 1906], [628, 2053], [641, 2053], [641, 1906]], [[679, 1906], [679, 2053], [679, 2053], [679, 1906]], [[705, 1906], [705, 2053], [705, 2053], [705, 1906]], [[757, 1906], [757, 2053], [757, 2053], [757, 1906]], [[795, 1906], [795, 2053], [808, 2053], [808, 1906]], [[821, 1906], [821, 2053], [821, 2053], [821, 1906]], [[834, 1906], [834, 2053], [847, 2053], [847, 1906]], [[860, 1906], [860, 2053], [873, 2053], [873, 1906]], [[924, 1906], [924, 2053], [937, 2053], [937, 1906]], [[976, 1906], [976, 2053], [976, 2053], [976, 1906]], [[1156, 1906], [1156, 2053], [1156, 2053], [1156, 1906]], [[1182, 1906], [1182, 2053], [1195, 2053], [1195, 1906]], [[1221, 1906], [1221, 2053], [1233, 2053], [1233, 1906]], [[1272, 1906], [1272, 2053], [1272, 2053], [1272, 1906]], [[1337, 1906], [1337, 2053], [1337, 2053], [1337, 1906]], [[1362, 1906], [1362, 2053], [1362, 2053], [1362, 1906]], [[1401, 1906], [1401, 2053], [1414, 2053], [1414, 1906]], [[1427, 1906], [1427, 2053], [1427, 2053], [1427, 1906]], [[1440, 1906], [1440, 2053], [1453, 2053], [1453, 1906]], [[1504, 1906], [1504, 2053], [1504, 2053], [1504, 1906]], [[1517, 1906], [1517, 2053], [1530, 2053], [1530, 1906]], [[1556, 1906], [1556, 2053], [1569, 2053], [1569, 1906]], [[1581, 1906], [1581, 2053], [1594, 2053], [1594, 1906]], [[1620, 1906], [1620, 2053], [1620, 2053], [1620, 1906]], [[1659, 1906], [1659, 2053], [1672, 2053], [1672, 1906]], [[1697, 1906], [1697, 2053], [1697, 2053], [1697, 1906]], [[1736, 1906], [1736, 2053], [1749, 2053], [1749, 1906]], [[1775, 1906], [1775, 2053], [1775, 2053], [1775, 1906]], [[1801, 1906], [1801, 2053], [1813, 2053], [1813, 1906]], [[1839, 1906], [1839, 2053], [1839, 2053], [1839, 1906]], [[1865, 1906], [1865, 2053], [1865, 2053], [1865, 1906]], [[1917, 1906], [1917, 2053], [1917, 2053], [1917, 1906]], [[1955, 1906], [1955, 2053], [1955, 2053], [1955, 1906]], [[2007, 1906], [2007, 2053], [2007, 2053], [2007, 1906]], [[2033, 1906], [2033, 2053], [2045, 2053], [2045, 1906]], [[2071, 1906], [2071, 2053], [2071, 2053], [2071, 1906]], [[2097, 1906], [2097, 2053], [2097, 2053], [2097, 1906]], [[2110, 1906], [2110, 2053], [2123, 2053], [2123, 1906]], [[2136, 1906], [2136, 2053], [2149, 2053], [2149, 1906]], [[2174, 1906], [2174, 2053], [2174, 2053], [2174, 1906]], [[2226, 1906], [2226, 2053], [2239, 2053], [2239, 1906]], [[2265, 1906], [2265, 2053], [2265, 2053], [2265, 1906]], [[2290, 1906], [2290, 2053], [2303, 2053], [2303, 1906]], [[2329, 1906], [2329, 2053], [2329, 2053], [2329, 1906]], [[2355, 1906], [2355, 2053], [2368, 2053], [2368, 1906]], [[2393, 1906], [2393, 2053], [2393, 2053], [2393, 1906]], [[2419, 1906], [2419, 2053], [2419, 2053], [2419, 1906]], [[2458, 1906], [2458, 2053], [2471, 2053], [2471, 1906]], [[2509, 1906], [2509, 2053], [2509, 2053], [2509, 1906]], [[2548, 1906], [2548, 2053], [2548, 2053], [2548, 1906]], [[2574, 1906], [2574, 2053], [2587, 2053], [2587, 1906]], [[2600, 1906], [2600, 2053], [2613, 2053], [2613, 1906]], [[2625, 1906], [2625, 2053], [2625, 2053], [2625, 1906]], [[2677, 1906], [2677, 2053], [2677, 2053], [2677, 1906]], [[2690, 1906], [2690, 2053], [2690, 2053], [2690, 1906]], [[2716, 1906], [2716, 2053], [2716, 2053], [2716, 1906]], [[2729, 1906], [2729, 2053], [2741, 2053], [2741, 1906]], [[2780, 1906], [2780, 2053], [2780, 2053], [2780, 1906]], [[2806, 1906], [2806, 2053], [2819, 2053], [2819, 1906]], [[2857, 1906], [2857, 2053], [2857, 2053], [2857, 1906]], [[2870, 1906], [2870, 2053], [2896, 2053], [2896, 1906]], [[2922, 1906], [2922, 2053], [2935, 2053], [2935, 1906]], [[2973, 1906], [2973, 2053], [2973, 2053], [2973, 1906]], [[2999, 1906], [2999, 2053], [2999, 2053], [2999, 1906]], [[3025, 1906], [3025, 2053], [3025, 2053], [3025, 1906]], [[3051, 1906], [3051, 2053], [3051, 2053], [3051, 1906]], [[3128, 1906], [3128, 2053], [3141, 2053], [3141, 1906]], [[3167, 1906], [3167, 2053], [3167, 2053], [3167, 1906]]], "confidences": [0.9159960746765137, 0.9976181387901306, 0.9996975660324097, 0.9877948760986328, 0.9998071789741516, 0.9193847179412842, 0.9977598190307617, 0.9999691247940063, 0.5213192105293274, 0.9998345375061035, 0.9993784427642822, 0.9995831847190857, 0.999843955039978, 0.9999074935913086, 0.6370336413383484, 0.9995335340499878, 0.9989326596260071, 0.9860919117927551, 0.999936580657959, 0.9919663667678833, 0.9993558526039124, 0.9862826466560364, 0.8228899836540222, 0.9858511090278625, 0.9946306943893433, 0.9999549388885498, 0.999767005443573, 0.9996095299720764, 0.9999788999557495, 0.9988093376159668, 0.5167495608329773, 0.9999475479125977, 0.9990980625152588, 0.9999123811721802, 0.6137158870697021, 0.9979343414306641, 0.9267524480819702, 0.7948201894760132, 0.9545791745185852, 0.9082372188568115, 0.9680109024047852, 0.995181143283844, 0.9705617427825928, 0.8799518942832947, 0.9786372184753418, 0.9424921274185181, 0.605963408946991, 0.9994131326675415, 0.9984038472175598, 0.9985394477844238, 0.9992857575416565, 0.9990177154541016, 0.9961357116699219, 0.9946891069412231, 0.9922365546226501, 0.9932458996772766, 0.9726880788803101, 0.9994227886199951, 0.9991672039031982, 0.9998785257339478, 0.999698281288147, 0.9973363280296326, 0.9942309856414795, 0.9929460883140564, 0.8134588599205017, 0.9999004602432251, 0.9500336647033691, 0.999967098236084, 0.9991039633750916, 0.9984264373779297, 0.8896018266677856, 0.7239580750465393, 0.9947216510772705, 0.9903062582015991, 0.8236287832260132], "line": {"id": "1cd9447c-d76c-448d-b261-db779a35a0d2", "bbox": [331, 1906, 3167, 2053], "type": "bbox"}}, {"prediction": "\u0627\u0647\u062f\u0639\u0628 \u0643\u064a\u0644\u0639 \u0642\u062f\u0635\u0627 \u0646\u0644\u0641 \u0627\u062f\u0634\u0627\u0631 \u0641\u0631\u0635\u0646\u0627\u0648 \u0627\u0647\u0646\u0627\u0643\u0645 \u0649\u0644\u0627 \u0627\u0647\u062f\u062f\u0631\u0627 \u0646\u064a\u0637\u0642\u064a \u0646\u0628 \u0649\u0644\u0639\u0644 \u0644\u0627\u0642 \u0645\u0654\u064a", "cuts": [[[334, 2060], [334, 2231], [334, 2231], [334, 2060]], [[360, 2060], [360, 2231], [360, 2231], [360, 2060]], [[425, 2060], [425, 2231], [425, 2231], [425, 2060]], [[451, 2060], [451, 2231], [451, 2231], [451, 2060]], [[477, 2060], [477, 2231], [490, 2231], [490, 2060]], [[503, 2060], [503, 2231], [516, 2231], [516, 2060]], [[569, 2060], [569, 2231], [569, 2231], [569, 2060]], [[621, 2060], [621, 2231], [634, 2231], [634, 2060]], [[647, 2060], [647, 2231], [647, 2231], [647, 2060]], [[673, 2060], [673, 2231], [686, 2231], [686, 2060]], [[712, 2060], [712, 2231], [738, 2231], [738, 2060]], [[803, 2060], [803, 2231], [803, 2231], [803, 2060]], [[842, 2060], [842, 2231], [855, 2231], [855, 2060]], [[894, 2060], [894, 2231], [907, 2231], [907, 2060]], [[946, 2060], [946, 2231], [959, 2231], [959, 2060]], [[972, 2060], [972, 2231], [972, 2231], [972, 2060]], [[1024, 2060], [1024, 2231], [1024, 2231], [1024, 2060]], [[1051, 2060], [1051, 2231], [1064, 2231], [1064, 2060]], [[1077, 2060], [1077, 2231], [1077, 2231], [1077, 2060]], [[1103, 2060], [1103, 2231], [1129, 2231], [1129, 2060]], [[1168, 2060], [1168, 2231], [1181, 2231], [1181, 2060]], [[1220, 2060], [1220, 2231], [1220, 2231], [1220, 2060]], [[1272, 2060], [1272, 2231], [1272, 2231], [1272, 2060]], [[1298, 2060], [1298, 2231], [1311, 2231], [1311, 2060]], [[1350, 2060], [1350, 2231], [1350, 2231], [1350, 2060]], [[1376, 2060], [1376, 2231], [1389, 2231], [1389, 2060]], [[1480, 2060], [1480, 2231], [1480, 2231], [1480, 2060]], [[1520, 2060], [1520, 2231], [1533, 2231], [1533, 2060]], [[1585, 2060], [1585, 2231], [1585, 2231], [1585, 2060]], [[1624, 2060], [1624, 2231], [1624, 2231], [1624, 2060]], [[1650, 2060], [1650, 2231], [1663, 2231], [1663, 2060]], [[1702, 2060], [1702, 2231], [1715, 2231], [1715, 2060]], [[1728, 2060], [1728, 2231], [1754, 2231], [1754, 2060]], [[1767, 2060], [1767, 2231], [1780, 2231], [1780, 2060]], [[1832, 2060], [1832, 2231], [1845, 2231], [1845, 2060]], [[1858, 2060], [1858, 2231], [1871, 2231], [1871, 2060]], [[1884, 2060], [1884, 2231], [1884, 2231], [1884, 2060]], [[1897, 2060], [1897, 2231], [1910, 2231], [1910, 2060]], [[1962, 2060], [1962, 2231], [1962, 2231], [1962, 2060]], [[1989, 2060], [1989, 2231], [2002, 2231], [2002, 2060]], [[2067, 2060], [2067, 2231], [2067, 2231], [2067, 2060]], [[2080, 2060], [2080, 2231], [2080, 2231], [2080, 2060]], [[2106, 2060], [2106, 2231], [2106, 2231], [2106, 2060]], [[2119, 2060], [2119, 2231], [2132, 2231], [2132, 2060]], [[2158, 2060], [2158, 2231], [2158, 2231], [2158, 2060]], [[2184, 2060], [2184, 2231], [2184, 2231], [2184, 2060]], [[2236, 2060], [2236, 2231], [2236, 2231], [2236, 2060]], [[2262, 2060], [2262, 2231], [2275, 2231], [2275, 2060]], [[2314, 2060], [2314, 2231], [2327, 2231], [2327, 2060]], [[2353, 2060], [2353, 2231], [2353, 2231], [2353, 2060]], [[2379, 2060], [2379, 2231], [2392, 2231], [2392, 2060]], [[2431, 2060], [2431, 2231], [2444, 2231], [2444, 2060]], [[2457, 2060], [2457, 2231], [2471, 2231], [2471, 2060]], [[2497, 2060], [2497, 2231], [2497, 2231], [2497, 2060]], [[2549, 2060], [2549, 2231], [2562, 2231], [2562, 2060]], [[2588, 2060], [2588, 2231], [2588, 2231], [2588, 2060]], [[2614, 2060], [2614, 2231], [2627, 2231], [2627, 2060]], [[2679, 2060], [2679, 2231], [2679, 2231], [2679, 2060]], [[2705, 2060], [2705, 2231], [2705, 2231], [2705, 2060]], [[2731, 2060], [2731, 2231], [2744, 2231], [2744, 2060]], [[2848, 2060], [2848, 2231], [2848, 2231], [2848, 2060]], [[2861, 2060], [2861, 2231], [2861, 2231], [2861, 2060]], [[2887, 2060], [2887, 2231], [2887, 2231], [2887, 2060]], [[2913, 2060], [2913, 2231], [2926, 2231], [2926, 2060]], [[2939, 2060], [2939, 2231], [2953, 2231], [2953, 2060]], [[3005, 2060], [3005, 2231], [3005, 2231], [3005, 2060]], [[3018, 2060], [3018, 2231], [3031, 2231], [3031, 2060]], [[3044, 2060], [3044, 2231], [3044, 2231], [3044, 2060]], [[3070, 2060], [3070, 2231], [3083, 2231], [3083, 2060]], [[3096, 2060], [3096, 2231], [3109, 2231], [3109, 2060]], [[3135, 2060], [3135, 2231], [3135, 2231], [3135, 2060]], [[3148, 2060], [3148, 2231], [3148, 2231], [3148, 2060]]], "confidences": [0.9586123824119568, 0.9986465573310852, 0.9566709995269775, 0.9922924041748047, 0.999371349811554, 0.999819815158844, 0.9982818365097046, 0.9999407529830933, 0.9542492032051086, 0.9999266862869263, 0.9977983236312866, 0.9082127213478088, 0.9984015822410583, 0.9999021291732788, 0.9999748468399048, 0.9999212026596069, 0.9956596493721008, 0.9997978806495667, 0.9995704293251038, 0.9999994039535522, 0.9999769926071167, 0.5398281216621399, 0.9999560117721558, 0.9999827146530151, 0.678408682346344, 0.999976634979248, 0.9999359846115112, 0.9980989098548889, 0.9837391376495361, 0.8357751369476318, 0.9999740123748779, 0.9798765182495117, 0.9975171089172363, 0.99134761095047, 0.9869094491004944, 0.8972664475440979, 0.9946538209915161, 0.9883899688720703, 0.9977121353149414, 0.9916154742240906, 0.9904273748397827, 0.9942137598991394, 0.9822350144386292, 0.9995124340057373, 0.6970008015632629, 0.9945922493934631, 0.9990953207015991, 0.9915691018104553, 0.9982545971870422, 0.9470371603965759, 0.9988258481025696, 0.9982693195343018, 0.9856593608856201, 0.9323335886001587, 0.9999984502792358, 0.9984018206596375, 0.9993857145309448, 0.9998714923858643, 0.6906755566596985, 0.9985949397087097, 0.994672954082489, 0.9955617189407349, 0.9956024885177612, 0.9990137815475464, 0.9867492318153381, 0.9986513257026672, 0.9989423155784607, 0.6353587508201599, 0.996551513671875, 0.9758750200271606, 0.8564420342445374, 0.5611870884895325], "line": {"id": "6cc9b689-db87-48a8-9782-5edff5a1fdaa", "bbox": [334, 2060, 3161, 2231], "type": "bbox"}}, {"prediction": "\u0648\u062d\" \u0628\u0631\u0636\u0641 \u0637\u0648\u0633 \u0641\u0644\u0627 \u0647\u0628 \u0649\u0639\u0627\u0633\u0644\u0627 \u0628\u0631\u0636\u0628 \u0645\u062f\u0642\u062a\u0648 \u0629\u064a\u0646\u0633 \u0629\u0632\u064a\u0627\u062c\u0628 \u0639\u0628\u062a\u064a \u0646\u0627 \u0631\u0645\u0654\u0627\u0648\u064b \u0627\u064a\u0639\u0627\u0633", "cuts": [[[354, 2227], [354, 2386], [354, 2386], [354, 2227]], [[393, 2227], [393, 2386], [406, 2386], [406, 2227]], [[459, 2227], [459, 2386], [459, 2386], [459, 2227]], [[472, 2227], [472, 2386], [486, 2386], [486, 2227]], [[551, 2227], [551, 2386], [551, 2386], [551, 2227]], [[617, 2227], [617, 2386], [631, 2386], [631, 2227]], [[670, 2227], [670, 2386], [670, 2386], [670, 2227]], [[710, 2227], [710, 2386], [710, 2386], [710, 2227]], [[736, 2227], [736, 2386], [763, 2386], [763, 2227]], [[815, 2227], [815, 2386], [815, 2386], [815, 2227]], [[881, 2227], [881, 2386], [881, 2386], [881, 2227]], [[921, 2227], [921, 2386], [934, 2386], [934, 2227]], [[961, 2227], [961, 2386], [987, 2386], [987, 2227]], [[1079, 2227], [1079, 2386], [1093, 2386], [1093, 2227]], [[1106, 2227], [1106, 2386], [1119, 2386], [1119, 2227]], [[1132, 2227], [1132, 2386], [1132, 2386], [1132, 2227]], [[1145, 2227], [1145, 2386], [1159, 2386], [1159, 2227]], [[1198, 2227], [1198, 2386], [1198, 2386], [1198, 2227]], [[1225, 2227], [1225, 2386], [1225, 2386], [1225, 2227]], [[1251, 2227], [1251, 2386], [1264, 2386], [1264, 2227]], [[1304, 2227], [1304, 2386], [1304, 2386], [1304, 2227]], [[1330, 2227], [1330, 2386], [1343, 2386], [1343, 2227]], [[1383, 2227], [1383, 2386], [1383, 2386], [1383, 2227]], [[1409, 2227], [1409, 2386], [1423, 2386], [1423, 2227]], [[1449, 2227], [1449, 2386], [1462, 2386], [1462, 2227]], [[1475, 2227], [1475, 2386], [1475, 2386], [1475, 2227]], [[1489, 2227], [1489, 2386], [1502, 2386], [1502, 2227]], [[1581, 2227], [1581, 2386], [1581, 2386], [1581, 2227]], [[1634, 2227], [1634, 2386], [1647, 2386], [1647, 2227]], [[1687, 2227], [1687, 2386], [1687, 2386], [1687, 2227]], [[1726, 2227], [1726, 2386], [1739, 2386], [1739, 2227]], [[1753, 2227], [1753, 2386], [1766, 2386], [1766, 2227]], [[1805, 2227], [1805, 2386], [1819, 2386], [1819, 2227]], [[1871, 2227], [1871, 2386], [1871, 2386], [1871, 2227]], [[1898, 2227], [1898, 2386], [1911, 2386], [1911, 2227]], [[1937, 2227], [1937, 2386], [1937, 2386], [1937, 2227]], [[1990, 2227], [1990, 2386], [1990, 2386], [1990, 2227]], [[2017, 2227], [2017, 2386], [2030, 2386], [2030, 2227]], [[2069, 2227], [2069, 2386], [2069, 2386], [2069, 2227]], [[2096, 2227], [2096, 2386], [2096, 2386], [2096, 2227]], [[2122, 2227], [2122, 2386], [2135, 2386], [2135, 2227]], [[2162, 2227], [2162, 2386], [2175, 2386], [2175, 2227]], [[2201, 2227], [2201, 2386], [2215, 2386], [2215, 2227]], [[2267, 2227], [2267, 2386], [2267, 2386], [2267, 2227]], [[2307, 2227], [2307, 2386], [2307, 2386], [2307, 2227]], [[2333, 2227], [2333, 2386], [2333, 2386], [2333, 2227]], [[2373, 2227], [2373, 2386], [2373, 2386], [2373, 2227]], [[2399, 2227], [2399, 2386], [2413, 2386], [2413, 2227]], [[2426, 2227], [2426, 2386], [2439, 2386], [2439, 2227]], [[2452, 2227], [2452, 2386], [2465, 2386], [2465, 2227]], [[2492, 2227], [2492, 2386], [2505, 2386], [2505, 2227]], [[2545, 2227], [2545, 2386], [2545, 2386], [2545, 2227]], [[2571, 2227], [2571, 2386], [2571, 2386], [2571, 2227]], [[2597, 2227], [2597, 2386], [2597, 2386], [2597, 2227]], [[2624, 2227], [2624, 2386], [2637, 2386], [2637, 2227]], [[2690, 2227], [2690, 2386], [2703, 2386], [2703, 2227]], [[2729, 2227], [2729, 2386], [2729, 2386], [2729, 2227]], [[2756, 2227], [2756, 2386], [2756, 2386], [2756, 2227]], [[2795, 2227], [2795, 2386], [2795, 2386], [2795, 2227]], [[2822, 2227], [2822, 2386], [2835, 2386], [2835, 2227]], [[2861, 2227], [2861, 2386], [2861, 2386], [2861, 2227]], [[2875, 2227], [2875, 2386], [2875, 2386], [2875, 2227]], [[2927, 2227], [2927, 2386], [2927, 2386], [2927, 2227]], [[2941, 2227], [2941, 2386], [2941, 2386], [2941, 2227]], [[2954, 2227], [2954, 2386], [2967, 2386], [2967, 2227]], [[2993, 2227], [2993, 2386], [3006, 2386], [3006, 2227]], [[3033, 2227], [3033, 2386], [3033, 2386], [3033, 2227]], [[3046, 2227], [3046, 2386], [3059, 2386], [3059, 2227]], [[3099, 2227], [3099, 2386], [3099, 2386], [3099, 2227]], [[3138, 2227], [3138, 2386], [3152, 2386], [3152, 2227]]], "confidences": [0.9823002219200134, 0.9972136616706848, 0.9999020099639893, 0.9994245767593384, 0.9984127283096313, 0.9963169097900391, 0.9989890456199646, 0.8085134625434875, 0.9999579191207886, 0.9999361038208008, 0.9942615032196045, 0.9278876185417175, 0.9998903274536133, 0.999955415725708, 0.9999262094497681, 0.9999407529830933, 0.9999767541885376, 0.9984294772148132, 0.8924553990364075, 0.9984814524650574, 0.9999494552612305, 0.9997356534004211, 0.9999189376831055, 0.9939833283424377, 0.9999998807907104, 0.9999184608459473, 0.9999300241470337, 0.573874831199646, 0.9986876845359802, 0.9068862199783325, 0.9941669702529907, 0.999953031539917, 0.997863233089447, 0.7316004037857056, 0.9987077713012695, 0.9907311797142029, 0.9943513870239258, 0.9962025284767151, 0.9970322847366333, 0.9568605422973633, 0.9899909496307373, 0.8733225464820862, 0.9993151426315308, 0.7688072919845581, 0.9994139671325684, 0.9989153146743774, 0.5057005286216736, 0.9989703893661499, 0.9991733431816101, 0.9928190112113953, 0.9984594583511353, 0.7554934024810791, 0.9958826303482056, 0.9795031547546387, 0.9996199607849121, 0.9911338686943054, 0.9956367611885071, 0.9094319939613342, 0.9807215929031372, 0.9925562739372253, 0.8968151211738586, 0.7551785707473755, 0.9919329285621643, 0.9729509353637695, 0.9989374279975891, 0.9944745898246765, 0.9989200830459595, 0.9993528723716736, 0.9896401166915894, 0.9964278340339661], "line": {"id": "a43b40bb-088e-4263-80ad-eacd02545773", "bbox": [327, 2227, 3165, 2386], "type": "bbox"}}, {"prediction": ". \u0643\u0644\u0630 \u064a\u0641 \u062a\u0627\u0645\u0641 \u0637\u0648\u0633 \u0629\u0627\u0645\u0633\u0645\u062e", "cuts": [[[2264, 2402], [2264, 2531], [2264, 2531], [2264, 2402]], [[2302, 2402], [2302, 2531], [2302, 2531], [2302, 2402]], [[2340, 2402], [2340, 2531], [2353, 2531], [2353, 2402]], [[2391, 2402], [2391, 2531], [2403, 2531], [2403, 2402]], [[2416, 2402], [2416, 2531], [2429, 2531], [2429, 2402]], [[2454, 2402], [2454, 2531], [2467, 2531], [2467, 2402]], [[2492, 2402], [2492, 2531], [2492, 2531], [2492, 2402]], [[2505, 2402], [2505, 2531], [2505, 2531], [2505, 2402]], [[2543, 2402], [2543, 2531], [2543, 2531], [2543, 2402]], [[2594, 2402], [2594, 2531], [2594, 2531], [2594, 2402]], [[2632, 2402], [2632, 2531], [2632, 2531], [2632, 2402]], [[2644, 2402], [2644, 2531], [2657, 2531], [2657, 2402]], [[2695, 2402], [2695, 2531], [2695, 2531], [2695, 2402]], [[2720, 2402], [2720, 2531], [2733, 2531], [2733, 2402]], [[2771, 2402], [2771, 2531], [2771, 2531], [2771, 2402]], [[2847, 2402], [2847, 2531], [2847, 2531], [2847, 2402]], [[2898, 2402], [2898, 2531], [2898, 2531], [2898, 2402]], [[2936, 2402], [2936, 2531], [2936, 2531], [2936, 2402]], [[2961, 2402], [2961, 2531], [2961, 2531], [2961, 2402]], [[3012, 2402], [3012, 2531], [3012, 2531], [3012, 2402]], [[3025, 2402], [3025, 2531], [3037, 2531], [3037, 2402]], [[3075, 2402], [3075, 2531], [3088, 2531], [3088, 2402]], [[3101, 2402], [3101, 2531], [3101, 2531], [3101, 2402]], [[3126, 2402], [3126, 2531], [3139, 2531], [3139, 2402]]], "confidences": [0.9456377625465393, 0.9999704360961914, 0.9999499320983887, 0.9995260238647461, 0.9999178647994995, 0.9999415874481201, 0.9920778870582581, 0.9997991919517517, 0.9995096921920776, 0.999977707862854, 0.8690007925033569, 0.9649189710617065, 0.9999690055847168, 0.9999949932098389, 0.9907584190368652, 0.9840313196182251, 0.9416587948799133, 0.998769223690033, 0.9915293455123901, 0.967819094657898, 0.9989644289016724, 0.9990310668945312, 0.9262909889221191, 0.9966443777084351], "line": {"id": "c8d2000e-5c3d-4401-adc6-7597ab2ef2b7", "bbox": [2264, 2402, 3164, 2531], "type": "bbox"}}, {"prediction": "\u062d\u0633\u0645 \u064a\u0641 \u0627\u0646\u0628\u0627\u062d\u0654\u0627 \u0646\u064a\u0628 \u0629\u064a\u0627\u0648\u0631\u0644\u0627 \u062a\u0641\u0644\u062a\u062e\u0627 \u0644\u0627\u0642 \u0644\u0636\u0635\u0641\u0644\u0627 \u0646\u0628 \u062f\u0645\u062d \u0646\u0639 \u0644\u064a\u0639\u0627\u0645\u0633\u0627 \u0646\u0628 \u062f\u0645\u0639\u0645 \u0649\u0648\u0631\u0648", "cuts": [[[331, 2564], [331, 2740], [344, 2740], [344, 2564]], [[398, 2564], [398, 2740], [398, 2740], [398, 2564]], [[439, 2564], [439, 2740], [452, 2740], [452, 2564]], [[466, 2564], [466, 2740], [479, 2740], [479, 2564]], [[520, 2564], [520, 2740], [520, 2740], [520, 2564]], [[533, 2564], [533, 2740], [533, 2740], [533, 2564]], [[560, 2564], [560, 2740], [560, 2740], [560, 2564]], [[587, 2564], [587, 2740], [587, 2740], [587, 2564]], [[614, 2564], [614, 2740], [614, 2740], [614, 2564]], [[628, 2564], [628, 2740], [641, 2740], [641, 2564]], [[668, 2564], [668, 2740], [668, 2740], [668, 2564]], [[695, 2564], [695, 2740], [709, 2740], [709, 2564]], [[763, 2564], [763, 2740], [763, 2740], [763, 2564]], [[776, 2564], [776, 2740], [790, 2740], [790, 2564]], [[803, 2564], [803, 2740], [803, 2740], [803, 2564]], [[844, 2564], [844, 2740], [857, 2740], [857, 2564]], [[871, 2564], [871, 2740], [884, 2740], [884, 2564]], [[898, 2564], [898, 2740], [898, 2740], [898, 2564]], [[925, 2564], [925, 2740], [938, 2740], [938, 2564]], [[979, 2564], [979, 2740], [979, 2740], [979, 2564]], [[1006, 2564], [1006, 2740], [1006, 2740], [1006, 2564]], [[1046, 2564], [1046, 2740], [1046, 2740], [1046, 2564]], [[1100, 2564], [1100, 2740], [1100, 2740], [1100, 2564]], [[1141, 2564], [1141, 2740], [1141, 2740], [1141, 2564]], [[1154, 2564], [1154, 2740], [1168, 2740], [1168, 2564]], [[1181, 2564], [1181, 2740], [1181, 2740], [1181, 2564]], [[1195, 2564], [1195, 2740], [1208, 2740], [1208, 2564]], [[1249, 2564], [1249, 2740], [1249, 2740], [1249, 2564]], [[1316, 2564], [1316, 2740], [1316, 2740], [1316, 2564]], [[1343, 2564], [1343, 2740], [1343, 2740], [1343, 2564]], [[1370, 2564], [1370, 2740], [1384, 2740], [1384, 2564]], [[1411, 2564], [1411, 2740], [1424, 2740], [1424, 2564]], [[1465, 2564], [1465, 2740], [1478, 2740], [1478, 2564]], [[1492, 2564], [1492, 2740], [1492, 2740], [1492, 2564]], [[1546, 2564], [1546, 2740], [1559, 2740], [1559, 2564]], [[1573, 2564], [1573, 2740], [1573, 2740], [1573, 2564]], [[1586, 2564], [1586, 2740], [1586, 2740], [1586, 2564]], [[1613, 2564], [1613, 2740], [1627, 2740], [1627, 2564]], [[1667, 2564], [1667, 2740], [1681, 2740], [1681, 2564]], [[1721, 2564], [1721, 2740], [1721, 2740], [1721, 2564]], [[1735, 2564], [1735, 2740], [1735, 2740], [1735, 2564]], [[1775, 2564], [1775, 2740], [1789, 2740], [1789, 2564]], [[1802, 2564], [1802, 2740], [1816, 2740], [1816, 2564]], [[1829, 2564], [1829, 2740], [1829, 2740], [1829, 2564]], [[1843, 2564], [1843, 2740], [1856, 2740], [1856, 2564]], [[1897, 2564], [1897, 2740], [1897, 2740], [1897, 2564]], [[1924, 2564], [1924, 2740], [1924, 2740], [1924, 2564]], [[1951, 2564], [1951, 2740], [1964, 2740], [1964, 2564]], [[2005, 2564], [2005, 2740], [2005, 2740], [2005, 2564]], [[2032, 2564], [2032, 2740], [2045, 2740], [2045, 2564]], [[2059, 2564], [2059, 2740], [2059, 2740], [2059, 2564]], [[2086, 2564], [2086, 2740], [2086, 2740], [2086, 2564]], [[2113, 2564], [2113, 2740], [2113, 2740], [2113, 2564]], [[2153, 2564], [2153, 2740], [2153, 2740], [2153, 2564]], [[2194, 2564], [2194, 2740], [2207, 2740], [2207, 2564]], [[2248, 2564], [2248, 2740], [2248, 2740], [2248, 2564]], [[2275, 2564], [2275, 2740], [2288, 2740], [2288, 2564]], [[2302, 2564], [2302, 2740], [2315, 2740], [2315, 2564]], [[2356, 2564], [2356, 2740], [2356, 2740], [2356, 2564]], [[2369, 2564], [2369, 2740], [2383, 2740], [2383, 2564]], [[2410, 2564], [2410, 2740], [2423, 2740], [2423, 2564]], [[2450, 2564], [2450, 2740], [2450, 2740], [2450, 2564]], [[2464, 2564], [2464, 2740], [2477, 2740], [2477, 2564]], [[2504, 2564], [2504, 2740], [2518, 2740], [2518, 2564]], [[2545, 2564], [2545, 2740], [2545, 2740], [2545, 2564]], [[2572, 2564], [2572, 2740], [2572, 2740], [2572, 2564]], [[2612, 2564], [2612, 2740], [2612, 2740], [2612, 2564]], [[2639, 2564], [2639, 2740], [2653, 2740], [2653, 2564]], [[2666, 2564], [2666, 2740], [2666, 2740], [2666, 2564]], [[2680, 2564], [2680, 2740], [2680, 2740], [2680, 2564]], [[2707, 2564], [2707, 2740], [2720, 2740], [2720, 2564]], [[2761, 2564], [2761, 2740], [2761, 2740], [2761, 2564]], [[2828, 2564], [2828, 2740], [2828, 2740], [2828, 2564]], [[2869, 2564], [2869, 2740], [2882, 2740], [2882, 2564]], [[2923, 2564], [2923, 2740], [2936, 2740], [2936, 2564]]], "confidences": [0.9999998807907104, 0.9929130673408508, 0.9938241243362427, 0.9778679609298706, 0.9086365699768066, 0.654657781124115, 0.9912302494049072, 0.9998319149017334, 0.9415075182914734, 0.9910994172096252, 0.8468749523162842, 0.991156816482544, 0.9946617484092712, 0.9841130375862122, 0.5371823906898499, 0.9606072902679443, 0.9999836683273315, 0.982523500919342, 0.9999951124191284, 0.9997585415840149, 0.9992431402206421, 0.9998185038566589, 0.8639128804206848, 0.999992847442627, 0.9997803568840027, 0.9999289512634277, 0.9999123811721802, 0.8764679431915283, 0.99874347448349, 0.7210342288017273, 0.9998082518577576, 0.9998107552528381, 0.9988790154457092, 0.9528904557228088, 0.9895849823951721, 0.989848792552948, 0.9913495779037476, 0.9971917271614075, 0.9919770359992981, 0.9953035116195679, 0.9654654860496521, 0.956558108329773, 0.968718945980072, 0.9891232848167419, 0.9995982050895691, 0.5353143811225891, 0.9994182586669922, 0.9978064894676208, 0.9980046153068542, 0.9997578263282776, 0.9991948008537292, 0.999717652797699, 0.999285876750946, 0.9232087731361389, 0.9976062774658203, 0.9995843768119812, 0.9938365817070007, 0.998508870601654, 0.8162130117416382, 0.9771808385848999, 0.9998940229415894, 0.9971707463264465, 0.9978471994400024, 0.9858810901641846, 0.938630223274231, 0.9977301955223083, 0.9997122883796692, 0.99797123670578, 0.5294272303581238, 0.9924471378326416, 0.9994334578514099, 0.9998548030853271, 0.999200165271759, 0.9990027546882629, 0.9875484704971313], "line": {"id": "b994b599-c779-44fd-a687-82f7c6ed4464", "bbox": [317, 2564, 2950, 2740], "type": "bbox"}}, {"prediction": "\u0639\u0628\u0627\u0640\u0635\u0654\u0627\u0644\u0627 \u0649\u0644\u0627 \u0646\u064a\u0628\u0639\u0643\u0644\u0627 \u0646\u0645 \u0645\u0654\u0627 \u0646\u064a\u0628\u0639\u0643\u0644\u0627 \u0649\u0644\u0627 \u0639\u0628\u0627\u0635\u0654\u0627\u0644\u0627 \u0646\u0645 \u0648\u0645\u0654\u0627 \u0621\u0648\u0636\u0648\u0644\u0627 \u0641 \u0646\u064a\u0644\u062c\u0631\u0644\u0627", "cuts": [[[335, 2733], [335, 2890], [335, 2890], [335, 2733]], [[396, 2733], [396, 2890], [396, 2890], [396, 2733]], [[442, 2733], [442, 2890], [442, 2890], [442, 2733]], [[488, 2733], [488, 2890], [519, 2890], [519, 2733]], [[611, 2733], [611, 2890], [611, 2890], [611, 2733]], [[657, 2733], [657, 2890], [657, 2890], [657, 2733]], [[673, 2733], [673, 2890], [673, 2890], [673, 2733]], [[688, 2733], [688, 2890], [704, 2890], [704, 2733]], [[719, 2733], [719, 2890], [734, 2890], [734, 2733]], [[750, 2733], [750, 2890], [750, 2890], [750, 2733]], [[796, 2733], [796, 2890], [796, 2890], [796, 2733]], [[811, 2733], [811, 2890], [827, 2890], [827, 2733]], [[842, 2733], [842, 2890], [842, 2890], [842, 2733]], [[857, 2733], [857, 2890], [873, 2890], [873, 2733]], [[904, 2733], [904, 2890], [904, 2890], [904, 2733]], [[934, 2733], [934, 2890], [934, 2890], [934, 2733]], [[965, 2733], [965, 2890], [965, 2890], [965, 2733]], [[996, 2733], [996, 2890], [996, 2890], [996, 2733]], [[1057, 2733], [1057, 2890], [1057, 2890], [1057, 2733]], [[1119, 2733], [1119, 2890], [1134, 2890], [1134, 2733]], [[1150, 2733], [1150, 2890], [1150, 2890], [1150, 2733]], [[1165, 2733], [1165, 2890], [1180, 2890], [1180, 2733]], [[1288, 2733], [1288, 2890], [1303, 2890], [1303, 2733]], [[1380, 2733], [1380, 2890], [1380, 2890], [1380, 2733]], [[1411, 2733], [1411, 2890], [1426, 2890], [1426, 2733]], [[1442, 2733], [1442, 2890], [1457, 2890], [1457, 2733]], [[1473, 2733], [1473, 2890], [1473, 2890], [1473, 2733]], [[1488, 2733], [1488, 2890], [1503, 2890], [1503, 2733]], [[1519, 2733], [1519, 2890], [1534, 2890], [1534, 2733]], [[1565, 2733], [1565, 2890], [1565, 2890], [1565, 2733]], [[1580, 2733], [1580, 2890], [1596, 2890], [1596, 2733]], [[1626, 2733], [1626, 2890], [1626, 2890], [1626, 2733]], [[1657, 2733], [1657, 2890], [1657, 2890], [1657, 2733]], [[1703, 2733], [1703, 2890], [1719, 2890], [1719, 2733]], [[1780, 2733], [1780, 2890], [1780, 2890], [1780, 2733]], [[1796, 2733], [1796, 2890], [1796, 2890], [1796, 2733]], [[1811, 2733], [1811, 2890], [1826, 2890], [1826, 2733]], [[1857, 2733], [1857, 2890], [1872, 2890], [1872, 2733]], [[1888, 2733], [1888, 2890], [1888, 2890], [1888, 2733]], [[1903, 2733], [1903, 2890], [1919, 2890], [1919, 2733]], [[1934, 2733], [1934, 2890], [1934, 2890], [1934, 2733]], [[1965, 2733], [1965, 2890], [1965, 2890], [1965, 2733]], [[2042, 2733], [2042, 2890], [2042, 2890], [2042, 2733]], [[2072, 2733], [2072, 2890], [2072, 2890], [2072, 2733]], [[2118, 2733], [2118, 2890], [2134, 2890], [2134, 2733]], [[2165, 2733], [2165, 2890], [2180, 2890], [2180, 2733]], [[2195, 2733], [2195, 2890], [2195, 2890], [2195, 2733]], [[2211, 2733], [2211, 2890], [2211, 2890], [2211, 2733]], [[2226, 2733], [2226, 2890], [2241, 2890], [2241, 2733]], [[2257, 2733], [2257, 2890], [2272, 2890], [2272, 2733]], [[2318, 2733], [2318, 2890], [2318, 2890], [2318, 2733]], [[2349, 2733], [2349, 2890], [2349, 2890], [2349, 2733]], [[2380, 2733], [2380, 2890], [2395, 2890], [2395, 2733]], [[2426, 2733], [2426, 2890], [2441, 2890], [2441, 2733]], [[2472, 2733], [2472, 2890], [2472, 2890], [2472, 2733]], [[2503, 2733], [2503, 2890], [2503, 2890], [2503, 2733]], [[2518, 2733], [2518, 2890], [2534, 2890], [2534, 2733]], [[2549, 2733], [2549, 2890], [2549, 2890], [2549, 2733]], [[2580, 2733], [2580, 2890], [2580, 2890], [2580, 2733]], [[2626, 2733], [2626, 2890], [2641, 2890], [2641, 2733]], [[2687, 2733], [2687, 2890], [2687, 2890], [2687, 2733]], [[2749, 2733], [2749, 2890], [2749, 2890], [2749, 2733]], [[2780, 2733], [2780, 2890], [2780, 2890], [2780, 2733]], [[2795, 2733], [2795, 2890], [2811, 2890], [2811, 2733]], [[2826, 2733], [2826, 2890], [2826, 2890], [2826, 2733]], [[2872, 2733], [2872, 2890], [2887, 2890], [2887, 2733]], [[2918, 2733], [2918, 2890], [2918, 2890], [2918, 2733]], [[2949, 2733], [2949, 2890], [2949, 2890], [2949, 2733]], [[2980, 2733], [2980, 2890], [2980, 2890], [2980, 2733]], [[3010, 2733], [3010, 2890], [3010, 2890], [3010, 2733]], [[3041, 2733], [3041, 2890], [3041, 2890], [3041, 2733]], [[3103, 2733], [3103, 2890], [3103, 2890], [3103, 2733]], [[3118, 2733], [3118, 2890], [3133, 2890], [3133, 2733]], [[3149, 2733], [3149, 2890], [3149, 2890], [3149, 2733]]], "confidences": [0.9999692440032959, 0.7431797385215759, 0.9892282485961914, 0.9999510049819946, 0.9351767897605896, 0.9993116855621338, 0.9982556700706482, 0.9992502331733704, 0.9992731213569641, 0.9999591112136841, 0.9965296387672424, 0.9999610185623169, 0.9995737671852112, 0.9993835687637329, 0.987348198890686, 0.7714233994483948, 0.9989540576934814, 0.9985584616661072, 0.9998059868812561, 0.9927629828453064, 0.9998949766159058, 0.9996819496154785, 0.9967392086982727, 0.999603807926178, 0.9831695556640625, 0.9224259257316589, 0.9802579283714294, 0.9334492683410645, 0.9981402158737183, 0.9999240636825562, 0.986011266708374, 0.9975579977035522, 0.9953357577323914, 0.9803675413131714, 0.9984625577926636, 0.9977602958679199, 0.9838416576385498, 0.9906837940216064, 0.9881343245506287, 0.9841576814651489, 0.9998107552528381, 0.9991499185562134, 0.9434433579444885, 0.9854111671447754, 0.8520838618278503, 0.9964721202850342, 0.9900435209274292, 0.9503771066665649, 0.9993019104003906, 0.9988412261009216, 0.99639892578125, 0.8105504512786865, 0.9876804351806641, 0.9993699193000793, 0.921359121799469, 0.9604810476303101, 0.995456337928772, 0.9368835687637329, 0.9467335343360901, 0.9949937462806702, 0.999894380569458, 0.9988865256309509, 0.9930035471916199, 0.9975302815437317, 0.9954912066459656, 0.824739933013916, 0.9803107380867004, 0.98244708776474, 0.9932101368904114, 0.9977071285247803, 0.5027340054512024, 0.9766203165054321, 0.9856435060501099, 0.9869322180747986], "line": {"id": "c990a4e6-7864-4f81-95fd-21d5e2521022", "bbox": [319, 2733, 3149, 2890], "type": "bbox"}}, {"prediction": "\u062f\u0642 \u0627\u0646\u0628\u0627\u062d\u0635\u0654\u0627 \u0646\u0627 \u0643\u0627\u062f\u0641 \u062a\u0644\u0639\u062c \u0645\u0627\u0644\u0633\u0644\u0627 \u0647\u064a\u0644\u0639 \u0649\u0633\u0648\u0645 \u0646\u0633\u062d\u0644\u0627 \u064a\u0627 \u0649\u0644\u0627 \u0646\u064a\u0637\u0642\u064a \u0646\u0628 \u0649\u0644\u0639 \u0628\u062a\u0643\u0641", "cuts": [[[330, 2903], [330, 3080], [343, 3080], [343, 2903]], [[407, 2903], [407, 3080], [407, 3080], [407, 2903]], [[433, 2903], [433, 3080], [446, 3080], [446, 2903]], [[459, 2903], [459, 3080], [472, 3080], [472, 2903]], [[485, 2903], [485, 3080], [497, 3080], [497, 2903]], [[510, 2903], [510, 3080], [510, 3080], [510, 2903]], [[549, 2903], [549, 3080], [549, 3080], [549, 2903]], [[575, 2903], [575, 3080], [588, 3080], [588, 2903]], [[613, 2903], [613, 3080], [613, 3080], [613, 2903]], [[639, 2903], [639, 3080], [652, 3080], [652, 2903]], [[665, 2903], [665, 3080], [665, 3080], [665, 2903]], [[678, 2903], [678, 3080], [691, 3080], [691, 2903]], [[716, 2903], [716, 3080], [729, 3080], [729, 2903]], [[768, 2903], [768, 3080], [768, 3080], [768, 2903]], [[781, 2903], [781, 3080], [807, 3080], [807, 2903]], [[845, 2903], [845, 3080], [845, 3080], [845, 2903]], [[897, 2903], [897, 3080], [897, 3080], [897, 2903]], [[935, 2903], [935, 3080], [948, 3080], [948, 2903]], [[974, 2903], [974, 3080], [974, 3080], [974, 2903]], [[1000, 2903], [1000, 3080], [1013, 3080], [1013, 2903]], [[1051, 2903], [1051, 3080], [1051, 3080], [1051, 2903]], [[1103, 2903], [1103, 3080], [1116, 3080], [1116, 2903]], [[1142, 2903], [1142, 3080], [1142, 3080], [1142, 2903]], [[1180, 2903], [1180, 3080], [1193, 3080], [1193, 2903]], [[1232, 2903], [1232, 3080], [1245, 3080], [1245, 2903]], [[1283, 2903], [1283, 3080], [1296, 3080], [1296, 2903]], [[1335, 2903], [1335, 3080], [1348, 3080], [1348, 2903]], [[1360, 2903], [1360, 3080], [1373, 3080], [1373, 2903]], [[1412, 2903], [1412, 3080], [1425, 3080], [1425, 2903]], [[1438, 2903], [1438, 3080], [1451, 3080], [1451, 2903]], [[1464, 2903], [1464, 3080], [1464, 3080], [1464, 2903]], [[1476, 2903], [1476, 3080], [1489, 3080], [1489, 2903]], [[1502, 2903], [1502, 3080], [1515, 3080], [1515, 2903]], [[1541, 2903], [1541, 3080], [1554, 3080], [1554, 2903]], [[1567, 2903], [1567, 3080], [1579, 3080], [1579, 2903]], [[1592, 2903], [1592, 3080], [1605, 3080], [1605, 2903]], [[1644, 2903], [1644, 3080], [1657, 3080], [1657, 2903]], [[1708, 2903], [1708, 3080], [1708, 3080], [1708, 2903]], [[1747, 2903], [1747, 3080], [1747, 3080], [1747, 2903]], [[1798, 2903], [1798, 3080], [1811, 3080], [1811, 2903]], [[1837, 2903], [1837, 3080], [1837, 3080], [1837, 2903]], [[1863, 2903], [1863, 3080], [1876, 3080], [1876, 2903]], [[1927, 2903], [1927, 3080], [1927, 3080], [1927, 2903]], [[1966, 2903], [1966, 3080], [1979, 3080], [1979, 2903]], [[2017, 2903], [2017, 3080], [2017, 3080], [2017, 2903]], [[2030, 2903], [2030, 3080], [2043, 3080], [2043, 2903]], [[2069, 2903], [2069, 3080], [2082, 3080], [2082, 2903]], [[2095, 2903], [2095, 3080], [2108, 3080], [2108, 2903]], [[2146, 2903], [2146, 3080], [2146, 3080], [2146, 2903]], [[2198, 2903], [2198, 3080], [2211, 3080], [2211, 2903]], [[2223, 2903], [2223, 3080], [2223, 3080], [2223, 2903]], [[2262, 2903], [2262, 3080], [2262, 3080], [2262, 2903]], [[2275, 2903], [2275, 3080], [2288, 3080], [2288, 2903]], [[2301, 2903], [2301, 3080], [2314, 3080], [2314, 2903]], [[2326, 2903], [2326, 3080], [2339, 3080], [2339, 2903]], [[2365, 2903], [2365, 3080], [2378, 3080], [2378, 2903]], [[2404, 2903], [2404, 3080], [2404, 3080], [2404, 2903]], [[2430, 2903], [2430, 3080], [2430, 3080], [2430, 2903]], [[2494, 2903], [2494, 3080], [2494, 3080], [2494, 2903]], [[2520, 2903], [2520, 3080], [2520, 3080], [2520, 2903]], [[2545, 2903], [2545, 3080], [2558, 3080], [2558, 2903]], [[2623, 2903], [2623, 3080], [2623, 3080], [2623, 2903]], [[2649, 2903], [2649, 3080], [2649, 3080], [2649, 2903]], [[2674, 2903], [2674, 3080], [2687, 3080], [2687, 2903]], [[2752, 2903], [2752, 3080], [2752, 3080], [2752, 2903]], [[2764, 2903], [2764, 3080], [2777, 3080], [2777, 2903]], [[2790, 2903], [2790, 3080], [2803, 3080], [2803, 2903]], [[2829, 2903], [2829, 3080], [2842, 3080], [2842, 2903]], [[2893, 2903], [2893, 3080], [2893, 3080], [2893, 2903]], [[2945, 2903], [2945, 3080], [2945, 3080], [2945, 2903]], [[2983, 2903], [2983, 3080], [2983, 3080], [2983, 2903]], [[3138, 2903], [3138, 3080], [3138, 3080], [3138, 2903]]], "confidences": [0.9998844861984253, 0.7102985382080078, 0.9393450021743774, 0.9997884631156921, 0.999976634979248, 0.9990993738174438, 0.9997594952583313, 0.9806336760520935, 0.9991434812545776, 0.999870777130127, 0.999963641166687, 0.9986358284950256, 0.9997819066047668, 0.9902760982513428, 0.9999171495437622, 0.870272159576416, 0.9959033131599426, 0.9999700784683228, 0.9983206391334534, 0.9999897480010986, 0.9983596205711365, 0.9999958276748657, 0.7078837156295776, 0.9993500113487244, 0.9999644756317139, 0.9912440776824951, 0.9898048639297485, 0.9963675737380981, 0.9999985694885254, 0.9996073842048645, 0.9969272017478943, 0.9999234676361084, 0.9996798038482666, 0.9999964237213135, 0.9991588592529297, 0.9990678429603577, 0.9999243021011353, 0.9791718125343323, 0.8421644568443298, 0.9974477291107178, 0.7698737978935242, 0.9559314250946045, 0.9906162619590759, 0.9658488631248474, 0.9968318343162537, 0.9971415400505066, 0.9973932504653931, 0.99928218126297, 0.9969269633293152, 0.9991139769554138, 0.994012176990509, 0.880149781703949, 0.9992927312850952, 0.9991368651390076, 0.9945836663246155, 0.9022614359855652, 0.9830822944641113, 0.9845501780509949, 0.9880629777908325, 0.9992579817771912, 0.9978712797164917, 0.9982649683952332, 0.996843695640564, 0.9984459280967712, 0.9971120357513428, 0.9952387809753418, 0.9999581575393677, 0.9986611604690552, 0.9999819993972778, 0.9977983832359314, 0.5938760638237, 0.49053633213043213], "line": {"id": "e8c7a301-87be-4cbb-b4cd-ca098110a82c", "bbox": [317, 2903, 3151, 3080], "type": "bbox"}}, {"prediction": "\u0646\u0655\u0627 \u062a\u0644\u0639\u0641 \u0647\u064a\u0644\u0639 \u0649\u0644\u0645\u0639 \u0646\u0648\u0643\u064a \u0627\u0645 \u0643\u0637\u062e\u0628 \u0649\u0644\u0627 \u0628\u062a\u0643\u062a \u0646\u0654\u0627 \u062a\u064a\u0654\u0627\u0631 \u0646\u0627\u0641 \u0646\u064a\u0644\u062c\u0631\u0644\u0627 \u062d\u0633\u0645 \u064a\u0641 \u0627\u0648\u0641\u0644\u062a\u062e\u0627", "cuts": [[[328, 3067], [328, 3246], [342, 3246], [342, 3067]], [[357, 3067], [357, 3246], [357, 3246], [357, 3067]], [[371, 3067], [371, 3246], [386, 3246], [386, 3067]], [[400, 3067], [400, 3246], [400, 3246], [400, 3067]], [[444, 3067], [444, 3246], [444, 3246], [444, 3067]], [[502, 3067], [502, 3246], [502, 3246], [502, 3067]], [[531, 3067], [531, 3246], [531, 3246], [531, 3067]], [[560, 3067], [560, 3246], [560, 3246], [560, 3067]], [[589, 3067], [589, 3246], [589, 3246], [589, 3067]], [[604, 3067], [604, 3246], [618, 3246], [618, 3067]], [[647, 3067], [647, 3246], [647, 3246], [647, 3067]], [[676, 3067], [676, 3246], [676, 3246], [676, 3067]], [[691, 3067], [691, 3246], [705, 3246], [705, 3067]], [[735, 3067], [735, 3246], [749, 3246], [749, 3067]], [[822, 3067], [822, 3246], [822, 3246], [822, 3067]], [[836, 3067], [836, 3246], [836, 3246], [836, 3067]], [[851, 3067], [851, 3246], [851, 3246], [851, 3067]], [[880, 3067], [880, 3246], [880, 3246], [880, 3067]], [[923, 3067], [923, 3246], [938, 3246], [938, 3067]], [[967, 3067], [967, 3246], [967, 3246], [967, 3067]], [[1025, 3067], [1025, 3246], [1025, 3246], [1025, 3067]], [[1054, 3067], [1054, 3246], [1054, 3246], [1054, 3067]], [[1098, 3067], [1098, 3246], [1098, 3246], [1098, 3067]], [[1127, 3067], [1127, 3246], [1141, 3246], [1141, 3067]], [[1170, 3067], [1170, 3246], [1185, 3246], [1185, 3067]], [[1200, 3067], [1200, 3246], [1214, 3246], [1214, 3067]], [[1243, 3067], [1243, 3246], [1243, 3246], [1243, 3067]], [[1301, 3067], [1301, 3246], [1301, 3246], [1301, 3067]], [[1359, 3067], [1359, 3246], [1359, 3246], [1359, 3067]], [[1403, 3067], [1403, 3246], [1403, 3246], [1403, 3067]], [[1432, 3067], [1432, 3246], [1432, 3246], [1432, 3067]], [[1461, 3067], [1461, 3246], [1476, 3246], [1476, 3067]], [[1548, 3067], [1548, 3246], [1548, 3246], [1548, 3067]], [[1563, 3067], [1563, 3246], [1563, 3246], [1563, 3067]], [[1577, 3067], [1577, 3246], [1592, 3246], [1592, 3067]], [[1606, 3067], [1606, 3246], [1621, 3246], [1621, 3067]], [[1665, 3067], [1665, 3246], [1665, 3246], [1665, 3067]], [[1723, 3067], [1723, 3246], [1723, 3246], [1723, 3067]], [[1781, 3067], [1781, 3246], [1781, 3246], [1781, 3067]], [[1839, 3067], [1839, 3246], [1839, 3246], [1839, 3067]], [[1868, 3067], [1868, 3246], [1883, 3246], [1883, 3067]], [[1926, 3067], [1926, 3246], [1941, 3246], [1941, 3067]], [[1970, 3067], [1970, 3246], [1970, 3246], [1970, 3067]], [[1984, 3067], [1984, 3246], [1984, 3246], [1984, 3067]], [[1999, 3067], [1999, 3246], [2013, 3246], [2013, 3067]], [[2057, 3067], [2057, 3246], [2057, 3246], [2057, 3067]], [[2115, 3067], [2115, 3246], [2115, 3246], [2115, 3067]], [[2130, 3067], [2130, 3246], [2144, 3246], [2144, 3067]], [[2159, 3067], [2159, 3246], [2159, 3246], [2159, 3067]], [[2202, 3067], [2202, 3246], [2202, 3246], [2202, 3067]], [[2231, 3067], [2231, 3246], [2231, 3246], [2231, 3067]], [[2260, 3067], [2260, 3246], [2275, 3246], [2275, 3067]], [[2304, 3067], [2304, 3246], [2304, 3246], [2304, 3067]], [[2319, 3067], [2319, 3246], [2319, 3246], [2319, 3067]], [[2348, 3067], [2348, 3246], [2362, 3246], [2362, 3067]], [[2391, 3067], [2391, 3246], [2391, 3246], [2391, 3067]], [[2420, 3067], [2420, 3246], [2420, 3246], [2420, 3067]], [[2449, 3067], [2449, 3246], [2449, 3246], [2449, 3067]], [[2478, 3067], [2478, 3246], [2493, 3246], [2493, 3067]], [[2537, 3067], [2537, 3246], [2551, 3246], [2551, 3067]], [[2566, 3067], [2566, 3246], [2566, 3246], [2566, 3067]], [[2580, 3067], [2580, 3246], [2595, 3246], [2595, 3067]], [[2609, 3067], [2609, 3246], [2624, 3246], [2624, 3067]], [[2653, 3067], [2653, 3246], [2653, 3246], [2653, 3067]], [[2711, 3067], [2711, 3246], [2711, 3246], [2711, 3067]], [[2755, 3067], [2755, 3246], [2755, 3246], [2755, 3067]], [[2769, 3067], [2769, 3246], [2784, 3246], [2784, 3067]], [[2827, 3067], [2827, 3246], [2827, 3246], [2827, 3067]], [[2842, 3067], [2842, 3246], [2842, 3246], [2842, 3067]], [[2871, 3067], [2871, 3246], [2871, 3246], [2871, 3067]], [[2900, 3067], [2900, 3246], [2900, 3246], [2900, 3067]], [[2943, 3067], [2943, 3246], [2958, 3246], [2958, 3067]], [[2987, 3067], [2987, 3246], [3002, 3246], [3002, 3067]], [[3016, 3067], [3016, 3246], [3016, 3246], [3016, 3067]], [[3045, 3067], [3045, 3246], [3045, 3246], [3045, 3067]], [[3089, 3067], [3089, 3246], [3089, 3246], [3089, 3067]], [[3132, 3067], [3132, 3246], [3147, 3246], [3147, 3067]]], "confidences": [0.9998571872711182, 0.9720284938812256, 0.9996850490570068, 0.9983483552932739, 0.9983503818511963, 0.9421389102935791, 0.9757440090179443, 0.9998825788497925, 0.995537281036377, 0.9998735189437866, 0.979082465171814, 0.9991683959960938, 0.8312473297119141, 0.9998272061347961, 0.9998739957809448, 0.9941480159759521, 0.6946954131126404, 0.9902309775352478, 0.99941086769104, 0.9953650236129761, 0.9976621866226196, 0.9999786615371704, 0.6234442591667175, 0.9998052716255188, 0.9999556541442871, 0.9997043013572693, 0.9890322089195251, 0.9971346855163574, 0.9940102100372314, 0.9995328187942505, 0.999966025352478, 0.7640908360481262, 0.4993588328361511, 0.9998918771743774, 0.9999830722808838, 0.9678281545639038, 0.9903719425201416, 0.9858986139297485, 0.6294997930526733, 0.971433699131012, 0.9831180572509766, 0.9937307834625244, 0.9823363423347473, 0.9849645495414734, 0.9930417537689209, 0.9968459010124207, 0.9991890788078308, 0.9997627139091492, 0.9964436888694763, 0.8590208292007446, 0.9995020627975464, 0.9917978048324585, 0.9393941760063171, 0.9994710087776184, 0.9996200799942017, 0.6683350205421448, 0.7901033759117126, 0.9907926917076111, 0.9704153537750244, 0.9975791573524475, 0.999360978603363, 0.9991258978843689, 0.9997497200965881, 0.8905563354492188, 0.9997245669364929, 0.9991188645362854, 0.9998225569725037, 0.9893819093704224, 0.997583270072937, 0.9980733394622803, 0.9992850422859192, 0.9999197721481323, 0.9919565916061401, 0.9748324751853943, 0.8973613381385803, 0.9983094930648804, 0.9631760120391846], "line": {"id": "e5df36d3-31b0-4a3c-ba0c-0a3f00af668b", "bbox": [313, 3067, 3147, 3246], "type": "bbox"}}, {"prediction": "\u0621\u0648\u0636\u0648\u0644\u0627 \u064a\u0641 \u0641\u0627\u0644\u062a\u062e\u0655\u0627\u0644\u0627 \u0646\u0645 \u062a\u0631\u0643\u0630 \u0627\u0645 \u062a\u0645\u0647\u0641 \u060c \u0639. \u0646\u0633\u062d\u0644\u0627 \u0648\u0628\u0654\u0627 \u0647\u064a\u0644\u0627 \u0628\u062a\u0643\u0642 \u0649\u0644\u0627\u0639\u062a \u0647\u062a\u0627 \u0621\u0627\u0634", "cuts": [[[318, 3226], [318, 3412], [318, 3412], [318, 3226]], [[375, 3226], [375, 3412], [375, 3412], [375, 3226]], [[418, 3226], [418, 3412], [418, 3412], [418, 3226]], [[489, 3226], [489, 3412], [503, 3412], [503, 3226]], [[517, 3226], [517, 3412], [517, 3412], [517, 3226]], [[546, 3226], [546, 3412], [546, 3412], [546, 3226]], [[560, 3226], [560, 3412], [574, 3412], [574, 3226]], [[603, 3226], [603, 3412], [603, 3412], [603, 3226]], [[617, 3226], [617, 3412], [617, 3412], [617, 3226]], [[646, 3226], [646, 3412], [660, 3412], [660, 3226]], [[745, 3226], [745, 3412], [745, 3412], [745, 3226]], [[774, 3226], [774, 3412], [788, 3412], [788, 3226]], [[802, 3226], [802, 3412], [802, 3412], [802, 3226]], [[831, 3226], [831, 3412], [831, 3412], [831, 3226]], [[873, 3226], [873, 3412], [888, 3412], [888, 3226]], [[930, 3226], [930, 3412], [930, 3412], [930, 3226]], [[945, 3226], [945, 3412], [945, 3412], [945, 3226]], [[959, 3226], [959, 3412], [973, 3412], [973, 3226]], [[987, 3226], [987, 3412], [1001, 3412], [1001, 3226]], [[1016, 3226], [1016, 3412], [1030, 3412], [1030, 3226]], [[1101, 3226], [1101, 3412], [1101, 3412], [1101, 3226]], [[1130, 3226], [1130, 3412], [1144, 3412], [1144, 3226]], [[1172, 3226], [1172, 3412], [1172, 3412], [1172, 3226]], [[1215, 3226], [1215, 3412], [1215, 3412], [1215, 3226]], [[1286, 3226], [1286, 3412], [1286, 3412], [1286, 3226]], [[1315, 3226], [1315, 3412], [1315, 3412], [1315, 3226]], [[1386, 3226], [1386, 3412], [1386, 3412], [1386, 3226]], [[1414, 3226], [1414, 3412], [1443, 3412], [1443, 3226]], [[1471, 3226], [1471, 3412], [1471, 3412], [1471, 3226]], [[1500, 3226], [1500, 3412], [1500, 3412], [1500, 3226]], [[1528, 3226], [1528, 3412], [1542, 3412], [1542, 3226]], [[1585, 3226], [1585, 3412], [1585, 3412], [1585, 3226]], [[1642, 3226], [1642, 3412], [1642, 3412], [1642, 3226]], [[1685, 3226], [1685, 3412], [1685, 3412], [1685, 3226]], [[1727, 3226], [1727, 3412], [1727, 3412], [1727, 3226]], [[1756, 3226], [1756, 3412], [1770, 3412], [1770, 3226]], [[1799, 3226], [1799, 3412], [1799, 3412], [1799, 3226]], [[1827, 3226], [1827, 3412], [1827, 3412], [1827, 3226]], [[1870, 3226], [1870, 3412], [1870, 3412], [1870, 3226]], [[1941, 3226], [1941, 3412], [1941, 3412], [1941, 3226]], [[1969, 3226], [1969, 3412], [1984, 3412], [1984, 3226]], [[2026, 3226], [2026, 3412], [2026, 3412], [2026, 3226]], [[2069, 3226], [2069, 3412], [2083, 3412], [2083, 3226]], [[2112, 3226], [2112, 3412], [2112, 3412], [2112, 3226]], [[2126, 3226], [2126, 3412], [2140, 3412], [2140, 3226]], [[2169, 3226], [2169, 3412], [2183, 3412], [2183, 3226]], [[2197, 3226], [2197, 3412], [2211, 3412], [2211, 3226]], [[2240, 3226], [2240, 3412], [2254, 3412], [2254, 3226]], [[2268, 3226], [2268, 3412], [2268, 3412], [2268, 3226]], [[2297, 3226], [2297, 3412], [2297, 3412], [2297, 3226]], [[2311, 3226], [2311, 3412], [2311, 3412], [2311, 3226]], [[2339, 3226], [2339, 3412], [2354, 3412], [2354, 3226]], [[2382, 3226], [2382, 3412], [2382, 3412], [2382, 3226]], [[2411, 3226], [2411, 3412], [2411, 3412], [2411, 3226]], [[2439, 3226], [2439, 3412], [2439, 3412], [2439, 3226]], [[2453, 3226], [2453, 3412], [2468, 3412], [2468, 3226]], [[2482, 3226], [2482, 3412], [2482, 3412], [2482, 3226]], [[2539, 3226], [2539, 3412], [2539, 3412], [2539, 3226]], [[2596, 3226], [2596, 3412], [2596, 3412], [2596, 3226]], [[2638, 3226], [2638, 3412], [2638, 3412], [2638, 3226]], [[2681, 3226], [2681, 3412], [2681, 3412], [2681, 3226]], [[2710, 3226], [2710, 3412], [2724, 3412], [2724, 3226]], [[2766, 3226], [2766, 3412], [2766, 3412], [2766, 3226]], [[2781, 3226], [2781, 3412], [2781, 3412], [2781, 3226]], [[2795, 3226], [2795, 3412], [2809, 3412], [2809, 3226]], [[2823, 3226], [2823, 3412], [2838, 3412], [2838, 3226]], [[2866, 3226], [2866, 3412], [2866, 3412], [2866, 3226]], [[2880, 3226], [2880, 3412], [2895, 3412], [2895, 3226]], [[2923, 3226], [2923, 3412], [2923, 3412], [2923, 3226]], [[2952, 3226], [2952, 3412], [2952, 3412], [2952, 3226]], [[2994, 3226], [2994, 3412], [2994, 3412], [2994, 3226]], [[3008, 3226], [3008, 3412], [3023, 3412], [3023, 3226]], [[3051, 3226], [3051, 3412], [3051, 3412], [3051, 3226]], [[3080, 3226], [3080, 3412], [3094, 3412], [3094, 3226]], [[3137, 3226], [3137, 3412], [3137, 3412], [3137, 3226]]], "confidences": [0.9989814162254333, 0.9999122619628906, 0.9998594522476196, 0.9999371767044067, 0.9949018955230713, 0.8918391466140747, 0.9331813454627991, 0.9998503923416138, 0.999738872051239, 0.9999352693557739, 0.9999396800994873, 0.9997422099113464, 0.9998968839645386, 0.999890923500061, 0.9986469149589539, 0.9979827404022217, 0.9983227849006653, 0.9980936646461487, 0.9998340606689453, 0.9999415874481201, 0.9813975095748901, 0.9996932744979858, 0.9956713914871216, 0.9996687173843384, 0.9994198083877563, 0.732080340385437, 0.840719997882843, 0.9999840259552002, 0.9996098875999451, 0.9923226237297058, 0.9988951086997986, 0.5162858963012695, 0.5562438368797302, 0.799801766872406, 0.9747372269630432, 0.9793431758880615, 0.9933470487594604, 0.9947622418403625, 0.9987406134605408, 0.9820605516433716, 0.9616630673408508, 0.9937961101531982, 0.9977521300315857, 0.996338963508606, 0.9950332641601562, 0.8663762807846069, 0.9994631409645081, 0.9986950755119324, 0.8317818641662598, 0.9994366765022278, 0.9611929655075073, 0.9998297691345215, 0.9822288751602173, 0.9975958466529846, 0.9939688444137573, 0.9993873834609985, 0.998565137386322, 0.9918579459190369, 0.9916180968284607, 0.9998064637184143, 0.8910688161849976, 0.9938943982124329, 0.9996296167373657, 0.9683365821838379, 0.8659057021141052, 0.999840497970581, 0.9998772144317627, 0.9978265166282654, 0.9994264841079712, 0.9970901012420654, 0.9989050626754761, 0.9994168281555176, 0.9968239068984985, 0.9972999691963196, 0.8729744553565979], "line": {"id": "3bb7ac42-61d6-4a41-8c37-8b6403c24061", "bbox": [318, 3226, 3151, 3412], "type": "bbox"}}, {"prediction": "\u0644\u063a\u062a\u0648 \u0627\u0654\u064a\u0627\u0644\u062b \u0643\u0647\u062c\u0648 \u0644\u0633\u063a\u062a\u0648 \u0627\u062b\u0627\u0644\u062b \u0642\u0634\u0646\u062a\u0633\u062a\u0648 \u0627\u0627\u0644\u062b \u0636\u0645\u0636\u0645\u062a \u0646\u0654\u0627 \u0643\u0644\u0630 \u064a\u0641 \u0647\u0628\u0643\u0631\u0645\u0653\u0627 \u0649\u0630\u0644\u0627\u0648", "cuts": [[[340, 3404], [340, 3582], [369, 3582], [369, 3404]], [[398, 3404], [398, 3582], [398, 3582], [398, 3404]], [[441, 3404], [441, 3582], [441, 3582], [441, 3404]], [[484, 3404], [484, 3582], [498, 3582], [498, 3404]], [[513, 3404], [513, 3582], [527, 3582], [527, 3404]], [[556, 3404], [556, 3582], [556, 3582], [556, 3404]], [[570, 3404], [570, 3582], [570, 3582], [570, 3404]], [[585, 3404], [585, 3582], [585, 3582], [585, 3404]], [[613, 3404], [613, 3582], [628, 3582], [628, 3404]], [[642, 3404], [642, 3582], [642, 3582], [642, 3404]], [[671, 3404], [671, 3582], [671, 3582], [671, 3404]], [[700, 3404], [700, 3582], [714, 3582], [714, 3404]], [[757, 3404], [757, 3582], [757, 3582], [757, 3404]], [[800, 3404], [800, 3582], [815, 3582], [815, 3404]], [[844, 3404], [844, 3582], [858, 3582], [858, 3404]], [[930, 3404], [930, 3582], [930, 3582], [930, 3404]], [[959, 3404], [959, 3582], [973, 3582], [973, 3404]], [[1016, 3404], [1016, 3582], [1031, 3582], [1031, 3404]], [[1059, 3404], [1059, 3582], [1074, 3582], [1074, 3404]], [[1117, 3404], [1117, 3582], [1117, 3582], [1117, 3404]], [[1146, 3404], [1146, 3582], [1160, 3582], [1160, 3404]], [[1203, 3404], [1203, 3582], [1203, 3582], [1203, 3404]], [[1232, 3404], [1232, 3582], [1246, 3582], [1246, 3404]], [[1261, 3404], [1261, 3582], [1275, 3582], [1275, 3404]], [[1290, 3404], [1290, 3582], [1290, 3582], [1290, 3404]], [[1318, 3404], [1318, 3582], [1333, 3582], [1333, 3404]], [[1347, 3404], [1347, 3582], [1362, 3582], [1362, 3404]], [[1376, 3404], [1376, 3582], [1390, 3582], [1390, 3404]], [[1405, 3404], [1405, 3582], [1419, 3582], [1419, 3404]], [[1462, 3404], [1462, 3582], [1462, 3582], [1462, 3404]], [[1520, 3404], [1520, 3582], [1520, 3582], [1520, 3404]], [[1549, 3404], [1549, 3582], [1549, 3582], [1549, 3404]], [[1577, 3404], [1577, 3582], [1577, 3582], [1577, 3404]], [[1621, 3404], [1621, 3582], [1635, 3582], [1635, 3404]], [[1664, 3404], [1664, 3582], [1664, 3582], [1664, 3404]], [[1707, 3404], [1707, 3582], [1721, 3582], [1721, 3404]], [[1736, 3404], [1736, 3582], [1764, 3582], [1764, 3404]], [[1779, 3404], [1779, 3582], [1793, 3582], [1793, 3404]], [[1836, 3404], [1836, 3582], [1851, 3582], [1851, 3404]], [[1880, 3404], [1880, 3582], [1880, 3582], [1880, 3404]], [[1908, 3404], [1908, 3582], [1908, 3582], [1908, 3404]], [[1923, 3404], [1923, 3582], [1937, 3582], [1937, 3404]], [[2009, 3404], [2009, 3582], [2009, 3582], [2009, 3404]], [[2067, 3404], [2067, 3582], [2067, 3582], [2067, 3404]], [[2124, 3404], [2124, 3582], [2124, 3582], [2124, 3404]], [[2182, 3404], [2182, 3582], [2182, 3582], [2182, 3404]], [[2211, 3404], [2211, 3582], [2211, 3582], [2211, 3404]], [[2239, 3404], [2239, 3582], [2254, 3582], [2254, 3404]], [[2282, 3404], [2282, 3582], [2282, 3582], [2282, 3404]], [[2311, 3404], [2311, 3582], [2311, 3582], [2311, 3404]], [[2326, 3404], [2326, 3582], [2326, 3582], [2326, 3404]], [[2340, 3404], [2340, 3582], [2354, 3582], [2354, 3404]], [[2398, 3404], [2398, 3582], [2398, 3582], [2398, 3404]], [[2455, 3404], [2455, 3582], [2455, 3582], [2455, 3404]], [[2484, 3404], [2484, 3582], [2484, 3582], [2484, 3404]], [[2513, 3404], [2513, 3582], [2513, 3582], [2513, 3404]], [[2556, 3404], [2556, 3582], [2556, 3582], [2556, 3404]], [[2570, 3404], [2570, 3582], [2570, 3582], [2570, 3404]], [[2599, 3404], [2599, 3582], [2613, 3582], [2613, 3404]], [[2628, 3404], [2628, 3582], [2628, 3582], [2628, 3404]], [[2657, 3404], [2657, 3582], [2657, 3582], [2657, 3404]], [[2714, 3404], [2714, 3582], [2714, 3582], [2714, 3404]], [[2772, 3404], [2772, 3582], [2786, 3582], [2786, 3404]], [[2800, 3404], [2800, 3582], [2815, 3582], [2815, 3404]], [[2858, 3404], [2858, 3582], [2858, 3582], [2858, 3404]], [[2872, 3404], [2872, 3582], [2887, 3582], [2887, 3404]], [[2901, 3404], [2901, 3582], [2916, 3582], [2916, 3404]], [[2988, 3404], [2988, 3582], [2988, 3582], [2988, 3404]], [[3031, 3404], [3031, 3582], [3031, 3582], [3031, 3404]], [[3059, 3404], [3059, 3582], [3074, 3582], [3074, 3404]], [[3088, 3404], [3088, 3582], [3088, 3582], [3088, 3404]], [[3131, 3404], [3131, 3582], [3131, 3582], [3131, 3404]]], "confidences": [0.9967783093452454, 0.9999089241027832, 0.6990695595741272, 0.9999850988388062, 0.9994284510612488, 0.9905351996421814, 0.9979711174964905, 0.9925774931907654, 0.9997119307518005, 0.9998630285263062, 0.9991826415061951, 0.9995831847190857, 0.8739675283432007, 0.9986891150474548, 0.9998999834060669, 0.712096631526947, 0.9542328119277954, 0.9998071789741516, 0.9994687438011169, 0.9119349718093872, 0.9997267127037048, 0.9990538954734802, 0.9999830722808838, 0.9995676875114441, 0.9998180270195007, 0.9542503952980042, 0.9904987215995789, 0.9882673621177673, 0.9979777932167053, 0.9933269023895264, 0.9998037219047546, 0.9610075354576111, 0.9995414018630981, 0.9869469404220581, 0.9698469638824463, 0.9878268837928772, 0.9939728379249573, 0.8041937947273254, 0.9983476400375366, 0.792262077331543, 0.9819558262825012, 0.9396706223487854, 0.997104823589325, 0.9705645442008972, 0.9958399534225464, 0.9978986978530884, 0.8801516890525818, 0.9995551705360413, 0.9966424703598022, 0.9960938096046448, 0.9987300038337708, 0.9998194575309753, 0.563930094242096, 0.9453648328781128, 0.9340890049934387, 0.5644081830978394, 0.9911462664604187, 0.9987581968307495, 0.8091545701026917, 0.9992177486419678, 0.9971036314964294, 0.999757707118988, 0.999749481678009, 0.9985652565956116, 0.9988590478897095, 0.9889073371887207, 0.9370191693305969, 0.9869567155838013, 0.5738163590431213, 0.9979482293128967, 0.9877589344978333, 0.9431320428848267], "line": {"id": "35baa9ea-e0c2-4349-8f5f-e1faa768e791", "bbox": [311, 3404, 3146, 3582], "type": "bbox"}}, {"prediction": "\u0631\u0647\u0627\u0638 \u062d\u0633\u0645\u062a\u0648 \u0647\u0644\u0643 \u0643\u0633\u0654\u0627\u0631 \u062d\u0633\u0645\u062a\u0648 \u0646\u064a\u0642\u0641\u0631\u0645\u0644\u0627 \u0649\u0644\u0627 \u0643\u0639\u0628\u0627\u0635\u0654\u0627 \u0646\u0645 \u0643\u062f\u064a \u0644\u0633\u063a\u062a\u0648 \u0643\u062a\u064a\u062d\u0644 \u0631\u0639\u0634", "cuts": [[[321, 3580], [321, 3731], [335, 3731], [335, 3580]], [[363, 3580], [363, 3731], [363, 3731], [363, 3580]], [[405, 3580], [405, 3731], [405, 3731], [405, 3580]], [[434, 3580], [434, 3731], [434, 3731], [434, 3580]], [[476, 3580], [476, 3731], [504, 3731], [504, 3580]], [[546, 3580], [546, 3731], [560, 3731], [560, 3580]], [[616, 3580], [616, 3731], [616, 3731], [616, 3580]], [[644, 3580], [644, 3731], [658, 3731], [658, 3580]], [[672, 3580], [672, 3731], [672, 3731], [672, 3580]], [[729, 3580], [729, 3731], [729, 3731], [729, 3580]], [[757, 3580], [757, 3731], [771, 3731], [771, 3580]], [[785, 3580], [785, 3731], [799, 3731], [799, 3580]], [[813, 3580], [813, 3731], [827, 3731], [827, 3580]], [[841, 3580], [841, 3731], [841, 3731], [841, 3580]], [[883, 3580], [883, 3731], [883, 3731], [883, 3580]], [[925, 3580], [925, 3731], [925, 3731], [925, 3580]], [[995, 3580], [995, 3731], [1010, 3731], [1010, 3580]], [[1024, 3580], [1024, 3731], [1038, 3731], [1038, 3580]], [[1052, 3580], [1052, 3731], [1052, 3731], [1052, 3580]], [[1094, 3580], [1094, 3731], [1094, 3731], [1094, 3580]], [[1122, 3580], [1122, 3731], [1136, 3731], [1136, 3580]], [[1178, 3580], [1178, 3731], [1178, 3731], [1178, 3580]], [[1234, 3580], [1234, 3731], [1248, 3731], [1248, 3580]], [[1262, 3580], [1262, 3731], [1276, 3731], [1276, 3580]], [[1291, 3580], [1291, 3731], [1305, 3731], [1305, 3580]], [[1347, 3580], [1347, 3731], [1361, 3731], [1361, 3580]], [[1375, 3580], [1375, 3731], [1389, 3731], [1389, 3580]], [[1417, 3580], [1417, 3731], [1431, 3731], [1431, 3580]], [[1445, 3580], [1445, 3731], [1459, 3731], [1459, 3580]], [[1501, 3580], [1501, 3731], [1501, 3731], [1501, 3580]], [[1529, 3580], [1529, 3731], [1529, 3731], [1529, 3580]], [[1571, 3580], [1571, 3731], [1586, 3731], [1586, 3580]], [[1600, 3580], [1600, 3731], [1600, 3731], [1600, 3580]], [[1614, 3580], [1614, 3731], [1628, 3731], [1628, 3580]], [[1642, 3580], [1642, 3731], [1642, 3731], [1642, 3580]], [[1656, 3580], [1656, 3731], [1670, 3731], [1670, 3580]], [[1712, 3580], [1712, 3731], [1712, 3731], [1712, 3580]], [[1726, 3580], [1726, 3731], [1726, 3731], [1726, 3580]], [[1754, 3580], [1754, 3731], [1754, 3731], [1754, 3580]], [[1768, 3580], [1768, 3731], [1782, 3731], [1782, 3580]], [[1824, 3580], [1824, 3731], [1824, 3731], [1824, 3580]], [[1881, 3580], [1881, 3731], [1881, 3731], [1881, 3580]], [[1909, 3580], [1909, 3731], [1923, 3731], [1923, 3580]], [[1951, 3580], [1951, 3731], [1951, 3731], [1951, 3580]], [[2007, 3580], [2007, 3731], [2007, 3731], [2007, 3580]], [[2035, 3580], [2035, 3731], [2049, 3731], [2049, 3580]], [[2063, 3580], [2063, 3731], [2063, 3731], [2063, 3580]], [[2077, 3580], [2077, 3731], [2091, 3731], [2091, 3580]], [[2232, 3580], [2232, 3731], [2232, 3731], [2232, 3580]], [[2316, 3580], [2316, 3731], [2330, 3731], [2330, 3580]], [[2358, 3580], [2358, 3731], [2358, 3731], [2358, 3580]], [[2400, 3580], [2400, 3731], [2400, 3731], [2400, 3580]], [[2457, 3580], [2457, 3731], [2457, 3731], [2457, 3580]], [[2485, 3580], [2485, 3731], [2485, 3731], [2485, 3580]], [[2513, 3580], [2513, 3731], [2527, 3731], [2527, 3580]], [[2569, 3580], [2569, 3731], [2569, 3731], [2569, 3580]], [[2611, 3580], [2611, 3731], [2625, 3731], [2625, 3580]], [[2653, 3580], [2653, 3731], [2653, 3731], [2653, 3580]], [[2695, 3580], [2695, 3731], [2695, 3731], [2695, 3580]], [[2737, 3580], [2737, 3731], [2752, 3731], [2752, 3580]], [[2766, 3580], [2766, 3731], [2780, 3731], [2780, 3580]], [[2822, 3580], [2822, 3731], [2822, 3731], [2822, 3580]], [[2878, 3580], [2878, 3731], [2878, 3731], [2878, 3580]], [[2906, 3580], [2906, 3731], [2920, 3731], [2920, 3580]], [[2948, 3580], [2948, 3731], [2948, 3731], [2948, 3580]], [[2962, 3580], [2962, 3731], [2962, 3731], [2962, 3580]], [[3004, 3580], [3004, 3731], [3004, 3731], [3004, 3580]], [[3032, 3580], [3032, 3731], [3047, 3731], [3047, 3580]], [[3075, 3580], [3075, 3731], [3075, 3731], [3075, 3580]], [[3131, 3580], [3131, 3731], [3131, 3731], [3131, 3580]]], "confidences": [0.998375415802002, 0.7084844708442688, 0.9999047517776489, 0.9999986886978149, 0.9975200295448303, 0.9999372959136963, 0.9996757507324219, 0.9996148347854614, 0.9969292283058167, 0.9986764788627625, 0.9608417749404907, 0.9995263814926147, 0.9976219534873962, 0.9999587535858154, 0.9711738228797913, 0.9985242486000061, 0.8398705720901489, 0.9996516704559326, 0.9961230158805847, 0.9993791580200195, 0.9999798536300659, 0.9998527765274048, 0.9999849796295166, 0.9962425231933594, 0.9955328702926636, 0.9989853501319885, 0.999942421913147, 0.9898174405097961, 0.9999264478683472, 0.999687910079956, 0.9997530579566956, 0.9998797178268433, 0.9882998466491699, 0.9634631872177124, 0.999843955039978, 0.9989407658576965, 0.9994811415672302, 0.9873757362365723, 0.996773898601532, 0.9990653395652771, 0.9880833029747009, 0.9579822421073914, 0.9963617920875549, 0.968079149723053, 0.9967735409736633, 0.9786046743392944, 0.6416178941726685, 0.9990584254264832, 0.99955815076828, 0.9967063069343567, 0.998286783695221, 0.6909951567649841, 0.7128172516822815, 0.9613966941833496, 0.9996551275253296, 0.9983021020889282, 0.999221682548523, 0.9992075562477112, 0.9989655017852783, 0.9996083378791809, 0.9999632835388184, 0.936977207660675, 0.9235370755195618, 0.9997147917747498, 0.667002260684967, 0.9975676536560059, 0.9907772541046143, 0.9969243407249451, 0.9055776000022888, 0.7779210209846497], "line": {"id": "b70a13b9-2e63-4bd6-a567-65320f60f155", "bbox": [307, 3580, 3145, 3731], "type": "bbox"}}, {"prediction": "\u0644\u0635\u0648 \u0627\u0644\u0641 \u0647\u0631\u064a\u063a \u0649\u0644\u0627 \u0643\u0644\u0630 \u0641\u0644\u0627\u062e \u0627\u0644\u0648 \u0627\u0645\u062b\u0627\u0644\u062b \u0646\u064a\u0628\u0639\u0643\u0644\u0627 \u0649\u0644\u0627 \u0643\u064a\u0644\u062c\u0631 \u0644\u0633\u063a\u062a\u0648\u0627\u0645\u0647\u0646\u0637\u0627\u0628\u0648 \u0643\u064a\u0646\u0630\u0627", "cuts": [[[361, 3744], [361, 3918], [375, 3918], [375, 3744]], [[417, 3744], [417, 3918], [417, 3918], [417, 3744]], [[487, 3744], [487, 3918], [487, 3918], [487, 3744]], [[515, 3744], [515, 3918], [529, 3918], [529, 3744]], [[543, 3744], [543, 3918], [557, 3918], [557, 3744]], [[585, 3744], [585, 3918], [599, 3918], [599, 3744]], [[613, 3744], [613, 3918], [613, 3918], [613, 3744]], [[641, 3744], [641, 3918], [655, 3918], [655, 3744]], [[683, 3744], [683, 3918], [683, 3918], [683, 3744]], [[739, 3744], [739, 3918], [739, 3918], [739, 3744]], [[753, 3744], [753, 3918], [767, 3918], [767, 3744]], [[795, 3744], [795, 3918], [795, 3918], [795, 3744]], [[837, 3744], [837, 3918], [837, 3918], [837, 3744]], [[879, 3744], [879, 3918], [879, 3918], [879, 3744]], [[893, 3744], [893, 3918], [907, 3918], [907, 3744]], [[921, 3744], [921, 3918], [921, 3918], [921, 3744]], [[935, 3744], [935, 3918], [963, 3918], [963, 3744]], [[1019, 3744], [1019, 3918], [1019, 3918], [1019, 3744]], [[1075, 3744], [1075, 3918], [1075, 3918], [1075, 3744]], [[1103, 3744], [1103, 3918], [1103, 3918], [1103, 3744]], [[1131, 3744], [1131, 3918], [1145, 3918], [1145, 3744]], [[1215, 3744], [1215, 3918], [1229, 3918], [1229, 3744]], [[1243, 3744], [1243, 3918], [1257, 3918], [1257, 3744]], [[1271, 3744], [1271, 3918], [1285, 3918], [1285, 3744]], [[1299, 3744], [1299, 3918], [1313, 3918], [1313, 3744]], [[1383, 3744], [1383, 3918], [1397, 3918], [1397, 3744]], [[1411, 3744], [1411, 3918], [1439, 3918], [1439, 3744]], [[1453, 3744], [1453, 3918], [1467, 3918], [1467, 3744]], [[1509, 3744], [1509, 3918], [1509, 3918], [1509, 3744]], [[1537, 3744], [1537, 3918], [1537, 3918], [1537, 3744]], [[1551, 3744], [1551, 3918], [1551, 3918], [1551, 3744]], [[1565, 3744], [1565, 3918], [1565, 3918], [1565, 3744]], [[1579, 3744], [1579, 3918], [1579, 3918], [1579, 3744]], [[1607, 3744], [1607, 3918], [1621, 3918], [1621, 3744]], [[1635, 3744], [1635, 3918], [1649, 3918], [1649, 3744]], [[1663, 3744], [1663, 3918], [1663, 3918], [1663, 3744]], [[1691, 3744], [1691, 3918], [1719, 3918], [1719, 3744]], [[1747, 3744], [1747, 3918], [1761, 3918], [1761, 3744]], [[1775, 3744], [1775, 3918], [1789, 3918], [1789, 3744]], [[1803, 3744], [1803, 3918], [1817, 3918], [1817, 3744]], [[1845, 3744], [1845, 3918], [1845, 3918], [1845, 3744]], [[1873, 3744], [1873, 3918], [1873, 3918], [1873, 3744]], [[1943, 3744], [1943, 3918], [1957, 3918], [1957, 3744]], [[1971, 3744], [1971, 3918], [1971, 3918], [1971, 3744]], [[1985, 3744], [1985, 3918], [1999, 3918], [1999, 3744]], [[2041, 3744], [2041, 3918], [2041, 3918], [2041, 3744]], [[2055, 3744], [2055, 3918], [2055, 3918], [2055, 3744]], [[2083, 3744], [2083, 3918], [2083, 3918], [2083, 3744]], [[2097, 3744], [2097, 3918], [2111, 3918], [2111, 3744]], [[2153, 3744], [2153, 3918], [2153, 3918], [2153, 3744]], [[2209, 3744], [2209, 3918], [2209, 3918], [2209, 3744]], [[2237, 3744], [2237, 3918], [2237, 3918], [2237, 3744]], [[2265, 3744], [2265, 3918], [2279, 3918], [2279, 3744]], [[2335, 3744], [2335, 3918], [2349, 3918], [2349, 3744]], [[2363, 3744], [2363, 3918], [2377, 3918], [2377, 3744]], [[2419, 3744], [2419, 3918], [2433, 3918], [2433, 3744]], [[2475, 3744], [2475, 3918], [2475, 3918], [2475, 3744]], [[2517, 3744], [2517, 3918], [2517, 3918], [2517, 3744]], [[2545, 3744], [2545, 3918], [2545, 3918], [2545, 3744]], [[2601, 3744], [2601, 3918], [2601, 3918], [2601, 3744]], [[2643, 3744], [2643, 3918], [2643, 3918], [2643, 3744]], [[2657, 3744], [2657, 3918], [2671, 3918], [2671, 3744]], [[2699, 3744], [2699, 3918], [2713, 3918], [2713, 3744]], [[2741, 3744], [2741, 3918], [2741, 3918], [2741, 3744]], [[2769, 3744], [2769, 3918], [2769, 3918], [2769, 3744]], [[2811, 3744], [2811, 3918], [2825, 3918], [2825, 3744]], [[2839, 3744], [2839, 3918], [2839, 3918], [2839, 3744]], [[2881, 3744], [2881, 3918], [2895, 3918], [2895, 3744]], [[2923, 3744], [2923, 3918], [2923, 3918], [2923, 3744]], [[2965, 3744], [2965, 3918], [2979, 3918], [2979, 3744]], [[3021, 3744], [3021, 3918], [3035, 3918], [3035, 3744]], [[3049, 3744], [3049, 3918], [3049, 3918], [3049, 3744]], [[3077, 3744], [3077, 3918], [3091, 3918], [3091, 3744]], [[3119, 3744], [3119, 3918], [3133, 3918], [3133, 3744]]], "confidences": [0.9999858140945435, 0.9996674060821533, 0.9778488278388977, 0.999860405921936, 0.9980079531669617, 0.9999980926513672, 0.9997289776802063, 0.9999096393585205, 0.9999042749404907, 0.9987836480140686, 0.999509334564209, 0.8447310328483582, 0.9997413754463196, 0.9830690622329712, 0.9998390674591064, 0.8895362615585327, 0.9999918937683105, 0.9990143775939941, 0.9999878406524658, 0.9991787075996399, 0.9999074935913086, 0.999941349029541, 0.9998675584793091, 0.9998282194137573, 0.99846351146698, 0.9999916553497314, 0.9999760389328003, 0.9508774876594543, 0.9997891783714294, 0.9323558807373047, 0.9861510396003723, 0.9936410784721375, 0.9994382262229919, 0.9971796274185181, 0.9985735416412354, 0.9859241843223572, 0.9663385152816772, 0.9317023158073425, 0.9961659908294678, 0.9577418565750122, 0.9928492307662964, 0.9323335886001587, 0.9990610480308533, 0.9972244501113892, 0.9995347261428833, 0.9952410459518433, 0.9984773993492126, 0.999396800994873, 0.9987291693687439, 0.8243120908737183, 0.9955060482025146, 0.7022139430046082, 0.9865391850471497, 0.9992412328720093, 0.9976450800895691, 0.9810840487480164, 0.9991329312324524, 0.9990897178649902, 0.9992324113845825, 0.998461127281189, 0.9994111061096191, 0.9990944862365723, 0.9991432428359985, 0.9482150077819824, 0.9927623867988586, 0.9994828701019287, 0.953675389289856, 0.9985700845718384, 0.9993718266487122, 0.94927978515625, 0.9973020553588867, 0.9952284097671509, 0.9812739491462708, 0.9950826168060303], "line": {"id": "89d8c033-1838-4339-a7c5-765c50025016", "bbox": [333, 3744, 3133, 3918], "type": "bbox"}}, {"prediction": "\u0649\u0627\u0644\u0648\u0645\u0644\u0627\u0642 \u0645\u062b \u0647\u0641\u0627\u0644\u062e \u0649\u0644\u0639 \u0629\u0628\u0627\u0635\u0639\u0644\u0627 \u0639\u0645\u062c\u0654\u0627 \u0627\u0645 \u0647\u064a\u0641 \u0647\u0644 \u0645\u0633\u0631 \u0645 \u0628\u062c\u0639\u062a \u0646\u064a\u0637\u0642\u064a \u0646\u0628 \u0649\u0644\u0639 \u0649\u0644\u0627 \u0628\u0646\u0627\u062a\u0643\u0644\u0627", "cuts": [[[374, 3912], [374, 4081], [374, 4081], [374, 3912]], [[416, 3912], [416, 4081], [430, 4081], [430, 3912]], [[444, 3912], [444, 4081], [458, 4081], [458, 3912]], [[486, 3912], [486, 4081], [500, 4081], [500, 3912]], [[528, 3912], [528, 4081], [528, 4081], [528, 3912]], [[598, 3912], [598, 4081], [598, 4081], [598, 3912]], [[612, 3912], [612, 4081], [612, 4081], [612, 3912]], [[641, 3912], [641, 4081], [641, 4081], [641, 3912]], [[669, 3912], [669, 4081], [683, 4081], [683, 3912]], [[697, 3912], [697, 4081], [711, 4081], [711, 3912]], [[739, 3912], [739, 4081], [739, 4081], [739, 3912]], [[767, 3912], [767, 4081], [767, 4081], [767, 3912]], [[781, 3912], [781, 4081], [795, 4081], [795, 3912]], [[823, 3912], [823, 4081], [823, 4081], [823, 3912]], [[851, 3912], [851, 4081], [865, 4081], [865, 3912]], [[879, 3912], [879, 4081], [893, 4081], [893, 3912]], [[921, 3912], [921, 4081], [935, 4081], [935, 3912]], [[963, 3912], [963, 4081], [977, 4081], [977, 3912]], [[1019, 3912], [1019, 4081], [1019, 4081], [1019, 3912]], [[1033, 3912], [1033, 4081], [1033, 4081], [1033, 3912]], [[1047, 3912], [1047, 4081], [1061, 4081], [1061, 3912]], [[1089, 3912], [1089, 4081], [1103, 4081], [1103, 3912]], [[1117, 3912], [1117, 4081], [1117, 4081], [1117, 3912]], [[1145, 3912], [1145, 4081], [1145, 4081], [1145, 3912]], [[1173, 3912], [1173, 4081], [1187, 4081], [1187, 3912]], [[1229, 3912], [1229, 4081], [1229, 4081], [1229, 3912]], [[1271, 3912], [1271, 4081], [1285, 4081], [1285, 3912]], [[1313, 3912], [1313, 4081], [1313, 4081], [1313, 3912]], [[1327, 3912], [1327, 4081], [1327, 4081], [1327, 3912]], [[1341, 3912], [1341, 4081], [1356, 4081], [1356, 3912]], [[1370, 3912], [1370, 4081], [1384, 4081], [1384, 3912]], [[1412, 3912], [1412, 4081], [1426, 4081], [1426, 3912]], [[1440, 3912], [1440, 4081], [1454, 4081], [1454, 3912]], [[1482, 3912], [1482, 4081], [1482, 4081], [1482, 3912]], [[1496, 3912], [1496, 4081], [1496, 4081], [1496, 3912]], [[1524, 3912], [1524, 4081], [1524, 4081], [1524, 3912]], [[1538, 3912], [1538, 4081], [1538, 4081], [1538, 3912]], [[1594, 3912], [1594, 4081], [1608, 4081], [1608, 3912]], [[1636, 3912], [1636, 4081], [1650, 4081], [1650, 3912]], [[1664, 3912], [1664, 4081], [1664, 4081], [1664, 3912]], [[1692, 3912], [1692, 4081], [1692, 4081], [1692, 3912]], [[1720, 3912], [1720, 4081], [1720, 4081], [1720, 3912]], [[1748, 3912], [1748, 4081], [1762, 4081], [1762, 3912]], [[1776, 3912], [1776, 4081], [1776, 4081], [1776, 3912]], [[1804, 3912], [1804, 4081], [1818, 4081], [1818, 3912]], [[1832, 3912], [1832, 4081], [1832, 4081], [1832, 3912]], [[1846, 3912], [1846, 4081], [1860, 4081], [1860, 3912]], [[1916, 3912], [1916, 4081], [1916, 4081], [1916, 3912]], [[1972, 3912], [1972, 4081], [1972, 4081], [1972, 3912]], [[1986, 3912], [1986, 4081], [2000, 4081], [2000, 3912]], [[2042, 3912], [2042, 4081], [2042, 4081], [2042, 3912]], [[2084, 3912], [2084, 4081], [2099, 4081], [2099, 3912]], [[2141, 3912], [2141, 4081], [2141, 4081], [2141, 3912]], [[2197, 3912], [2197, 4081], [2211, 4081], [2211, 3912]], [[2253, 3912], [2253, 4081], [2253, 4081], [2253, 3912]], [[2281, 3912], [2281, 4081], [2281, 4081], [2281, 3912]], [[2309, 3912], [2309, 4081], [2323, 4081], [2323, 3912]], [[2351, 3912], [2351, 4081], [2365, 4081], [2365, 3912]], [[2379, 3912], [2379, 4081], [2379, 4081], [2379, 3912]], [[2407, 3912], [2407, 4081], [2421, 4081], [2421, 3912]], [[2463, 3912], [2463, 4081], [2477, 4081], [2477, 3912]], [[2491, 3912], [2491, 4081], [2505, 4081], [2505, 3912]], [[2519, 3912], [2519, 4081], [2519, 4081], [2519, 3912]], [[2547, 3912], [2547, 4081], [2561, 4081], [2561, 3912]], [[2575, 3912], [2575, 4081], [2575, 4081], [2575, 3912]], [[2603, 3912], [2603, 4081], [2617, 4081], [2617, 3912]], [[2687, 3912], [2687, 4081], [2687, 4081], [2687, 3912]], [[2701, 3912], [2701, 4081], [2701, 4081], [2701, 3912]], [[2715, 3912], [2715, 4081], [2729, 4081], [2729, 3912]], [[2771, 3912], [2771, 4081], [2771, 4081], [2771, 3912]], [[2813, 3912], [2813, 4081], [2813, 4081], [2813, 3912]], [[2828, 3912], [2828, 4081], [2842, 4081], [2842, 3912]], [[2856, 3912], [2856, 4081], [2856, 4081], [2856, 3912]], [[2870, 3912], [2870, 4081], [2870, 4081], [2870, 3912]], [[2912, 3912], [2912, 4081], [2912, 4081], [2912, 3912]], [[2926, 3912], [2926, 4081], [2926, 4081], [2926, 3912]], [[2954, 3912], [2954, 4081], [2954, 4081], [2954, 3912]], [[2982, 3912], [2982, 4081], [2982, 4081], [2982, 3912]], [[3024, 3912], [3024, 4081], [3024, 4081], [3024, 3912]], [[3108, 3912], [3108, 4081], [3108, 4081], [3108, 3912]], [[3122, 3912], [3122, 4081], [3136, 4081], [3136, 3912]]], "confidences": [0.991776704788208, 0.9966753721237183, 0.9947142004966736, 0.9186890721321106, 0.9635366797447205, 0.9986220598220825, 0.9777283668518066, 0.9586911797523499, 0.9998502731323242, 0.9988514184951782, 0.9999862909317017, 0.46282950043678284, 0.973861575126648, 0.42882752418518066, 0.9648494124412537, 0.9557760953903198, 0.9976227879524231, 0.5231557488441467, 0.7373040914535522, 0.997160792350769, 0.9977774024009705, 0.9998714923858643, 0.9994800686836243, 0.5984565019607544, 0.9999616146087646, 0.953172504901886, 0.9998903274536133, 0.5577518939971924, 0.6261033415794373, 0.9999628067016602, 0.9987449645996094, 0.9979907274246216, 0.9999592304229736, 0.9994562268257141, 0.776331901550293, 0.9890751838684082, 0.9983356595039368, 0.986653745174408, 0.9932841062545776, 0.9770086407661438, 0.8269332051277161, 0.9864249229431152, 0.9786643981933594, 0.9915361404418945, 0.9968346953392029, 0.9864396452903748, 0.9924086332321167, 0.998105525970459, 0.9923842549324036, 0.9835927486419678, 0.9957876801490784, 0.9960395097732544, 0.9908498525619507, 0.9995176792144775, 0.9677330255508423, 0.9952746629714966, 0.9993299245834351, 0.998761773109436, 0.9985032081604004, 0.9977524876594543, 0.9977297186851501, 0.9998428821563721, 0.9996432065963745, 0.9972556233406067, 0.8950211405754089, 0.982606828212738, 0.9643605351448059, 0.9769435524940491, 0.9995658993721008, 0.9992498755455017, 0.7895783185958862, 0.9948700666427612, 0.8788118362426758, 0.9814590215682983, 0.9998113512992859, 0.8790767788887024, 0.7014104723930359, 0.7737085819244385, 0.9973267316818237, 0.9496884942054749, 0.9877499938011169], "line": {"id": "2f15907b-447d-4609-92ed-05ba4b2b5c27", "bbox": [304, 3912, 3136, 4081], "type": "bbox"}}, {"prediction": "\u0647\u064a\u0644\u0639 \u0627\u0645 \u0641\u0644\u0627\u062e\u064a\u0648 \u062f\u062d\u0644\u0627 \u0627\u0630\u0647 \u0649\u0644\u0639 \u0647\u0648\u0636\u0648 \u064a\u0641 \u0644\u0645\u0639\u064a \u0646\u0627\u0643\u0641 \u0647\u0631\u0645\u0654\u0627 \u0644\u062b\u062a\u0645 \u0627\u0646\u0654\u0627\u0648 \u0644\u0627\u0642 \u0627\u0645\u0628 \u0645\u0644\u0639\u0654\u0627", "cuts": [[[305, 4078], [305, 4239], [305, 4239], [305, 4078]], [[348, 4078], [348, 4239], [348, 4239], [348, 4078]], [[362, 4078], [362, 4239], [376, 4239], [376, 4078]], [[390, 4078], [390, 4239], [404, 4239], [404, 4078]], [[447, 4078], [447, 4239], [447, 4239], [447, 4078]], [[461, 4078], [461, 4239], [475, 4239], [475, 4078]], [[489, 4078], [489, 4239], [489, 4239], [489, 4078]], [[518, 4078], [518, 4239], [532, 4239], [532, 4078]], [[617, 4078], [617, 4239], [617, 4239], [617, 4078]], [[645, 4078], [645, 4239], [645, 4239], [645, 4078]], [[659, 4078], [659, 4239], [674, 4239], [674, 4078]], [[702, 4078], [702, 4239], [702, 4239], [702, 4078]], [[730, 4078], [730, 4239], [744, 4239], [744, 4078]], [[787, 4078], [787, 4239], [801, 4239], [801, 4078]], [[815, 4078], [815, 4239], [830, 4239], [830, 4078]], [[872, 4078], [872, 4239], [872, 4239], [872, 4078]], [[900, 4078], [900, 4239], [900, 4239], [900, 4078]], [[915, 4078], [915, 4239], [929, 4239], [929, 4078]], [[957, 4078], [957, 4239], [971, 4239], [971, 4078]], [[985, 4078], [985, 4239], [1000, 4239], [1000, 4078]], [[1028, 4078], [1028, 4239], [1042, 4239], [1042, 4078]], [[1085, 4078], [1085, 4239], [1085, 4239], [1085, 4078]], [[1113, 4078], [1113, 4239], [1113, 4239], [1113, 4078]], [[1156, 4078], [1156, 4239], [1170, 4239], [1170, 4078]], [[1198, 4078], [1198, 4239], [1198, 4239], [1198, 4078]], [[1212, 4078], [1212, 4239], [1212, 4239], [1212, 4078]], [[1241, 4078], [1241, 4239], [1241, 4239], [1241, 4078]], [[1283, 4078], [1283, 4239], [1297, 4239], [1297, 4078]], [[1311, 4078], [1311, 4239], [1311, 4239], [1311, 4078]], [[1397, 4078], [1397, 4239], [1397, 4239], [1397, 4078]], [[1439, 4078], [1439, 4239], [1453, 4239], [1453, 4078]], [[1524, 4078], [1524, 4239], [1524, 4239], [1524, 4078]], [[1552, 4078], [1552, 4239], [1552, 4239], [1552, 4078]], [[1595, 4078], [1595, 4239], [1595, 4239], [1595, 4078]], [[1609, 4078], [1609, 4239], [1609, 4239], [1609, 4078]], [[1638, 4078], [1638, 4239], [1652, 4239], [1652, 4078]], [[1694, 4078], [1694, 4239], [1694, 4239], [1694, 4078]], [[1723, 4078], [1723, 4239], [1723, 4239], [1723, 4078]], [[1765, 4078], [1765, 4239], [1765, 4239], [1765, 4078]], [[1793, 4078], [1793, 4239], [1793, 4239], [1793, 4078]], [[1822, 4078], [1822, 4239], [1836, 4239], [1836, 4078]], [[1978, 4078], [1978, 4239], [1978, 4239], [1978, 4078]], [[2049, 4078], [2049, 4239], [2063, 4239], [2063, 4078]], [[2077, 4078], [2077, 4239], [2077, 4239], [2077, 4078]], [[2120, 4078], [2120, 4239], [2120, 4239], [2120, 4078]], [[2148, 4078], [2148, 4239], [2162, 4239], [2162, 4078]], [[2205, 4078], [2205, 4239], [2205, 4239], [2205, 4078]], [[2247, 4078], [2247, 4239], [2261, 4239], [2261, 4078]], [[2290, 4078], [2290, 4239], [2290, 4239], [2290, 4078]], [[2304, 4078], [2304, 4239], [2318, 4239], [2318, 4078]], [[2332, 4078], [2332, 4239], [2332, 4239], [2332, 4078]], [[2346, 4078], [2346, 4239], [2361, 4239], [2361, 4078]], [[2403, 4078], [2403, 4239], [2417, 4239], [2417, 4078]], [[2431, 4078], [2431, 4239], [2446, 4239], [2446, 4078]], [[2474, 4078], [2474, 4239], [2474, 4239], [2474, 4078]], [[2488, 4078], [2488, 4239], [2502, 4239], [2502, 4078]], [[2531, 4078], [2531, 4239], [2531, 4239], [2531, 4078]], [[2545, 4078], [2545, 4239], [2559, 4239], [2559, 4078]], [[2573, 4078], [2573, 4239], [2573, 4239], [2573, 4078]], [[2601, 4078], [2601, 4239], [2601, 4239], [2601, 4078]], [[2616, 4078], [2616, 4239], [2616, 4239], [2616, 4078]], [[2672, 4078], [2672, 4239], [2672, 4239], [2672, 4078]], [[2701, 4078], [2701, 4239], [2701, 4239], [2701, 4078]], [[2757, 4078], [2757, 4239], [2757, 4239], [2757, 4078]], [[2772, 4078], [2772, 4239], [2772, 4239], [2772, 4078]], [[2786, 4078], [2786, 4239], [2786, 4239], [2786, 4078]], [[2814, 4078], [2814, 4239], [2842, 4239], [2842, 4078]], [[2871, 4078], [2871, 4239], [2871, 4239], [2871, 4078]], [[2928, 4078], [2928, 4239], [2942, 4239], [2942, 4078]], [[2970, 4078], [2970, 4239], [2970, 4239], [2970, 4078]], [[2984, 4078], [2984, 4239], [2998, 4239], [2998, 4078]], [[3013, 4078], [3013, 4239], [3027, 4239], [3027, 4078]], [[3041, 4078], [3041, 4239], [3041, 4239], [3041, 4078]], [[3055, 4078], [3055, 4239], [3069, 4239], [3069, 4078]], [[3098, 4078], [3098, 4239], [3098, 4239], [3098, 4078]], [[3112, 4078], [3112, 4239], [3112, 4239], [3112, 4078]]], "confidences": [0.7411984801292419, 0.6705909371376038, 0.9994827508926392, 0.9999536275863647, 0.9637630581855774, 0.990339457988739, 0.9970928430557251, 0.9842832088470459, 0.9999134540557861, 0.8257625699043274, 0.9998522996902466, 0.9860520362854004, 0.8672003149986267, 0.999895453453064, 0.9987590312957764, 0.6380735635757446, 0.9966011047363281, 0.9999879598617554, 0.9917520880699158, 0.9998186230659485, 0.9985596537590027, 0.9999741315841675, 0.9970946311950684, 0.9999897480010986, 0.9996445178985596, 0.9999563694000244, 0.9980692267417908, 0.9994539618492126, 0.5508994460105896, 0.9075180888175964, 0.6853848099708557, 0.8571422696113586, 0.7955424189567566, 0.8907495737075806, 0.9879714846611023, 0.9994396567344666, 0.848770260810852, 0.9981479644775391, 0.909099280834198, 0.9869056344032288, 0.9833765625953674, 0.9991958737373352, 0.9672496318817139, 0.9993138313293457, 0.5518977046012878, 0.8995003700256348, 0.9811897277832031, 0.9994994401931763, 0.9018236994743347, 0.9840490818023682, 0.9967617392539978, 0.9858490228652954, 0.7903525233268738, 0.996831476688385, 0.9998800754547119, 0.9991426467895508, 0.9994601607322693, 0.9994288086891174, 0.9615521430969238, 0.8211493492126465, 0.9944064617156982, 0.9838215112686157, 0.9928451180458069, 0.9992262125015259, 0.9864301681518555, 0.980707585811615, 0.9878180027008057, 0.7048366665840149, 0.9973539113998413, 0.8788666129112244, 0.9915334582328796, 0.9992111921310425, 0.9873242378234863, 0.9851594567298889, 0.5106502771377563, 0.9952054023742676], "line": {"id": "09407f8b-b683-4a37-84bc-34b89367b925", "bbox": [305, 4078, 3126, 4239], "type": "bbox"}}, {"prediction": "\u062f\u064a\u0634\u0631\u0644\u0627 \u0649\u0644\u0627 \u0646\u064a\u0637\u0642\u064a \u0646\u0628 \u0649\u0644\u0639! \u064a\u0645\u0639\u0633\u0648 \u0645\u0627\u0644\u0633\u0644\u0627 \u0647\u064a\u0644\u0639 \u0646\u0633\u062d\u0644\u0627 \u064a\u0628\u0654\u0627 \u0645\u0627\u0644 \u0627\u0644\u0627\u062b\u062a\u0645\u0655\u0627 \u0629\u0640\u0639\u064a\u0634\u0644\u0627 \u0639\u064a\u0645\u062c", "cuts": [[[316, 4249], [316, 4413], [331, 4413], [331, 4249]], [[359, 4249], [359, 4413], [359, 4413], [359, 4249]], [[402, 4249], [402, 4413], [402, 4413], [402, 4249]], [[444, 4249], [444, 4413], [444, 4413], [444, 4249]], [[459, 4249], [459, 4413], [473, 4413], [473, 4249]], [[487, 4249], [487, 4413], [501, 4413], [501, 4249]], [[515, 4249], [515, 4413], [530, 4413], [530, 4249]], [[587, 4249], [587, 4413], [587, 4413], [587, 4249]], [[601, 4249], [601, 4413], [601, 4413], [601, 4249]], [[629, 4249], [629, 4413], [629, 4413], [629, 4249]], [[643, 4249], [643, 4413], [658, 4413], [658, 4249]], [[686, 4249], [686, 4413], [700, 4413], [700, 4249]], [[715, 4249], [715, 4413], [715, 4413], [715, 4249]], [[743, 4249], [743, 4413], [757, 4413], [757, 4249]], [[800, 4249], [800, 4413], [814, 4413], [814, 4249]], [[828, 4249], [828, 4413], [843, 4413], [843, 4249]], [[857, 4249], [857, 4413], [871, 4413], [871, 4249]], [[914, 4249], [914, 4413], [914, 4413], [914, 4249]], [[942, 4249], [942, 4413], [942, 4413], [942, 4249]], [[971, 4249], [971, 4413], [985, 4413], [985, 4249]], [[1070, 4249], [1070, 4413], [1070, 4413], [1070, 4249]], [[1084, 4249], [1084, 4413], [1084, 4413], [1084, 4249]], [[1113, 4249], [1113, 4413], [1113, 4413], [1113, 4249]], [[1141, 4249], [1141, 4413], [1141, 4413], [1141, 4249]], [[1155, 4249], [1155, 4413], [1184, 4413], [1184, 4249]], [[1212, 4249], [1212, 4413], [1226, 4413], [1226, 4249]], [[1255, 4249], [1255, 4413], [1255, 4413], [1255, 4249]], [[1269, 4249], [1269, 4413], [1269, 4413], [1269, 4249]], [[1312, 4249], [1312, 4413], [1326, 4413], [1326, 4249]], [[1369, 4249], [1369, 4413], [1383, 4413], [1383, 4249]], [[1397, 4249], [1397, 4413], [1411, 4413], [1411, 4249]], [[1426, 4249], [1426, 4413], [1440, 4413], [1440, 4249]], [[1482, 4249], [1482, 4413], [1482, 4413], [1482, 4249]], [[1497, 4249], [1497, 4413], [1511, 4413], [1511, 4249]], [[1553, 4249], [1553, 4413], [1553, 4413], [1553, 4249]], [[1582, 4249], [1582, 4413], [1582, 4413], [1582, 4249]], [[1596, 4249], [1596, 4413], [1610, 4413], [1610, 4249]], [[1625, 4249], [1625, 4413], [1639, 4413], [1639, 4249]], [[1653, 4249], [1653, 4413], [1653, 4413], [1653, 4249]], [[1681, 4249], [1681, 4413], [1681, 4413], [1681, 4249]], [[1710, 4249], [1710, 4413], [1710, 4413], [1710, 4249]], [[1738, 4249], [1738, 4413], [1738, 4413], [1738, 4249]], [[1781, 4249], [1781, 4413], [1795, 4413], [1795, 4249]], [[1824, 4249], [1824, 4413], [1824, 4413], [1824, 4249]], [[1866, 4249], [1866, 4413], [1895, 4413], [1895, 4249]], [[1923, 4249], [1923, 4413], [1923, 4413], [1923, 4249]], [[1937, 4249], [1937, 4413], [1952, 4413], [1952, 4249]], [[1980, 4249], [1980, 4413], [1994, 4413], [1994, 4249]], [[2008, 4249], [2008, 4413], [2023, 4413], [2023, 4249]], [[2065, 4249], [2065, 4413], [2065, 4413], [2065, 4249]], [[2080, 4249], [2080, 4413], [2080, 4413], [2080, 4249]], [[2108, 4249], [2108, 4413], [2108, 4413], [2108, 4249]], [[2122, 4249], [2122, 4413], [2122, 4413], [2122, 4249]], [[2136, 4249], [2136, 4413], [2151, 4413], [2151, 4249]], [[2222, 4249], [2222, 4413], [2236, 4413], [2236, 4249]], [[2264, 4249], [2264, 4413], [2279, 4413], [2279, 4249]], [[2293, 4249], [2293, 4413], [2307, 4413], [2307, 4249]], [[2321, 4249], [2321, 4413], [2336, 4413], [2336, 4249]], [[2378, 4249], [2378, 4413], [2378, 4413], [2378, 4249]], [[2407, 4249], [2407, 4413], [2407, 4413], [2407, 4249]], [[2435, 4249], [2435, 4413], [2435, 4413], [2435, 4249]], [[2463, 4249], [2463, 4413], [2463, 4413], [2463, 4249]], [[2492, 4249], [2492, 4413], [2492, 4413], [2492, 4249]], [[2520, 4249], [2520, 4413], [2520, 4413], [2520, 4249]], [[2549, 4249], [2549, 4413], [2549, 4413], [2549, 4249]], [[2563, 4249], [2563, 4413], [2563, 4413], [2563, 4249]], [[2577, 4249], [2577, 4413], [2591, 4413], [2591, 4249]], [[2606, 4249], [2606, 4413], [2606, 4413], [2606, 4249]], [[2663, 4249], [2663, 4413], [2677, 4413], [2677, 4249]], [[2762, 4249], [2762, 4413], [2762, 4413], [2762, 4249]], [[2805, 4249], [2805, 4413], [2805, 4413], [2805, 4249]], [[2847, 4249], [2847, 4413], [2847, 4413], [2847, 4249]], [[2876, 4249], [2876, 4413], [2876, 4413], [2876, 4249]], [[2890, 4249], [2890, 4413], [2904, 4413], [2904, 4249]], [[2919, 4249], [2919, 4413], [2933, 4413], [2933, 4249]], [[2975, 4249], [2975, 4413], [2990, 4413], [2990, 4249]], [[3061, 4249], [3061, 4413], [3061, 4413], [3061, 4249]], [[3089, 4249], [3089, 4413], [3089, 4413], [3089, 4249]], [[3103, 4249], [3103, 4413], [3103, 4413], [3103, 4249]]], "confidences": [0.9999558925628662, 0.9997685551643372, 0.9997368454933167, 0.9977124929428101, 0.999941349029541, 0.9980744123458862, 0.9950352907180786, 0.9224417805671692, 0.8580173254013062, 0.9524855613708496, 0.9989435076713562, 0.9999842643737793, 0.9986186027526855, 0.9998856782913208, 0.9995737671852112, 0.9912926554679871, 0.9999467134475708, 0.9999945163726807, 0.9995242357254028, 0.9999788999557495, 0.9609777331352234, 0.9153129458427429, 0.9045202136039734, 0.9997207522392273, 0.9395636916160583, 0.9894552826881409, 0.9998144507408142, 0.9997990727424622, 0.9999853372573853, 0.9999799728393555, 1.0, 0.9706733822822571, 0.9758889675140381, 0.9932337403297424, 0.8476508259773254, 0.9795082807540894, 0.9796251058578491, 0.9970026612281799, 0.4895252287387848, 0.5919338464736938, 0.9867957830429077, 0.7614318132400513, 0.9896360039710999, 0.9846451878547668, 0.9974541068077087, 0.5357677340507507, 0.9974640607833862, 0.9990847110748291, 0.9961497783660889, 0.9180766940116882, 0.8193199634552002, 0.9990463852882385, 0.9899054169654846, 0.9957371950149536, 0.9989354014396667, 0.9109645485877991, 0.9999076128005981, 0.999586284160614, 0.7132347226142883, 0.9970788955688477, 0.9983876943588257, 0.6264116764068604, 0.9988951086997986, 0.9250513315200806, 0.8208836913108826, 0.8228710293769836, 0.9901149272918701, 0.997815728187561, 0.9998468160629272, 0.9990491271018982, 0.9956784844398499, 0.7115011811256409, 0.9978455305099487, 0.9982227683067322, 0.9991169571876526, 0.9916975498199463, 0.9556155204772949, 0.9978026747703552, 0.9827321171760559], "line": {"id": "02dd3ee9-dcdf-4a5d-be3b-4513160c22a2", "bbox": [302, 4249, 3132, 4413], "type": "bbox"}}, {"prediction": ".\u0649\u0644\u0639 \u064a\u0641 \u0644\u0648\u0642\u0644\u0627 \u0649\u062f\u0646\u0639 \u0631\u062b\u0643 \u062f\u0642 \u0647\u062a\u0635\u0627\u062e \u0636\u0639\u0628\u0627 \u062f\u064a\u0634\u0631\u0644\u0627 \u0644\u0627\u0642\u0641 \u0643\u0644 \u0641\u0627\u0627\u062e\u0645 \u064a\u0636\u0641\u0627\u0631 \u0647\u0627 \u0647\u0644 \u0644\u064a\u0642\u0648", "cuts": [[[297, 4427], [297, 4585], [297, 4585], [297, 4427]], [[350, 4427], [350, 4585], [350, 4585], [350, 4427]], [[363, 4427], [363, 4585], [376, 4585], [376, 4427]], [[389, 4427], [389, 4585], [389, 4585], [389, 4427]], [[429, 4427], [429, 4585], [442, 4585], [442, 4427]], [[468, 4427], [468, 4585], [468, 4585], [468, 4427]], [[481, 4427], [481, 4585], [481, 4585], [481, 4427]], [[508, 4427], [508, 4585], [534, 4585], [534, 4427]], [[587, 4427], [587, 4585], [600, 4585], [600, 4427]], [[626, 4427], [626, 4585], [639, 4585], [639, 4427]], [[679, 4427], [679, 4585], [679, 4585], [679, 4427]], [[705, 4427], [705, 4585], [705, 4585], [705, 4427]], [[718, 4427], [718, 4585], [718, 4585], [718, 4427]], [[732, 4427], [732, 4585], [745, 4585], [745, 4427]], [[797, 4427], [797, 4585], [797, 4585], [797, 4427]], [[850, 4427], [850, 4585], [863, 4585], [863, 4427]], [[890, 4427], [890, 4585], [890, 4585], [890, 4427]], [[916, 4427], [916, 4585], [916, 4585], [916, 4427]], [[955, 4427], [955, 4585], [969, 4585], [969, 4427]], [[995, 4427], [995, 4585], [1008, 4585], [1008, 4427]], [[1021, 4427], [1021, 4585], [1021, 4585], [1021, 4427]], [[1048, 4427], [1048, 4585], [1061, 4585], [1061, 4427]], [[1219, 4427], [1219, 4585], [1219, 4585], [1219, 4427]], [[1245, 4427], [1245, 4585], [1258, 4585], [1258, 4427]], [[1285, 4427], [1285, 4585], [1285, 4585], [1285, 4427]], [[1311, 4427], [1311, 4585], [1324, 4585], [1324, 4427]], [[1337, 4427], [1337, 4585], [1337, 4585], [1337, 4427]], [[1364, 4427], [1364, 4585], [1364, 4585], [1364, 4427]], [[1416, 4427], [1416, 4585], [1429, 4585], [1429, 4427]], [[1456, 4427], [1456, 4585], [1469, 4585], [1469, 4427]], [[1495, 4427], [1495, 4585], [1495, 4585], [1495, 4427]], [[1535, 4427], [1535, 4585], [1548, 4585], [1548, 4427]], [[1614, 4427], [1614, 4585], [1614, 4585], [1614, 4427]], [[1666, 4427], [1666, 4585], [1666, 4585], [1666, 4427]], [[1693, 4427], [1693, 4585], [1706, 4585], [1706, 4427]], [[1732, 4427], [1732, 4585], [1732, 4585], [1732, 4427]], [[1745, 4427], [1745, 4585], [1759, 4585], [1759, 4427]], [[1798, 4427], [1798, 4585], [1798, 4585], [1798, 4427]], [[1824, 4427], [1824, 4585], [1824, 4585], [1824, 4427]], [[1877, 4427], [1877, 4585], [1877, 4585], [1877, 4427]], [[1917, 4427], [1917, 4585], [1930, 4585], [1930, 4427]], [[1943, 4427], [1943, 4585], [1943, 4585], [1943, 4427]], [[1969, 4427], [1969, 4585], [1969, 4585], [1969, 4427]], [[1982, 4427], [1982, 4585], [1996, 4585], [1996, 4427]], [[2048, 4427], [2048, 4585], [2048, 4585], [2048, 4427]], [[2075, 4427], [2075, 4585], [2075, 4585], [2075, 4427]], [[2101, 4427], [2101, 4585], [2114, 4585], [2114, 4427]], [[2140, 4427], [2140, 4585], [2140, 4585], [2140, 4427]], [[2154, 4427], [2154, 4585], [2167, 4585], [2167, 4427]], [[2206, 4427], [2206, 4585], [2219, 4585], [2219, 4427]], [[2272, 4427], [2272, 4585], [2272, 4585], [2272, 4427]], [[2285, 4427], [2285, 4585], [2298, 4585], [2298, 4427]], [[2364, 4427], [2364, 4585], [2377, 4585], [2377, 4427]], [[2404, 4427], [2404, 4585], [2404, 4585], [2404, 4427]], [[2430, 4427], [2430, 4585], [2430, 4585], [2430, 4427]], [[2456, 4427], [2456, 4585], [2456, 4585], [2456, 4427]], [[2470, 4427], [2470, 4585], [2483, 4585], [2483, 4427]], [[2509, 4427], [2509, 4585], [2522, 4585], [2522, 4427]], [[2562, 4427], [2562, 4585], [2562, 4585], [2562, 4427]], [[2601, 4427], [2601, 4585], [2601, 4585], [2601, 4427]], [[2654, 4427], [2654, 4585], [2654, 4585], [2654, 4427]], [[2680, 4427], [2680, 4585], [2680, 4585], [2680, 4427]], [[2720, 4427], [2720, 4585], [2733, 4585], [2733, 4427]], [[2759, 4427], [2759, 4585], [2759, 4585], [2759, 4427]], [[2786, 4427], [2786, 4585], [2786, 4585], [2786, 4427]], [[2838, 4427], [2838, 4585], [2851, 4585], [2851, 4427]], [[2865, 4427], [2865, 4585], [2865, 4585], [2865, 4427]], [[2891, 4427], [2891, 4585], [2891, 4585], [2891, 4427]], [[2917, 4427], [2917, 4585], [2930, 4585], [2930, 4427]], [[2944, 4427], [2944, 4585], [2957, 4585], [2957, 4427]], [[2996, 4427], [2996, 4585], [2996, 4585], [2996, 4427]], [[3023, 4427], [3023, 4585], [3023, 4585], [3023, 4427]], [[3049, 4427], [3049, 4585], [3049, 4585], [3049, 4427]], [[3102, 4427], [3102, 4585], [3102, 4585], [3102, 4427]]], "confidences": [0.8309170007705688, 0.9710848927497864, 0.9978118538856506, 0.9952423572540283, 0.9998619556427002, 0.9853734970092773, 0.9041633605957031, 0.9999642372131348, 0.9992184638977051, 0.987206757068634, 0.9999744892120361, 0.9998753070831299, 0.9998530149459839, 0.9993923902511597, 0.9804210662841797, 0.9999669790267944, 0.9681344628334045, 0.7007457613945007, 0.9999014139175415, 0.9938947558403015, 0.9991243481636047, 0.9994795918464661, 0.9906601309776306, 0.9998043179512024, 0.9999531507492065, 0.9996731281280518, 0.9904140830039978, 0.8484129309654236, 0.9998654127120972, 0.9998722076416016, 0.884601891040802, 0.9997289776802063, 0.5172210335731506, 0.9777674078941345, 0.9999169111251831, 0.49916383624076843, 0.9641693830490112, 0.9937703013420105, 0.7306916117668152, 0.9957754015922546, 0.9984592199325562, 0.943457841873169, 0.6241721510887146, 0.9954598546028137, 0.9971427321434021, 0.8888192176818848, 0.9960846900939941, 0.9893342852592468, 0.9664679169654846, 0.9914203882217407, 0.9974316954612732, 0.9991137385368347, 0.9997954964637756, 0.9750413298606873, 0.9770325422286987, 0.9967040419578552, 0.9981144666671753, 0.9363402724266052, 0.9950194358825684, 0.8760650753974915, 0.9999531507492065, 0.9947760105133057, 0.99937504529953, 0.9894686341285706, 0.9319698810577393, 0.9841182231903076, 0.998865008354187, 0.9998772144317627, 0.9999456405639648, 0.9940637946128845, 0.8951064348220825, 0.9981452226638794, 0.9989315867424011, 0.9663097262382507], "line": {"id": "47a85dad-e82c-41b6-9a41-f6a85da7f60b", "bbox": [297, 4427, 3128, 4585], "type": "bbox"}}] \ No newline at end of file +[{"prediction": "\u0645\u0627\u0644\u0633\u0644\u0627 \u0647\u064a\u0644\u0639 \u0647\u062a\u0627\u0632\u062c\u0639\u0645 \u064a\u0641", "cuts": [[[1437, 119], [1437, 256], [1449, 256], [1449, 119]], [[1484, 119], [1484, 256], [1496, 256], [1496, 119]], [[1508, 119], [1508, 256], [1520, 256], [1520, 119]], [[1568, 119], [1568, 256], [1568, 256], [1568, 119]], [[1603, 119], [1603, 256], [1603, 256], [1603, 119]], [[1615, 119], [1615, 256], [1627, 256], [1627, 119]], [[1639, 119], [1639, 256], [1639, 256], [1639, 119]], [[1663, 119], [1663, 256], [1674, 256], [1674, 119]], [[1698, 119], [1698, 256], [1698, 256], [1698, 119]], [[1722, 119], [1722, 256], [1734, 256], [1734, 119]], [[1746, 119], [1746, 256], [1758, 256], [1758, 119]], [[1793, 119], [1793, 256], [1805, 256], [1805, 119]], [[1817, 119], [1817, 256], [1829, 256], [1829, 119]], [[1853, 119], [1853, 256], [1853, 256], [1853, 119]], [[1876, 119], [1876, 256], [1888, 256], [1888, 119]], [[1924, 119], [1924, 256], [1936, 256], [1936, 119]], [[1959, 119], [1959, 256], [1971, 256], [1971, 119]], [[2007, 119], [2007, 256], [2019, 256], [2019, 119]], [[2054, 119], [2054, 256], [2054, 256], [2054, 119]], [[2078, 119], [2078, 256], [2090, 256], [2090, 119]], [[2149, 119], [2149, 256], [2149, 256], [2149, 119]], [[2161, 119], [2161, 256], [2173, 256], [2173, 119]]], "confidences": [0.9999573230743408, 0.8209527730941772, 0.9964040517807007, 0.667267382144928, 0.9973480701446533, 0.9998679161071777, 0.9999040365219116, 0.999890923500061, 0.8255242109298706, 0.9995707869529724, 0.9976646900177002, 0.9889178276062012, 0.9869346618652344, 0.9966957569122314, 0.9958117008209229, 0.980436384677887, 0.9956343770027161, 0.9984177350997925, 0.762851893901825, 0.9997056126594543, 0.9977449178695679, 0.9985793828964233], "line": {"id": "line_0", "bbox": [1437, 119, 2185, 256], "type": "bbox"}}, {"prediction": "(294)", "cuts": [[[2838, 119], [2838, 265], [2838, 265], [2838, 119]], [[2904, 119], [2904, 265], [2904, 265], [2904, 119]], [[2954, 119], [2954, 265], [2954, 265], [2954, 119]], [[3019, 119], [3019, 265], [3019, 265], [3019, 119]], [[3069, 119], [3069, 265], [3085, 265], [3085, 119]]], "confidences": [0.5292237997055054, 0.9998055100440979, 0.9602159857749939, 0.9988068342208862, 0.994594395160675], "line": {"id": "line_1", "bbox": [2821, 119, 3119, 265], "type": "bbox"}}, {"prediction": "\u0627\u0630\u0643\u0648 \u0627\u0630\u0643\u062a\u0642\u0648 \u0641 \u0646\u064a\u0646\u0645\u0654\u0648\u0645\u0644\u0627 \u0631\u064a\u0645\u0654\u0627 \u0627\u0647\u0628 \u0647\u0645\u0631\u0643\u0627 \u0649\u062a\u0644\u0627 \u0629\u0639\u0627\u0631\u062f\u0644\u0627 \u0647\u064a\u0644\u0627 \u0644\u0645\u062d \u062f\u0642\u0648 \u0629\u0646\u0633 \u0644\u0643 \u064a\u0641", "cuts": [[[358, 365], [358, 542], [358, 542], [358, 365]], [[402, 365], [402, 542], [402, 542], [402, 365]], [[460, 365], [460, 542], [474, 542], [474, 365]], [[648, 365], [648, 542], [663, 542], [663, 365]], [[677, 365], [677, 542], [706, 542], [706, 365]], [[735, 365], [735, 542], [750, 542], [750, 365]], [[779, 365], [779, 542], [779, 542], [779, 365]], [[852, 365], [852, 542], [852, 542], [852, 365]], [[939, 365], [939, 542], [939, 542], [939, 365]], [[997, 365], [997, 542], [997, 542], [997, 365]], [[1055, 365], [1055, 542], [1055, 542], [1055, 365]], [[1069, 365], [1069, 542], [1084, 542], [1084, 365]], [[1127, 365], [1127, 542], [1142, 542], [1142, 365]], [[1171, 365], [1171, 542], [1171, 542], [1171, 365]], [[1200, 365], [1200, 542], [1215, 542], [1215, 365]], [[1229, 365], [1229, 542], [1244, 542], [1244, 365]], [[1273, 365], [1273, 542], [1273, 542], [1273, 365]], [[1302, 365], [1302, 542], [1302, 542], [1302, 365]], [[1345, 365], [1345, 542], [1345, 542], [1345, 365]], [[1360, 365], [1360, 542], [1360, 542], [1360, 365]], [[1374, 365], [1374, 542], [1374, 542], [1374, 365]], [[1389, 365], [1389, 542], [1403, 542], [1403, 365]], [[1418, 365], [1418, 542], [1432, 542], [1432, 365]], [[1447, 365], [1447, 542], [1447, 542], [1447, 365]], [[1490, 365], [1490, 542], [1490, 542], [1490, 365]], [[1505, 365], [1505, 542], [1519, 542], [1519, 365]], [[1548, 365], [1548, 542], [1548, 542], [1548, 365]], [[1578, 365], [1578, 542], [1578, 542], [1578, 365]], [[1592, 365], [1592, 542], [1592, 542], [1592, 365]], [[1607, 365], [1607, 542], [1621, 542], [1621, 365]], [[1650, 365], [1650, 542], [1650, 542], [1650, 365]], [[1665, 365], [1665, 542], [1679, 542], [1679, 365]], [[1694, 365], [1694, 542], [1708, 542], [1708, 365]], [[1723, 365], [1723, 542], [1737, 542], [1737, 365]], [[1766, 365], [1766, 542], [1766, 542], [1766, 365]], [[1810, 365], [1810, 542], [1810, 542], [1810, 365]], [[1853, 365], [1853, 542], [1868, 542], [1868, 365]], [[1882, 365], [1882, 542], [1882, 542], [1882, 365]], [[1955, 365], [1955, 542], [1969, 542], [1969, 365]], [[1984, 365], [1984, 542], [1999, 542], [1999, 365]], [[2057, 365], [2057, 542], [2057, 542], [2057, 365]], [[2071, 365], [2071, 542], [2071, 542], [2071, 365]], [[2086, 365], [2086, 542], [2100, 542], [2100, 365]], [[2115, 365], [2115, 542], [2115, 542], [2115, 365]], [[2129, 365], [2129, 542], [2144, 542], [2144, 365]], [[2173, 365], [2173, 542], [2173, 542], [2173, 365]], [[2202, 365], [2202, 542], [2202, 542], [2202, 365]], [[2245, 365], [2245, 542], [2260, 542], [2260, 365]], [[2303, 365], [2303, 542], [2303, 542], [2303, 365]], [[2332, 365], [2332, 542], [2347, 542], [2347, 365]], [[2361, 365], [2361, 542], [2361, 542], [2361, 365]], [[2376, 365], [2376, 542], [2391, 542], [2391, 365]], [[2405, 365], [2405, 542], [2420, 542], [2420, 365]], [[2434, 365], [2434, 542], [2449, 542], [2449, 365]], [[2478, 365], [2478, 542], [2478, 542], [2478, 365]], [[2492, 365], [2492, 542], [2507, 542], [2507, 365]], [[2521, 365], [2521, 542], [2521, 542], [2521, 365]], [[2536, 365], [2536, 542], [2550, 542], [2550, 365]], [[2594, 365], [2594, 542], [2594, 542], [2594, 365]], [[2623, 365], [2623, 542], [2623, 542], [2623, 365]], [[2637, 365], [2637, 542], [2652, 542], [2652, 365]], [[2681, 365], [2681, 542], [2695, 542], [2695, 365]], [[2724, 365], [2724, 542], [2724, 542], [2724, 365]], [[2753, 365], [2753, 542], [2753, 542], [2753, 365]], [[2812, 365], [2812, 542], [2812, 542], [2812, 365]], [[2841, 365], [2841, 542], [2855, 542], [2855, 365]], [[2870, 365], [2870, 542], [2870, 542], [2870, 365]], [[2899, 365], [2899, 542], [2899, 542], [2899, 365]], [[2942, 365], [2942, 542], [2957, 542], [2957, 365]], [[2986, 365], [2986, 542], [3000, 542], [3000, 365]], [[3058, 365], [3058, 542], [3058, 542], [3058, 365]], [[3073, 365], [3073, 542], [3073, 542], [3073, 365]], [[3116, 365], [3116, 542], [3131, 542], [3131, 365]], [[3145, 365], [3145, 542], [3145, 542], [3145, 365]], [[3160, 365], [3160, 542], [3174, 542], [3174, 365]]], "confidences": [0.9912043213844299, 0.9701831340789795, 0.9999876022338867, 0.9710670113563538, 0.9999645948410034, 0.9999040365219116, 0.9999904632568359, 0.9276049733161926, 0.9949396848678589, 0.9172694683074951, 0.9944435954093933, 0.9998708963394165, 0.9994745850563049, 0.9999909400939941, 0.9929296374320984, 0.9996275901794434, 0.9654240012168884, 0.9978482723236084, 0.8331916928291321, 0.9914954900741577, 0.9862202405929565, 0.9967150688171387, 0.9994681477546692, 0.9422079920768738, 0.9996860027313232, 0.9978721141815186, 0.590356171131134, 0.9853919148445129, 0.9949153661727905, 0.9330083131790161, 0.902510941028595, 0.9991570711135864, 0.9937306642532349, 0.9962736368179321, 0.9969527721405029, 0.9955304265022278, 0.9975927472114563, 0.931627094745636, 0.9910709857940674, 0.994668185710907, 0.9977930784225464, 0.9947988986968994, 0.99834144115448, 0.9974583983421326, 0.9996436834335327, 0.9992924928665161, 0.9981145858764648, 0.9989506006240845, 0.9970920085906982, 0.9896613359451294, 0.6772571206092834, 0.9618531465530396, 0.9992746710777283, 0.998647153377533, 0.834701657295227, 0.9992173910140991, 0.9594298601150513, 0.9998399019241333, 0.9885919690132141, 0.9965444207191467, 0.9950836896896362, 0.8906474709510803, 0.8982319831848145, 0.520612359046936, 0.9998024106025696, 0.9991157650947571, 0.9997696280479431, 0.9865208864212036, 0.9990457892417908, 0.9984292387962341, 0.8027671575546265, 0.9970871806144714, 0.9498249292373657, 0.9898852109909058, 0.9846636056900024], "line": {"id": "line_2", "bbox": [358, 365, 3189, 542], "type": "bbox"}}, {"prediction": "\u0646\u0627\u0643 \u0646\u0627\u0641 \u0644\u0627\u062d\u0644\u0627 \u0647\u0630\u0647 \u0646\u0639 \u0646\u063a\u0634\u0643\u0627\u0644 \u0644\u0627\u0642\u0648 \u0627\u062f\u062f\u0634 \u064b\u0627\u0640\u0628\u0646\u063a \u0628\u0636\u063a\u0648 \u0643\u0644\u0630\u0644 \u062f\u064a\u0634\u0631\u0644\u0627 \u0637\u0627\u0634\u062a\u0633\u0627\u0641", "cuts": [[[364, 534], [364, 695], [377, 695], [377, 534]], [[405, 534], [405, 695], [405, 695], [405, 534]], [[419, 534], [419, 695], [419, 695], [419, 534]], [[460, 534], [460, 695], [487, 695], [487, 534]], [[514, 534], [514, 695], [528, 695], [528, 534]], [[555, 534], [555, 695], [555, 695], [555, 534]], [[569, 534], [569, 695], [583, 695], [583, 534]], [[610, 534], [610, 695], [624, 695], [624, 534]], [[665, 534], [665, 695], [665, 695], [665, 534]], [[679, 534], [679, 695], [692, 695], [692, 534]], [[720, 534], [720, 695], [720, 695], [720, 534]], [[733, 534], [733, 695], [747, 695], [747, 534]], [[774, 534], [774, 695], [788, 695], [788, 534]], [[802, 534], [802, 695], [816, 695], [816, 534]], [[829, 534], [829, 695], [843, 695], [843, 534]], [[884, 534], [884, 695], [884, 695], [884, 534]], [[911, 534], [911, 695], [925, 695], [925, 534]], [[952, 534], [952, 695], [966, 695], [966, 534]], [[1007, 534], [1007, 695], [1007, 695], [1007, 534]], [[1048, 534], [1048, 695], [1048, 695], [1048, 534]], [[1089, 534], [1089, 695], [1103, 695], [1103, 534]], [[1144, 534], [1144, 695], [1144, 695], [1144, 534]], [[1185, 534], [1185, 695], [1185, 695], [1185, 534]], [[1240, 534], [1240, 695], [1240, 695], [1240, 534]], [[1295, 534], [1295, 695], [1295, 695], [1295, 534]], [[1363, 534], [1363, 695], [1377, 695], [1377, 534]], [[1391, 534], [1391, 695], [1404, 695], [1404, 534]], [[1418, 534], [1418, 695], [1432, 695], [1432, 534]], [[1473, 534], [1473, 695], [1486, 695], [1486, 534]], [[1500, 534], [1500, 695], [1500, 695], [1500, 534]], [[1514, 534], [1514, 695], [1514, 695], [1514, 534]], [[1568, 534], [1568, 695], [1582, 695], [1582, 534]], [[1596, 534], [1596, 695], [1623, 695], [1623, 534]], [[1651, 534], [1651, 695], [1664, 695], [1664, 534]], [[1692, 534], [1692, 695], [1705, 695], [1705, 534]], [[1760, 534], [1760, 695], [1774, 695], [1774, 534]], [[1815, 534], [1815, 695], [1829, 695], [1829, 534]], [[1842, 534], [1842, 695], [1856, 695], [1856, 534]], [[1870, 534], [1870, 695], [1870, 695], [1870, 534]], [[1883, 534], [1883, 695], [1883, 695], [1883, 534]], [[1924, 534], [1924, 695], [1952, 695], [1952, 534]], [[2034, 534], [2034, 695], [2034, 695], [2034, 534]], [[2075, 534], [2075, 695], [2075, 695], [2075, 534]], [[2130, 534], [2130, 695], [2143, 695], [2143, 534]], [[2171, 534], [2171, 695], [2185, 695], [2185, 534]], [[2226, 534], [2226, 695], [2226, 695], [2226, 534]], [[2308, 534], [2308, 695], [2308, 695], [2308, 534]], [[2363, 534], [2363, 695], [2363, 695], [2363, 534]], [[2431, 534], [2431, 695], [2431, 695], [2431, 534]], [[2458, 534], [2458, 695], [2472, 695], [2472, 534]], [[2527, 534], [2527, 695], [2527, 695], [2527, 534]], [[2582, 534], [2582, 695], [2582, 695], [2582, 534]], [[2609, 534], [2609, 695], [2623, 695], [2623, 534]], [[2650, 534], [2650, 695], [2650, 695], [2650, 534]], [[2664, 534], [2664, 695], [2677, 695], [2677, 534]], [[2705, 534], [2705, 695], [2705, 695], [2705, 534]], [[2732, 534], [2732, 695], [2746, 695], [2746, 534]], [[2787, 534], [2787, 695], [2787, 695], [2787, 534]], [[2828, 534], [2828, 695], [2828, 695], [2828, 534]], [[2842, 534], [2842, 695], [2855, 695], [2855, 534]], [[2869, 534], [2869, 695], [2869, 695], [2869, 534]], [[2883, 534], [2883, 695], [2896, 695], [2896, 534]], [[2938, 534], [2938, 695], [2938, 695], [2938, 534]], [[2992, 534], [2992, 695], [2992, 695], [2992, 534]], [[3033, 534], [3033, 695], [3033, 695], [3033, 534]], [[3061, 534], [3061, 695], [3074, 695], [3074, 534]], [[3102, 534], [3102, 695], [3129, 695], [3129, 534]], [[3143, 534], [3143, 695], [3157, 695], [3157, 534]], [[3170, 534], [3170, 695], [3170, 695], [3170, 534]]], "confidences": [0.9985698461532593, 0.9999438524246216, 0.9994581341743469, 0.9928075075149536, 0.9999692440032959, 0.9775535464286804, 0.9994893074035645, 0.9992764592170715, 0.9999681711196899, 0.999976634979248, 0.5837891101837158, 0.9994819760322571, 0.9999487400054932, 0.6378462314605713, 0.9995593428611755, 0.9997476935386658, 0.9998375177383423, 0.9999092817306519, 0.9706422686576843, 0.9981306195259094, 0.999731719493866, 0.9984344840049744, 0.9999045133590698, 0.9998281002044678, 0.9965876340866089, 0.9981406927108765, 0.9998824596405029, 0.9994693398475647, 0.9985535740852356, 0.9371808171272278, 0.9999727010726929, 0.9998328685760498, 0.9986041188240051, 0.9998788833618164, 0.9969847798347473, 0.9979107975959778, 0.9678859114646912, 0.9965589642524719, 0.9958305954933167, 0.856151819229126, 0.9174501299858093, 0.977839469909668, 0.9722991585731506, 0.999629020690918, 0.9988741278648376, 0.5952739119529724, 0.8313284516334534, 0.6637697815895081, 0.9957481026649475, 0.9997797608375549, 0.99960857629776, 0.6831809282302856, 0.9987292885780334, 0.9998849630355835, 0.9514357447624207, 0.9951800107955933, 0.9758328795433044, 0.9967122077941895, 0.7513812184333801, 0.9999700784683228, 0.9964326620101929, 0.9970759153366089, 0.9622002243995667, 0.7601332068443298, 0.9990935325622559, 0.9990278482437134, 0.9987155199050903, 0.9829656481742859, 0.6010854244232178], "line": {"id": "line_3", "bbox": [350, 534, 3184, 695], "type": "bbox"}}, {"prediction": "\u0647\u064a\u062f\u064a \u0646\u064a\u0628 \u0644\u062b\u0645 \u0627\u0644\u0641 \u0646\u064a\u0637\u0642\u064a \u0646\u0628 \u0649\u0644\u0639 \u0631\u0627\u0636\u062d\u0627\u0628 \u062a\u0642\u0648\u0644\u0627 \u064a\u0641 \u0630\u0641\u0646\u0627\u0648 \u0647\u0633\u0641\u0646 \u062a\u0642\u0647\u0632\u0654\u0627 \u0644\u0648\u0642\u062a \u0627\u0645\u0643 \u0645\u0627\u0644\u0627", "cuts": [[[349, 703], [349, 875], [362, 875], [362, 703]], [[389, 703], [389, 875], [389, 875], [389, 703]], [[428, 703], [428, 875], [441, 875], [441, 703]], [[455, 703], [455, 875], [468, 875], [468, 703]], [[481, 703], [481, 875], [494, 875], [494, 703]], [[534, 703], [534, 875], [547, 875], [547, 703]], [[560, 703], [560, 875], [560, 875], [560, 703]], [[586, 703], [586, 875], [586, 875], [586, 703]], [[613, 703], [613, 875], [626, 875], [626, 703]], [[666, 703], [666, 875], [679, 875], [679, 703]], [[705, 703], [705, 875], [705, 875], [705, 703]], [[731, 703], [731, 875], [731, 875], [731, 703]], [[758, 703], [758, 875], [771, 875], [771, 703]], [[797, 703], [797, 875], [797, 875], [797, 703]], [[837, 703], [837, 875], [837, 875], [837, 703]], [[863, 703], [863, 875], [863, 875], [863, 703]], [[890, 703], [890, 875], [903, 875], [903, 703]], [[956, 703], [956, 875], [956, 875], [956, 703]], [[982, 703], [982, 875], [982, 875], [982, 703]], [[1008, 703], [1008, 875], [1022, 875], [1022, 703]], [[1074, 703], [1074, 875], [1074, 875], [1074, 703]], [[1101, 703], [1101, 875], [1101, 875], [1101, 703]], [[1127, 703], [1127, 875], [1140, 875], [1140, 703]], [[1180, 703], [1180, 875], [1193, 875], [1193, 703]], [[1206, 703], [1206, 875], [1219, 875], [1219, 703]], [[1233, 703], [1233, 875], [1246, 875], [1246, 703]], [[1312, 703], [1312, 875], [1312, 875], [1312, 703]], [[1325, 703], [1325, 875], [1338, 875], [1338, 703]], [[1351, 703], [1351, 875], [1351, 875], [1351, 703]], [[1391, 703], [1391, 875], [1404, 875], [1404, 703]], [[1444, 703], [1444, 875], [1444, 875], [1444, 703]], [[1470, 703], [1470, 875], [1483, 875], [1483, 703]], [[1509, 703], [1509, 875], [1523, 875], [1523, 703]], [[1575, 703], [1575, 875], [1589, 875], [1589, 703]], [[1628, 703], [1628, 875], [1641, 875], [1641, 703]], [[1655, 703], [1655, 875], [1655, 875], [1655, 703]], [[1681, 703], [1681, 875], [1694, 875], [1694, 703]], [[1747, 703], [1747, 875], [1747, 875], [1747, 703]], [[1800, 703], [1800, 875], [1800, 875], [1800, 703]], [[1839, 703], [1839, 875], [1852, 875], [1852, 703]], [[1865, 703], [1865, 875], [1879, 875], [1879, 703]], [[1892, 703], [1892, 875], [1905, 875], [1905, 703]], [[1918, 703], [1918, 875], [1918, 875], [1918, 703]], [[1958, 703], [1958, 875], [1958, 875], [1958, 703]], [[1971, 703], [1971, 875], [1971, 875], [1971, 703]], [[1997, 703], [1997, 875], [2011, 875], [2011, 703]], [[2050, 703], [2050, 875], [2050, 875], [2050, 703]], [[2090, 703], [2090, 875], [2090, 875], [2090, 703]], [[2116, 703], [2116, 875], [2116, 875], [2116, 703]], [[2156, 703], [2156, 875], [2156, 875], [2156, 703]], [[2195, 703], [2195, 875], [2208, 875], [2208, 703]], [[2222, 703], [2222, 875], [2235, 875], [2235, 703]], [[2261, 703], [2261, 875], [2261, 875], [2261, 703]], [[2301, 703], [2301, 875], [2327, 875], [2327, 703]], [[2353, 703], [2353, 875], [2367, 875], [2367, 703]], [[2380, 703], [2380, 875], [2393, 875], [2393, 703]], [[2406, 703], [2406, 875], [2419, 875], [2419, 703]], [[2472, 703], [2472, 875], [2472, 875], [2472, 703]], [[2538, 703], [2538, 875], [2538, 875], [2538, 703]], [[2564, 703], [2564, 875], [2578, 875], [2578, 703]], [[2617, 703], [2617, 875], [2630, 875], [2630, 703]], [[2643, 703], [2643, 875], [2657, 875], [2657, 703]], [[2670, 703], [2670, 875], [2670, 875], [2670, 703]], [[2683, 703], [2683, 875], [2696, 875], [2696, 703]], [[2749, 703], [2749, 875], [2749, 875], [2749, 703]], [[2789, 703], [2789, 875], [2789, 875], [2789, 703]], [[2828, 703], [2828, 875], [2828, 875], [2828, 703]], [[2854, 703], [2854, 875], [2854, 875], [2854, 703]], [[2881, 703], [2881, 875], [2894, 875], [2894, 703]], [[2907, 703], [2907, 875], [2907, 875], [2907, 703]], [[2920, 703], [2920, 875], [2934, 875], [2934, 703]], [[2947, 703], [2947, 875], [2947, 875], [2947, 703]], [[2973, 703], [2973, 875], [2986, 875], [2986, 703]], [[3065, 703], [3065, 875], [3065, 875], [3065, 703]], [[3105, 703], [3105, 875], [3118, 875], [3118, 703]], [[3131, 703], [3131, 875], [3145, 875], [3145, 703]], [[3158, 703], [3158, 875], [3171, 875], [3171, 703]]], "confidences": [0.9978576302528381, 0.9365259408950806, 0.9993323683738708, 0.9999881982803345, 0.995057225227356, 0.9951127171516418, 0.9600062966346741, 0.9987906813621521, 0.9990148544311523, 0.9999818801879883, 0.979132354259491, 0.9896356463432312, 0.9996901750564575, 0.9994376301765442, 0.9832384586334229, 0.9919760823249817, 0.9994718432426453, 0.99887615442276, 0.9999384880065918, 0.9999126195907593, 0.9968804121017456, 0.9998698234558105, 0.9996697902679443, 0.9999111890792847, 0.999935507774353, 0.9999529123306274, 0.9985625147819519, 0.9987615346908569, 0.9998716115951538, 0.9999983310699463, 0.9997947812080383, 0.9999533891677856, 0.9956774115562439, 0.9921483993530273, 0.9991742968559265, 0.8690173625946045, 0.9889227151870728, 0.990256130695343, 0.9499505758285522, 0.9942019581794739, 0.992321789264679, 0.9953250885009766, 0.9952391386032104, 0.9987290501594543, 0.9708223342895508, 0.9829660654067993, 0.998319685459137, 0.9980186223983765, 0.9733465313911438, 0.9576543569564819, 0.9972822666168213, 0.9974729418754578, 0.9998486042022705, 0.9998704195022583, 0.9851626753807068, 0.999782145023346, 0.9982467889785767, 0.5265796780586243, 0.9982032775878906, 0.9953908920288086, 0.9945998191833496, 0.9988899827003479, 0.932214617729187, 0.9992570281028748, 0.9942938685417175, 0.9976638555526733, 0.8540834784507751, 0.999862551689148, 0.999956488609314, 0.5673943161964417, 0.9989564418792725, 0.996831476688385, 0.9993277788162231, 0.9955874681472778, 0.995591402053833, 0.9929797053337097, 0.9888700246810913], "line": {"id": "line_4", "bbox": [349, 703, 3171, 875], "type": "bbox"}}, {"prediction": "\u0645\u0648\u062a\u062e\u0645 \u0637\u0641\u0633 \u064a\u0641 \u0649\u062f\u0646\u0639 \u0646\u064a\u0646\u0645\u0654\u0648\u0645\u0644\u0627 \u0631\u064a\u0645\u0654\u0627\u064a \u0649\u0647 \u0644\u0627\u0642 \u0627\u0647\u0628 \u0643\u062a\u0648\u0633\u0643 \u0649\u062a\u0644\u0627 \u0629\u0639\u0631\u0627\u062f\u0644\u0627 \u0644\u0639\u0641 \u0627\u0645 \u0647\u0644 \u0644\u0627\u0642", "cuts": [[[347, 875], [347, 1045], [360, 1045], [360, 875]], [[414, 875], [414, 1045], [414, 1045], [414, 875]], [[454, 875], [454, 1045], [467, 1045], [467, 875]], [[480, 875], [480, 1045], [480, 1045], [480, 875]], [[494, 875], [494, 1045], [494, 1045], [494, 875]], [[534, 875], [534, 1045], [534, 1045], [534, 875]], [[574, 875], [574, 1045], [574, 1045], [574, 875]], [[641, 875], [641, 1045], [641, 1045], [641, 875]], [[681, 875], [681, 1045], [694, 1045], [694, 875]], [[721, 875], [721, 1045], [721, 1045], [721, 875]], [[761, 875], [761, 1045], [761, 1045], [761, 875]], [[774, 875], [774, 1045], [774, 1045], [774, 875]], [[801, 875], [801, 1045], [814, 1045], [814, 875]], [[854, 875], [854, 1045], [854, 1045], [854, 875]], [[921, 875], [921, 1045], [921, 1045], [921, 875]], [[948, 875], [948, 1045], [948, 1045], [948, 875]], [[974, 875], [974, 1045], [974, 1045], [974, 875]], [[1014, 875], [1014, 1045], [1028, 1045], [1028, 875]], [[1054, 875], [1054, 1045], [1068, 1045], [1068, 875]], [[1081, 875], [1081, 1045], [1094, 1045], [1094, 875]], [[1121, 875], [1121, 1045], [1121, 1045], [1121, 875]], [[1148, 875], [1148, 1045], [1161, 1045], [1161, 875]], [[1201, 875], [1201, 1045], [1201, 1045], [1201, 875]], [[1214, 875], [1214, 1045], [1214, 1045], [1214, 875]], [[1228, 875], [1228, 1045], [1228, 1045], [1228, 875]], [[1241, 875], [1241, 1045], [1255, 1045], [1255, 875]], [[1268, 875], [1268, 1045], [1281, 1045], [1281, 875]], [[1295, 875], [1295, 1045], [1295, 1045], [1295, 875]], [[1335, 875], [1335, 1045], [1348, 1045], [1348, 875]], [[1361, 875], [1361, 1045], [1361, 1045], [1361, 875]], [[1388, 875], [1388, 1045], [1401, 1045], [1401, 875]], [[1415, 875], [1415, 1045], [1428, 1045], [1428, 875]], [[1441, 875], [1441, 1045], [1468, 1045], [1468, 875]], [[1481, 875], [1481, 1045], [1495, 1045], [1495, 875]], [[1508, 875], [1508, 1045], [1535, 1045], [1535, 875]], [[1602, 875], [1602, 1045], [1602, 1045], [1602, 875]], [[1615, 875], [1615, 1045], [1628, 1045], [1628, 875]], [[1655, 875], [1655, 1045], [1682, 1045], [1682, 875]], [[1735, 875], [1735, 1045], [1735, 1045], [1735, 875]], [[1748, 875], [1748, 1045], [1748, 1045], [1748, 875]], [[1775, 875], [1775, 1045], [1775, 1045], [1775, 875]], [[1802, 875], [1802, 1045], [1802, 1045], [1802, 875]], [[1828, 875], [1828, 1045], [1828, 1045], [1828, 875]], [[1882, 875], [1882, 1045], [1895, 1045], [1895, 875]], [[1922, 875], [1922, 1045], [1922, 1045], [1922, 875]], [[1948, 875], [1948, 1045], [1962, 1045], [1962, 875]], [[2015, 875], [2015, 1045], [2029, 1045], [2029, 875]], [[2082, 875], [2082, 1045], [2082, 1045], [2082, 875]], [[2122, 875], [2122, 1045], [2135, 1045], [2135, 875]], [[2175, 875], [2175, 1045], [2189, 1045], [2189, 875]], [[2242, 875], [2242, 1045], [2242, 1045], [2242, 875]], [[2295, 875], [2295, 1045], [2295, 1045], [2295, 875]], [[2336, 875], [2336, 1045], [2336, 1045], [2336, 875]], [[2349, 875], [2349, 1045], [2349, 1045], [2349, 875]], [[2362, 875], [2362, 1045], [2376, 1045], [2376, 875]], [[2389, 875], [2389, 1045], [2389, 1045], [2389, 875]], [[2402, 875], [2402, 1045], [2416, 1045], [2416, 875]], [[2429, 875], [2429, 1045], [2442, 1045], [2442, 875]], [[2456, 875], [2456, 1045], [2469, 1045], [2469, 875]], [[2522, 875], [2522, 1045], [2536, 1045], [2536, 875]], [[2549, 875], [2549, 1045], [2562, 1045], [2562, 875]], [[2589, 875], [2589, 1045], [2602, 1045], [2602, 875]], [[2629, 875], [2629, 1045], [2629, 1045], [2629, 875]], [[2642, 875], [2642, 1045], [2656, 1045], [2656, 875]], [[2669, 875], [2669, 1045], [2669, 1045], [2669, 875]], [[2776, 875], [2776, 1045], [2776, 1045], [2776, 875]], [[2803, 875], [2803, 1045], [2803, 1045], [2803, 875]], [[2843, 875], [2843, 1045], [2843, 1045], [2843, 875]], [[2869, 875], [2869, 1045], [2869, 1045], [2869, 875]], [[2896, 875], [2896, 1045], [2896, 1045], [2896, 875]], [[2923, 875], [2923, 1045], [2923, 1045], [2923, 875]], [[2963, 875], [2963, 1045], [2963, 1045], [2963, 875]], [[2989, 875], [2989, 1045], [2989, 1045], [2989, 875]], [[3016, 875], [3016, 1045], [3030, 1045], [3030, 875]], [[3043, 875], [3043, 1045], [3056, 1045], [3056, 875]], [[3123, 875], [3123, 1045], [3123, 1045], [3123, 875]], [[3136, 875], [3136, 1045], [3150, 1045], [3150, 875]], [[3163, 875], [3163, 1045], [3163, 1045], [3163, 875]]], "confidences": [0.9999685287475586, 0.7677904963493347, 0.9990272521972656, 0.9999896287918091, 0.9995161294937134, 0.9926141500473022, 0.9854110479354858, 0.9970456957817078, 0.9999581575393677, 0.9979928731918335, 0.9991545677185059, 0.9992891550064087, 0.9991033673286438, 0.9999771118164062, 0.9999916553497314, 0.6514611840248108, 0.7720828652381897, 0.9889744520187378, 0.9997015595436096, 0.9999628067016602, 0.8422739505767822, 0.9995865225791931, 0.9994408488273621, 0.9979164004325867, 0.9996676445007324, 0.9994599223136902, 0.9910250902175903, 0.9999783039093018, 0.9963022470474243, 0.6243562698364258, 0.9998552799224854, 0.9986860156059265, 0.999666690826416, 0.66583651304245, 0.9677010178565979, 0.9999728202819824, 0.9999947547912598, 0.9995187520980835, 0.9917859435081482, 0.9952231049537659, 0.988452136516571, 0.9948959946632385, 0.997393012046814, 0.984053909778595, 0.9514071345329285, 0.9919347763061523, 0.9954736828804016, 0.535146176815033, 0.9996613264083862, 0.9889037013053894, 0.9973983764648438, 0.7873133420944214, 0.814349353313446, 0.9971019625663757, 0.9976648092269897, 0.9264478087425232, 0.9916608929634094, 0.9994589686393738, 0.9972610473632812, 0.9991005659103394, 0.999413013458252, 0.9994602799415588, 0.9613319039344788, 0.9990511536598206, 0.9996521472930908, 0.7384001612663269, 0.9942810535430908, 0.9455984234809875, 0.9997734427452087, 0.9952616691589355, 0.9989475607872009, 0.9959900975227356, 0.9930391907691956, 0.9999250173568726, 0.998917818069458, 0.6285094618797302, 0.8354631662368774, 0.9813341498374939], "line": {"id": "line_5", "bbox": [347, 875, 3203, 1045], "type": "bbox"}}, {"prediction": "\u0627\u0647\u062a\u0644\u0628\u0642\u0648 \u0627\u0647\u0628 \u0627\u0643\u0631\u0628\u062a \u0627\u0647\u064a\u0644\u0627 \u062a\u0631\u0638\u0646\u0648 \u0637\u0641\u0633\u0644\u0627 \u062a\u062d\u062a\u0641\u0648 \u062a\u062d\u0628\u0635\u0654\u0627 \u0627\u0644\u0641 \u0627\u0647\u0628 \u062a\u0638\u0641\u062a\u062d\u0627 \u062f\u0642 \u0628\u064a\u0637 \u0647\u064a\u0641\u0648", "cuts": [[[349, 1045], [349, 1187], [362, 1187], [362, 1045]], [[375, 1045], [375, 1187], [375, 1187], [375, 1045]], [[425, 1045], [425, 1187], [425, 1187], [425, 1045]], [[451, 1045], [451, 1187], [451, 1187], [451, 1045]], [[476, 1045], [476, 1187], [476, 1187], [476, 1045]], [[502, 1045], [502, 1187], [502, 1187], [502, 1045]], [[552, 1045], [552, 1187], [565, 1187], [565, 1045]], [[578, 1045], [578, 1187], [603, 1187], [603, 1045]], [[629, 1045], [629, 1187], [641, 1187], [641, 1045]], [[692, 1045], [692, 1187], [705, 1187], [705, 1045]], [[730, 1045], [730, 1187], [730, 1187], [730, 1045]], [[756, 1045], [756, 1187], [756, 1187], [756, 1045]], [[781, 1045], [781, 1187], [781, 1187], [781, 1045]], [[794, 1045], [794, 1187], [794, 1187], [794, 1045]], [[857, 1045], [857, 1187], [857, 1187], [857, 1045]], [[870, 1045], [870, 1187], [870, 1187], [870, 1045]], [[896, 1045], [896, 1187], [896, 1187], [896, 1045]], [[921, 1045], [921, 1187], [934, 1187], [934, 1045]], [[959, 1045], [959, 1187], [972, 1187], [972, 1045]], [[984, 1045], [984, 1187], [984, 1187], [984, 1045]], [[1023, 1045], [1023, 1187], [1023, 1187], [1023, 1045]], [[1048, 1045], [1048, 1187], [1048, 1187], [1048, 1045]], [[1061, 1045], [1061, 1187], [1073, 1187], [1073, 1045]], [[1086, 1045], [1086, 1187], [1086, 1187], [1086, 1045]], [[1137, 1045], [1137, 1187], [1137, 1187], [1137, 1045]], [[1213, 1045], [1213, 1187], [1213, 1187], [1213, 1045]], [[1239, 1045], [1239, 1187], [1239, 1187], [1239, 1045]], [[1289, 1045], [1289, 1187], [1289, 1187], [1289, 1045]], [[1340, 1045], [1340, 1187], [1340, 1187], [1340, 1045]], [[1366, 1045], [1366, 1187], [1378, 1187], [1378, 1045]], [[1417, 1045], [1417, 1187], [1417, 1187], [1417, 1045]], [[1480, 1045], [1480, 1187], [1480, 1187], [1480, 1045]], [[1518, 1045], [1518, 1187], [1531, 1187], [1531, 1045]], [[1556, 1045], [1556, 1187], [1556, 1187], [1556, 1045]], [[1569, 1045], [1569, 1187], [1582, 1187], [1582, 1045]], [[1594, 1045], [1594, 1187], [1607, 1187], [1607, 1045]], [[1645, 1045], [1645, 1187], [1645, 1187], [1645, 1045]], [[1709, 1045], [1709, 1187], [1709, 1187], [1709, 1045]], [[1760, 1045], [1760, 1187], [1760, 1187], [1760, 1045]], [[1785, 1045], [1785, 1187], [1785, 1187], [1785, 1045]], [[1836, 1045], [1836, 1187], [1836, 1187], [1836, 1045]], [[1861, 1045], [1861, 1187], [1874, 1187], [1874, 1045]], [[1925, 1045], [1925, 1187], [1925, 1187], [1925, 1045]], [[1988, 1045], [1988, 1187], [1988, 1187], [1988, 1045]], [[2039, 1045], [2039, 1187], [2039, 1187], [2039, 1045]], [[2090, 1045], [2090, 1187], [2090, 1187], [2090, 1045]], [[2128, 1045], [2128, 1187], [2128, 1187], [2128, 1045]], [[2141, 1045], [2141, 1187], [2154, 1187], [2154, 1045]], [[2166, 1045], [2166, 1187], [2179, 1187], [2179, 1045]], [[2204, 1045], [2204, 1187], [2204, 1187], [2204, 1045]], [[2243, 1045], [2243, 1187], [2243, 1187], [2243, 1045]], [[2268, 1045], [2268, 1187], [2268, 1187], [2268, 1045]], [[2293, 1045], [2293, 1187], [2306, 1187], [2306, 1045]], [[2319, 1045], [2319, 1187], [2331, 1187], [2331, 1045]], [[2344, 1045], [2344, 1187], [2357, 1187], [2357, 1045]], [[2370, 1045], [2370, 1187], [2370, 1187], [2370, 1045]], [[2395, 1045], [2395, 1187], [2408, 1187], [2408, 1045]], [[2471, 1045], [2471, 1187], [2471, 1187], [2471, 1045]], [[2522, 1045], [2522, 1187], [2522, 1187], [2522, 1045]], [[2586, 1045], [2586, 1187], [2586, 1187], [2586, 1045]], [[2611, 1045], [2611, 1187], [2611, 1187], [2611, 1045]], [[2649, 1045], [2649, 1187], [2649, 1187], [2649, 1045]], [[2700, 1045], [2700, 1187], [2713, 1187], [2713, 1045]], [[2725, 1045], [2725, 1187], [2725, 1187], [2725, 1045]], [[2764, 1045], [2764, 1187], [2776, 1187], [2776, 1045]], [[2789, 1045], [2789, 1187], [2802, 1187], [2802, 1045]], [[2827, 1045], [2827, 1187], [2827, 1187], [2827, 1045]], [[2865, 1045], [2865, 1187], [2878, 1187], [2878, 1045]], [[2929, 1045], [2929, 1187], [2929, 1187], [2929, 1045]], [[2967, 1045], [2967, 1187], [2967, 1187], [2967, 1045]], [[3005, 1045], [3005, 1187], [3030, 1187], [3030, 1045]], [[3056, 1045], [3056, 1187], [3056, 1187], [3056, 1045]], [[3094, 1045], [3094, 1187], [3094, 1187], [3094, 1045]], [[3119, 1045], [3119, 1187], [3119, 1187], [3119, 1045]], [[3170, 1045], [3170, 1187], [3170, 1187], [3170, 1045]]], "confidences": [0.9951897859573364, 0.9994397759437561, 0.9996225833892822, 0.9996881484985352, 0.9991863369941711, 0.522216796875, 0.9999700784683228, 0.9999351501464844, 0.9608615040779114, 0.9998836517333984, 0.9998319149017334, 0.9999574422836304, 0.9995219707489014, 0.9832330346107483, 0.9993361830711365, 0.9289281964302063, 0.9628921747207642, 0.9998667240142822, 0.9999779462814331, 0.9990992546081543, 0.9141392707824707, 0.9998242259025574, 0.9967435002326965, 0.9999244213104248, 0.9998732805252075, 0.9988711476325989, 0.9987514019012451, 0.9988617897033691, 0.6241702437400818, 0.979806125164032, 0.9399409294128418, 0.9999160766601562, 0.9905988574028015, 0.9990541338920593, 0.9999421834945679, 0.960566520690918, 0.9946881532669067, 0.9999477863311768, 0.833644688129425, 0.9959911704063416, 0.9991551637649536, 0.9996606111526489, 0.9877347350120544, 0.9679129123687744, 0.9596376419067383, 0.986365795135498, 0.9459453225135803, 0.9946697354316711, 0.9895763397216797, 0.9849644303321838, 0.903245210647583, 0.7387762665748596, 0.9958617687225342, 0.9985413551330566, 0.9970884919166565, 0.6466483473777771, 0.9444775581359863, 0.8205862045288086, 0.9942649006843567, 0.984862744808197, 0.9972048401832581, 0.8482417464256287, 0.9919762015342712, 0.9672141671180725, 0.9989006519317627, 0.9998776912689209, 0.9994097948074341, 0.9945313334465027, 0.9889154434204102, 0.9952592253684998, 0.999559223651886, 0.99980229139328, 0.9894945025444031, 0.7909385561943054, 0.9917729496955872], "line": {"id": "line_6", "bbox": [349, 1045, 3183, 1187], "type": "bbox"}}, {"prediction": "\u0645\u0639\u0646 \u0644\u0627\u0642 \u0629\u0639\u0627\u0633\u0644\u0627 \u0627\u0640\u0647\u0631\u0636\u062d\u0627 \u0644\u0627\u0642\u0641 \u0643\u0644\u0630 \u0644\u062b\u0645 \u062a\u0639\u0646\u0635 \u062a\u064a\u0633\u0645\u0654\u0627 \u0627\u0644\u0643\u0648 \u0627\u0647\u0639\u0636\u0648\u0645 \u0649\u0644\u0627 \u0627\u0647\u062f\u062f\u0631\u0648", "cuts": [[[342, 1217], [342, 1386], [354, 1386], [354, 1217]], [[404, 1217], [404, 1386], [404, 1386], [404, 1217]], [[428, 1217], [428, 1386], [428, 1386], [428, 1217]], [[453, 1217], [453, 1386], [465, 1386], [465, 1217]], [[527, 1217], [527, 1386], [527, 1386], [527, 1217]], [[539, 1217], [539, 1386], [539, 1386], [539, 1217]], [[564, 1217], [564, 1386], [564, 1386], [564, 1217]], [[589, 1217], [589, 1386], [613, 1386], [613, 1217]], [[638, 1217], [638, 1386], [650, 1386], [650, 1217]], [[675, 1217], [675, 1386], [675, 1386], [675, 1217]], [[712, 1217], [712, 1386], [724, 1386], [724, 1217]], [[761, 1217], [761, 1386], [774, 1386], [774, 1217]], [[786, 1217], [786, 1386], [798, 1386], [798, 1217]], [[811, 1217], [811, 1386], [823, 1386], [823, 1217]], [[835, 1217], [835, 1386], [835, 1386], [835, 1217]], [[860, 1217], [860, 1386], [872, 1386], [872, 1217]], [[909, 1217], [909, 1386], [922, 1386], [922, 1217]], [[1020, 1217], [1020, 1386], [1020, 1386], [1020, 1217]], [[1082, 1217], [1082, 1386], [1082, 1386], [1082, 1217]], [[1119, 1217], [1119, 1386], [1131, 1386], [1131, 1217]], [[1181, 1217], [1181, 1386], [1193, 1386], [1193, 1217]], [[1242, 1217], [1242, 1386], [1255, 1386], [1255, 1217]], [[1267, 1217], [1267, 1386], [1267, 1386], [1267, 1217]], [[1329, 1217], [1329, 1386], [1341, 1386], [1341, 1217]], [[1353, 1217], [1353, 1386], [1366, 1386], [1366, 1217]], [[1390, 1217], [1390, 1386], [1390, 1386], [1390, 1217]], [[1427, 1217], [1427, 1386], [1427, 1386], [1427, 1217]], [[1452, 1217], [1452, 1386], [1452, 1386], [1452, 1217]], [[1501, 1217], [1501, 1386], [1501, 1386], [1501, 1217]], [[1551, 1217], [1551, 1386], [1563, 1386], [1563, 1217]], [[1575, 1217], [1575, 1386], [1588, 1386], [1588, 1217]], [[1612, 1217], [1612, 1386], [1625, 1386], [1625, 1217]], [[1686, 1217], [1686, 1386], [1699, 1386], [1699, 1217]], [[1711, 1217], [1711, 1386], [1723, 1386], [1723, 1217]], [[1736, 1217], [1736, 1386], [1748, 1386], [1748, 1217]], [[1773, 1217], [1773, 1386], [1785, 1386], [1785, 1217]], [[1822, 1217], [1822, 1386], [1835, 1386], [1835, 1217]], [[1884, 1217], [1884, 1386], [1884, 1386], [1884, 1217]], [[1921, 1217], [1921, 1386], [1933, 1386], [1933, 1217]], [[1970, 1217], [1970, 1386], [1983, 1386], [1983, 1217]], [[2007, 1217], [2007, 1386], [2020, 1386], [2020, 1217]], [[2069, 1217], [2069, 1386], [2069, 1386], [2069, 1217]], [[2118, 1217], [2118, 1386], [2118, 1386], [2118, 1217]], [[2155, 1217], [2155, 1386], [2168, 1386], [2168, 1217]], [[2192, 1217], [2192, 1386], [2205, 1386], [2205, 1217]], [[2217, 1217], [2217, 1386], [2229, 1386], [2229, 1217]], [[2242, 1217], [2242, 1386], [2254, 1386], [2254, 1217]], [[2266, 1217], [2266, 1386], [2279, 1386], [2279, 1217]], [[2316, 1217], [2316, 1386], [2328, 1386], [2328, 1217]], [[2353, 1217], [2353, 1386], [2365, 1386], [2365, 1217]], [[2377, 1217], [2377, 1386], [2377, 1386], [2377, 1217]], [[2439, 1217], [2439, 1386], [2439, 1386], [2439, 1217]], [[2464, 1217], [2464, 1386], [2476, 1386], [2476, 1217]], [[2501, 1217], [2501, 1386], [2501, 1386], [2501, 1217]], [[2525, 1217], [2525, 1386], [2525, 1386], [2525, 1217]], [[2575, 1217], [2575, 1386], [2575, 1386], [2575, 1217]], [[2624, 1217], [2624, 1386], [2624, 1386], [2624, 1217]], [[2698, 1217], [2698, 1386], [2698, 1386], [2698, 1217]], [[2735, 1217], [2735, 1386], [2735, 1386], [2735, 1217]], [[2760, 1217], [2760, 1386], [2772, 1386], [2772, 1217]], [[2821, 1217], [2821, 1386], [2821, 1386], [2821, 1217]], [[2834, 1217], [2834, 1386], [2834, 1386], [2834, 1217]], [[2858, 1217], [2858, 1386], [2858, 1386], [2858, 1217]], [[2871, 1217], [2871, 1386], [2895, 1386], [2895, 1217]], [[2932, 1217], [2932, 1386], [2932, 1386], [2932, 1217]], [[2957, 1217], [2957, 1386], [2957, 1386], [2957, 1217]], [[3019, 1217], [3019, 1386], [3019, 1386], [3019, 1217]], [[3056, 1217], [3056, 1386], [3056, 1386], [3056, 1217]], [[3105, 1217], [3105, 1386], [3105, 1386], [3105, 1217]], [[3154, 1217], [3154, 1386], [3167, 1386], [3167, 1217]]], "confidences": [0.9998668432235718, 0.9939495325088501, 0.9999988079071045, 0.9995810389518738, 0.9973961114883423, 0.9925320744514465, 0.9987910389900208, 0.9998966455459595, 0.9999004602432251, 0.981810450553894, 0.99687659740448, 0.9998045563697815, 0.9998052716255188, 0.9931424856185913, 0.9988383650779724, 0.9999014139175415, 0.8104275465011597, 0.9999496936798096, 0.9994741082191467, 0.9992212057113647, 0.9998238682746887, 0.9998308420181274, 0.9993120431900024, 0.998877227306366, 0.999991774559021, 0.9525014758110046, 0.9995104074478149, 0.9983181953430176, 0.9150962829589844, 0.9546083807945251, 0.9991251826286316, 0.9999608993530273, 0.9821158647537231, 0.9985532164573669, 0.9999796152114868, 0.9997883439064026, 0.9903550148010254, 0.9928650856018066, 0.9961369633674622, 0.9909413456916809, 0.9947617650032043, 0.9631214737892151, 0.9943027496337891, 0.9706187844276428, 0.998685896396637, 0.9429393410682678, 0.9975836277008057, 0.9990416169166565, 0.9978206157684326, 0.9992419481277466, 0.9985764026641846, 0.9849389791488647, 0.9799551367759705, 0.9954046010971069, 0.9584742784500122, 0.9991908669471741, 0.994751513004303, 0.9992371797561646, 0.8995857834815979, 0.99809330701828, 0.999932050704956, 0.8690654039382935, 0.5987728834152222, 0.9988412261009216, 0.6917583346366882, 0.9999560117721558, 0.904447615146637, 0.9634166955947876, 0.9973717927932739, 0.9989099502563477], "line": {"id": "line_7", "bbox": [342, 1217, 3179, 1386], "type": "bbox"}}, {"prediction": "\u0630\u0640\u062e\u0646 \u0649\u0631\u0627\u062f \u0646\u0645 \u0646\u0627\u0644\u0641\u0644\u0627 \u062a\u064a\u0628\u0644\u0627 \u0649\u0644\u0627 \u0636\u0645\u0627 \u0647\u0644 \u0644\u0627\u0642\u0641 \u0647\u0645\u062f\u062e \u0636\u0639\u0628 \u0649\u0639\u062f\u062a\u0633\u0627\u0642 \u0646\u064a\u0646\u0645\u0654\u0648\u0645\u0644\u0627 \u0631\u064a\u0645\u0654\u0627\u0627\u064a", "cuts": [[[363, 1386], [363, 1518], [363, 1518], [363, 1386]], [[413, 1386], [413, 1518], [426, 1518], [426, 1386]], [[514, 1386], [514, 1518], [514, 1518], [514, 1386]], [[551, 1386], [551, 1518], [551, 1518], [551, 1386]], [[564, 1386], [564, 1518], [589, 1518], [589, 1386]], [[652, 1386], [652, 1518], [652, 1518], [652, 1386]], [[702, 1386], [702, 1518], [715, 1518], [715, 1386]], [[740, 1386], [740, 1518], [752, 1518], [752, 1386]], [[765, 1386], [765, 1518], [777, 1518], [777, 1386]], [[802, 1386], [802, 1518], [815, 1518], [815, 1386]], [[865, 1386], [865, 1518], [865, 1518], [865, 1386]], [[903, 1386], [903, 1518], [903, 1518], [903, 1386]], [[928, 1386], [928, 1518], [940, 1518], [940, 1386]], [[991, 1386], [991, 1518], [991, 1518], [991, 1386]], [[1041, 1386], [1041, 1518], [1053, 1518], [1053, 1386]], [[1066, 1386], [1066, 1518], [1078, 1518], [1078, 1386]], [[1116, 1386], [1116, 1518], [1116, 1518], [1116, 1386]], [[1141, 1386], [1141, 1518], [1141, 1518], [1141, 1386]], [[1154, 1386], [1154, 1518], [1166, 1518], [1166, 1386]], [[1179, 1386], [1179, 1518], [1191, 1518], [1191, 1386]], [[1229, 1386], [1229, 1518], [1229, 1518], [1229, 1386]], [[1279, 1386], [1279, 1518], [1279, 1518], [1279, 1386]], [[1304, 1386], [1304, 1518], [1304, 1518], [1304, 1386]], [[1329, 1386], [1329, 1518], [1342, 1518], [1342, 1386]], [[1354, 1386], [1354, 1518], [1354, 1518], [1354, 1386]], [[1367, 1386], [1367, 1518], [1380, 1518], [1380, 1386]], [[1417, 1386], [1417, 1518], [1417, 1518], [1417, 1386]], [[1430, 1386], [1430, 1518], [1442, 1518], [1442, 1386]], [[1455, 1386], [1455, 1518], [1467, 1518], [1467, 1386]], [[1480, 1386], [1480, 1518], [1480, 1518], [1480, 1386]], [[1568, 1386], [1568, 1518], [1568, 1518], [1568, 1386]], [[1618, 1386], [1618, 1518], [1631, 1518], [1631, 1386]], [[1668, 1386], [1668, 1518], [1668, 1518], [1668, 1386]], [[1681, 1386], [1681, 1518], [1693, 1518], [1693, 1386]], [[1731, 1386], [1731, 1518], [1743, 1518], [1743, 1386]], [[1769, 1386], [1769, 1518], [1769, 1518], [1769, 1386]], [[1781, 1386], [1781, 1518], [1794, 1518], [1794, 1386]], [[1844, 1386], [1844, 1518], [1844, 1518], [1844, 1386]], [[1869, 1386], [1869, 1518], [1869, 1518], [1869, 1386]], [[1907, 1386], [1907, 1518], [1907, 1518], [1907, 1386]], [[1932, 1386], [1932, 1518], [1932, 1518], [1932, 1386]], [[1957, 1386], [1957, 1518], [1969, 1518], [1969, 1386]], [[1982, 1386], [1982, 1518], [1994, 1518], [1994, 1386]], [[2032, 1386], [2032, 1518], [2032, 1518], [2032, 1386]], [[2082, 1386], [2082, 1518], [2082, 1518], [2082, 1386]], [[2120, 1386], [2120, 1518], [2132, 1518], [2132, 1386]], [[2158, 1386], [2158, 1518], [2170, 1518], [2170, 1386]], [[2245, 1386], [2245, 1518], [2258, 1518], [2258, 1386]], [[2296, 1386], [2296, 1518], [2308, 1518], [2308, 1386]], [[2333, 1386], [2333, 1518], [2333, 1518], [2333, 1386]], [[2358, 1386], [2358, 1518], [2371, 1518], [2371, 1386]], [[2421, 1386], [2421, 1518], [2434, 1518], [2434, 1386]], [[2459, 1386], [2459, 1518], [2459, 1518], [2459, 1386]], [[2521, 1386], [2521, 1518], [2521, 1518], [2521, 1386]], [[2546, 1386], [2546, 1518], [2546, 1518], [2546, 1386]], [[2597, 1386], [2597, 1518], [2597, 1518], [2597, 1386]], [[2622, 1386], [2622, 1518], [2634, 1518], [2634, 1386]], [[2647, 1386], [2647, 1518], [2647, 1518], [2647, 1386]], [[2672, 1386], [2672, 1518], [2697, 1518], [2697, 1386]], [[2735, 1386], [2735, 1518], [2747, 1518], [2747, 1386]], [[2772, 1386], [2772, 1518], [2772, 1518], [2772, 1386]], [[2797, 1386], [2797, 1518], [2810, 1518], [2810, 1386]], [[2835, 1386], [2835, 1518], [2835, 1518], [2835, 1386]], [[2873, 1386], [2873, 1518], [2873, 1518], [2873, 1386]], [[2885, 1386], [2885, 1518], [2898, 1518], [2898, 1386]], [[2910, 1386], [2910, 1518], [2910, 1518], [2910, 1386]], [[2923, 1386], [2923, 1518], [2923, 1518], [2923, 1386]], [[2948, 1386], [2948, 1518], [2961, 1518], [2961, 1386]], [[2973, 1386], [2973, 1518], [2973, 1518], [2973, 1386]], [[3011, 1386], [3011, 1518], [3023, 1518], [3023, 1386]], [[3036, 1386], [3036, 1518], [3036, 1518], [3036, 1386]], [[3073, 1386], [3073, 1518], [3073, 1518], [3073, 1386]], [[3099, 1386], [3099, 1518], [3099, 1518], [3099, 1386]], [[3111, 1386], [3111, 1518], [3111, 1518], [3111, 1386]], [[3136, 1386], [3136, 1518], [3149, 1518], [3149, 1386]], [[3161, 1386], [3161, 1518], [3161, 1518], [3161, 1386]]], "confidences": [0.9999401569366455, 0.9998226761817932, 0.9994499087333679, 0.9997947812080383, 0.9999337196350098, 0.9999203681945801, 0.9999982118606567, 0.9687603116035461, 0.9988839030265808, 0.998324453830719, 0.9755439758300781, 0.9999986886978149, 0.9999879598617554, 0.9918851852416992, 0.8710991144180298, 0.9998831748962402, 0.9799282550811768, 0.9640147686004639, 0.9995965361595154, 0.9998983144760132, 0.9994907379150391, 0.9999008178710938, 0.9999949932098389, 0.9999257326126099, 0.9849360585212708, 0.9992073178291321, 0.9999591112136841, 0.9999978542327881, 0.9979308843612671, 0.9989111423492432, 0.9988147020339966, 0.999931812286377, 0.9295510649681091, 0.9994879961013794, 0.92276930809021, 0.9905250668525696, 0.9945216178894043, 0.997312605381012, 0.9944058656692505, 0.7167887091636658, 0.9777094125747681, 0.9938310384750366, 0.9831866025924683, 0.9466024041175842, 0.9909795522689819, 0.9944062232971191, 0.9905561804771423, 0.9995214939117432, 0.9992606043815613, 0.9838502407073975, 0.9978698492050171, 0.9995675683021545, 0.9971568584442139, 0.9990284442901611, 0.9905042052268982, 0.9607644081115723, 0.9984911680221558, 0.7474943399429321, 0.9998549222946167, 0.9999047517776489, 0.9814210534095764, 0.9995946288108826, 0.999559223651886, 0.9958802461624146, 0.9985283613204956, 0.9995490908622742, 0.9966185092926025, 0.9981649518013, 0.8663971424102783, 0.9913069605827332, 0.9690742492675781, 0.9696444869041443, 0.9100111126899719, 0.9691933393478394, 0.9827510714530945, 0.9762600064277649], "line": {"id": "line_8", "bbox": [338, 1386, 3174, 1518], "type": "bbox"}}, {"prediction": "\u062b\u0628\u0644\u064a \u0645\u0644\u0641 \u0647\u0645\u062a\u062e\u0628 \u0647\u064a\u0641 \u0649\u0630\u0644\u0627 \u0637\u0641\u0633\u0644\u0627\u0628 \u0649\u0646\u0654\u064a\u062c\u0644 \u0641\u0627\u0644\u0641\u0644\u0627 \u0642\u0648\u062f\u0646\u0635\u0644\u0627 \u062d\u062a\u0641\u0627 \u0645\u062b \u0647\u062d\u062a\u0641\u0627\u0648 \u064a\u0641\u0632\u0627\u062e \u0646\u0645 \u0647\u062d\u0627\u062a\u0641\u0645", "cuts": [[[361, 1567], [361, 1720], [361, 1720], [361, 1567]], [[413, 1567], [413, 1720], [413, 1720], [413, 1567]], [[439, 1567], [439, 1720], [439, 1720], [439, 1567]], [[465, 1567], [465, 1720], [465, 1720], [465, 1567]], [[491, 1567], [491, 1720], [504, 1720], [504, 1567]], [[517, 1567], [517, 1720], [530, 1720], [530, 1567]], [[543, 1567], [543, 1720], [543, 1720], [543, 1567]], [[556, 1567], [556, 1720], [569, 1720], [569, 1567]], [[582, 1567], [582, 1720], [595, 1720], [595, 1567]], [[621, 1567], [621, 1720], [621, 1720], [621, 1567]], [[660, 1567], [660, 1720], [660, 1720], [660, 1567]], [[699, 1567], [699, 1720], [699, 1720], [699, 1567]], [[725, 1567], [725, 1720], [725, 1720], [725, 1567]], [[764, 1567], [764, 1720], [764, 1720], [764, 1567]], [[777, 1567], [777, 1720], [790, 1720], [790, 1567]], [[816, 1567], [816, 1720], [816, 1720], [816, 1567]], [[855, 1567], [855, 1720], [855, 1720], [855, 1567]], [[881, 1567], [881, 1720], [881, 1720], [881, 1567]], [[907, 1567], [907, 1720], [920, 1720], [920, 1567]], [[972, 1567], [972, 1720], [972, 1720], [972, 1567]], [[1024, 1567], [1024, 1720], [1024, 1720], [1024, 1567]], [[1051, 1567], [1051, 1720], [1051, 1720], [1051, 1567]], [[1077, 1567], [1077, 1720], [1077, 1720], [1077, 1567]], [[1090, 1567], [1090, 1720], [1103, 1720], [1103, 1567]], [[1142, 1567], [1142, 1720], [1155, 1720], [1155, 1567]], [[1207, 1567], [1207, 1720], [1207, 1720], [1207, 1567]], [[1259, 1567], [1259, 1720], [1272, 1720], [1272, 1567]], [[1298, 1567], [1298, 1720], [1311, 1720], [1311, 1567]], [[1324, 1567], [1324, 1720], [1337, 1720], [1337, 1567]], [[1350, 1567], [1350, 1720], [1350, 1720], [1350, 1567]], [[1363, 1567], [1363, 1720], [1376, 1720], [1376, 1567]], [[1415, 1567], [1415, 1720], [1415, 1720], [1415, 1567]], [[1428, 1567], [1428, 1720], [1441, 1720], [1441, 1567]], [[1454, 1567], [1454, 1720], [1454, 1720], [1454, 1567]], [[1467, 1567], [1467, 1720], [1467, 1720], [1467, 1567]], [[1493, 1567], [1493, 1720], [1506, 1720], [1506, 1567]], [[1519, 1567], [1519, 1720], [1519, 1720], [1519, 1567]], [[1545, 1567], [1545, 1720], [1558, 1720], [1558, 1567]], [[1597, 1567], [1597, 1720], [1597, 1720], [1597, 1567]], [[1636, 1567], [1636, 1720], [1662, 1720], [1662, 1567]], [[1675, 1567], [1675, 1720], [1675, 1720], [1675, 1567]], [[1714, 1567], [1714, 1720], [1714, 1720], [1714, 1567]], [[1740, 1567], [1740, 1720], [1740, 1720], [1740, 1567]], [[1753, 1567], [1753, 1720], [1753, 1720], [1753, 1567]], [[1766, 1567], [1766, 1720], [1779, 1720], [1779, 1567]], [[1831, 1567], [1831, 1720], [1831, 1720], [1831, 1567]], [[1883, 1567], [1883, 1720], [1883, 1720], [1883, 1567]], [[1935, 1567], [1935, 1720], [1935, 1720], [1935, 1567]], [[1961, 1567], [1961, 1720], [1961, 1720], [1961, 1567]], [[2013, 1567], [2013, 1720], [2013, 1720], [2013, 1567]], [[2052, 1567], [2052, 1720], [2052, 1720], [2052, 1567]], [[2065, 1567], [2065, 1720], [2078, 1720], [2078, 1567]], [[2091, 1567], [2091, 1720], [2104, 1720], [2104, 1567]], [[2130, 1567], [2130, 1720], [2130, 1720], [2130, 1567]], [[2182, 1567], [2182, 1720], [2182, 1720], [2182, 1567]], [[2208, 1567], [2208, 1720], [2208, 1720], [2208, 1567]], [[2234, 1567], [2234, 1720], [2247, 1720], [2247, 1567]], [[2260, 1567], [2260, 1720], [2260, 1720], [2260, 1567]], [[2286, 1567], [2286, 1720], [2299, 1720], [2299, 1567]], [[2338, 1567], [2338, 1720], [2338, 1720], [2338, 1567]], [[2364, 1567], [2364, 1720], [2377, 1720], [2377, 1567]], [[2390, 1567], [2390, 1720], [2390, 1720], [2390, 1567]], [[2429, 1567], [2429, 1720], [2429, 1720], [2429, 1567]], [[2482, 1567], [2482, 1720], [2482, 1720], [2482, 1567]], [[2508, 1567], [2508, 1720], [2508, 1720], [2508, 1567]], [[2534, 1567], [2534, 1720], [2534, 1720], [2534, 1567]], [[2586, 1567], [2586, 1720], [2586, 1720], [2586, 1567]], [[2612, 1567], [2612, 1720], [2625, 1720], [2625, 1567]], [[2651, 1567], [2651, 1720], [2651, 1720], [2651, 1567]], [[2664, 1567], [2664, 1720], [2664, 1720], [2664, 1567]], [[2716, 1567], [2716, 1720], [2716, 1720], [2716, 1567]], [[2742, 1567], [2742, 1720], [2742, 1720], [2742, 1567]], [[2768, 1567], [2768, 1720], [2781, 1720], [2781, 1567]], [[2807, 1567], [2807, 1720], [2820, 1720], [2820, 1567]], [[2859, 1567], [2859, 1720], [2859, 1720], [2859, 1567]], [[2898, 1567], [2898, 1720], [2898, 1720], [2898, 1567]], [[2924, 1567], [2924, 1720], [2937, 1720], [2937, 1567]], [[2963, 1567], [2963, 1720], [2963, 1720], [2963, 1567]], [[3002, 1567], [3002, 1720], [3002, 1720], [3002, 1567]], [[3054, 1567], [3054, 1720], [3054, 1720], [3054, 1567]], [[3080, 1567], [3080, 1720], [3080, 1720], [3080, 1567]], [[3119, 1567], [3119, 1720], [3119, 1720], [3119, 1567]], [[3145, 1567], [3145, 1720], [3158, 1720], [3158, 1567]]], "confidences": [0.9997847676277161, 0.8071998953819275, 0.9448097944259644, 0.5688155293464661, 0.9998739957809448, 0.9982267022132874, 0.9191160798072815, 0.9526958465576172, 0.999830961227417, 0.9999995231628418, 0.9993177652359009, 0.7347162365913391, 0.9999439716339111, 0.9998359680175781, 0.9999669790267944, 0.9836472868919373, 0.7263768315315247, 0.9997736811637878, 0.977462887763977, 0.9863080382347107, 0.9985411167144775, 0.9811128377914429, 0.8683425784111023, 0.9999358654022217, 0.9999024868011475, 0.9963384866714478, 0.9992992877960205, 0.9999573230743408, 0.9997846484184265, 0.9697093963623047, 0.9807730913162231, 0.9946768283843994, 0.9997909665107727, 0.9734904170036316, 0.9997913241386414, 0.998504638671875, 0.9990155696868896, 0.9989411234855652, 0.54173743724823, 0.9961016178131104, 0.9981348514556885, 0.9947880506515503, 0.9791303277015686, 0.9969891905784607, 0.9995549321174622, 0.8724766969680786, 0.9847140908241272, 0.9845319390296936, 0.9821130037307739, 0.9790477156639099, 0.838432252407074, 0.8714025616645813, 0.9906243681907654, 0.9986967444419861, 0.9988054037094116, 0.9993483424186707, 0.9957486987113953, 0.8649066090583801, 0.9977350234985352, 0.9995262622833252, 0.9965477585792542, 0.9975600242614746, 0.8291054368019104, 0.9957834482192993, 0.9864495396614075, 0.9921678900718689, 0.9627065658569336, 0.9999135732650757, 0.95207279920578, 0.9991065859794617, 0.9793131947517395, 0.8521793484687805, 0.9974838495254517, 0.9999358654022217, 0.9997324347496033, 0.9997784495353699, 0.9984983205795288, 0.9993114471435547, 0.8725327849388123, 0.9996665716171265, 0.9979007244110107, 0.9954906105995178, 0.9731282591819763], "line": {"id": "line_9", "bbox": [335, 1567, 3171, 1720], "type": "bbox"}}, {"prediction": "\u0647\u0640\u062d\u062a\u0641\u0648 \u0647\u0645\u062a\u062e \u0631\u0633\u0643\u0628 \u0631\u0645\u0654\u0627\u0641 \u062f\u064a\u0634\u0631\u0644\u0627 \u0649\u062f\u064a \u0646\u064a\u0628 \u0639\u0636\u0648\u0641 \u0627\u0645\u0648\u062a\u062d\u0645 \u0637\u0641\u0633\u0644\u0627\u0628 \u0621\u0627\u062c \u0646\u0627 \u0645\u0627\u0644\u063a\u0644\u0627", "cuts": [[[332, 1721], [332, 1880], [345, 1880], [345, 1721]], [[384, 1721], [384, 1880], [397, 1880], [397, 1721]], [[501, 1721], [501, 1880], [514, 1880], [514, 1721]], [[553, 1721], [553, 1880], [553, 1880], [553, 1721]], [[579, 1721], [579, 1880], [579, 1880], [579, 1721]], [[631, 1721], [631, 1880], [644, 1880], [644, 1721]], [[657, 1721], [657, 1880], [683, 1880], [683, 1721]], [[709, 1721], [709, 1880], [709, 1880], [709, 1721]], [[748, 1721], [748, 1880], [748, 1880], [748, 1721]], [[787, 1721], [787, 1880], [787, 1880], [787, 1721]], [[826, 1721], [826, 1880], [826, 1880], [826, 1721]], [[865, 1721], [865, 1880], [878, 1880], [878, 1721]], [[917, 1721], [917, 1880], [917, 1880], [917, 1721]], [[956, 1721], [956, 1880], [969, 1880], [969, 1721]], [[1021, 1721], [1021, 1880], [1021, 1880], [1021, 1721]], [[1100, 1721], [1100, 1880], [1100, 1880], [1100, 1721]], [[1126, 1721], [1126, 1880], [1139, 1880], [1139, 1721]], [[1178, 1721], [1178, 1880], [1191, 1880], [1191, 1721]], [[1217, 1721], [1217, 1880], [1217, 1880], [1217, 1721]], [[1243, 1721], [1243, 1880], [1243, 1880], [1243, 1721]], [[1256, 1721], [1256, 1880], [1269, 1880], [1269, 1721]], [[1282, 1721], [1282, 1880], [1282, 1880], [1282, 1721]], [[1308, 1721], [1308, 1880], [1321, 1880], [1321, 1721]], [[1373, 1721], [1373, 1880], [1386, 1880], [1386, 1721]], [[1412, 1721], [1412, 1880], [1412, 1880], [1412, 1721]], [[1451, 1721], [1451, 1880], [1464, 1880], [1464, 1721]], [[1503, 1721], [1503, 1880], [1503, 1880], [1503, 1721]], [[1516, 1721], [1516, 1880], [1529, 1880], [1529, 1721]], [[1542, 1721], [1542, 1880], [1555, 1880], [1555, 1721]], [[1568, 1721], [1568, 1880], [1568, 1880], [1568, 1721]], [[1659, 1721], [1659, 1880], [1659, 1880], [1659, 1721]], [[1711, 1721], [1711, 1880], [1724, 1880], [1724, 1721]], [[1776, 1721], [1776, 1880], [1776, 1880], [1776, 1721]], [[1802, 1721], [1802, 1880], [1815, 1880], [1815, 1721]], [[1841, 1721], [1841, 1880], [1854, 1880], [1854, 1721]], [[1867, 1721], [1867, 1880], [1867, 1880], [1867, 1721]], [[1893, 1721], [1893, 1880], [1893, 1880], [1893, 1721]], [[1919, 1721], [1919, 1880], [1932, 1880], [1932, 1721]], [[1997, 1721], [1997, 1880], [1997, 1880], [1997, 1721]], [[2062, 1721], [2062, 1880], [2062, 1880], [2062, 1721]], [[2127, 1721], [2127, 1880], [2140, 1880], [2140, 1721]], [[2166, 1721], [2166, 1880], [2166, 1880], [2166, 1721]], [[2192, 1721], [2192, 1880], [2205, 1880], [2205, 1721]], [[2244, 1721], [2244, 1880], [2257, 1880], [2257, 1721]], [[2270, 1721], [2270, 1880], [2283, 1880], [2283, 1721]], [[2322, 1721], [2322, 1880], [2335, 1880], [2335, 1721]], [[2361, 1721], [2361, 1880], [2361, 1880], [2361, 1721]], [[2400, 1721], [2400, 1880], [2400, 1880], [2400, 1721]], [[2413, 1721], [2413, 1880], [2413, 1880], [2413, 1721]], [[2452, 1721], [2452, 1880], [2452, 1880], [2452, 1721]], [[2492, 1721], [2492, 1880], [2505, 1880], [2505, 1721]], [[2557, 1721], [2557, 1880], [2557, 1880], [2557, 1721]], [[2609, 1721], [2609, 1880], [2622, 1880], [2622, 1721]], [[2648, 1721], [2648, 1880], [2648, 1880], [2648, 1721]], [[2661, 1721], [2661, 1880], [2674, 1880], [2674, 1721]], [[2687, 1721], [2687, 1880], [2700, 1880], [2700, 1721]], [[2713, 1721], [2713, 1880], [2726, 1880], [2726, 1721]], [[2765, 1721], [2765, 1880], [2765, 1880], [2765, 1721]], [[2791, 1721], [2791, 1880], [2804, 1880], [2804, 1721]], [[2817, 1721], [2817, 1880], [2830, 1880], [2830, 1721]], [[2869, 1721], [2869, 1880], [2882, 1880], [2882, 1721]], [[2908, 1721], [2908, 1880], [2921, 1880], [2921, 1721]], [[2947, 1721], [2947, 1880], [2960, 1880], [2960, 1721]], [[2973, 1721], [2973, 1880], [2986, 1880], [2986, 1721]], [[2999, 1721], [2999, 1880], [3012, 1880], [3012, 1721]], [[3038, 1721], [3038, 1880], [3064, 1880], [3064, 1721]], [[3077, 1721], [3077, 1880], [3077, 1880], [3077, 1721]], [[3103, 1721], [3103, 1880], [3116, 1880], [3116, 1721]], [[3142, 1721], [3142, 1880], [3142, 1880], [3142, 1721]], [[3155, 1721], [3155, 1880], [3168, 1880], [3168, 1721]]], "confidences": [0.9992807507514954, 0.9998190999031067, 0.9999728202819824, 0.9843649864196777, 0.9963064193725586, 0.9997701048851013, 0.9999123811721802, 0.9973879456520081, 0.999208390712738, 0.9719638824462891, 0.9987868666648865, 0.9970434308052063, 0.9997827410697937, 0.9999145269393921, 0.9791185259819031, 0.9905698299407959, 0.9965567588806152, 0.9983978867530823, 0.9999661445617676, 0.9999735355377197, 0.9999608993530273, 0.9998136162757874, 0.9998812675476074, 0.9741519093513489, 0.9999430179595947, 0.9712876081466675, 0.9996782541275024, 0.9999500513076782, 0.9999716281890869, 0.9999657869338989, 0.9887442588806152, 0.9972917437553406, 0.9999973773956299, 0.997856080532074, 0.9842910766601562, 0.9882177710533142, 0.9942337870597839, 0.9974427223205566, 0.8417571187019348, 0.96481853723526, 0.9993478655815125, 0.9817719459533691, 0.8848896622657776, 0.9665166735649109, 0.9880167245864868, 0.9940158128738403, 0.9972080588340759, 0.9924798011779785, 0.999430239200592, 0.9886217713356018, 0.9994122982025146, 0.9545918107032776, 0.9984832406044006, 0.9997020363807678, 0.9989163875579834, 0.9997730851173401, 0.9998658895492554, 0.9669737815856934, 0.9264388084411621, 0.9989351630210876, 0.9926611185073853, 0.9998636245727539, 0.9986826777458191, 0.9965075850486755, 0.9996894598007202, 0.9975529313087463, 0.9992383718490601, 0.9993176460266113, 0.9744951128959656, 0.9796627163887024], "line": {"id": "line_10", "bbox": [332, 1721, 3207, 1880], "type": "bbox"}}, {"prediction": "\u0647\u0628\u0636\u063a \u0646\u0645 \u062f\u064a\u0634\u0631\u0644\u0627 \u0646\u0643\u0633\u0641 \u0628\u064a\u0637\u0644\u0627 \u064a\u0641 \u0629\u0646\u0648\u0641\u062f\u0645 \u0629\u064a\u0648\u0637\u0645 \u0627\u0647\u0644\u0627\u062d \u0647\u064a\u0641 \u0629\u0639\u0627\u0631\u062f\u0644\u0627 \u0649\u0644\u0627 \u0631\u0638\u0646 \u062d\u062a\u0641 \u0627\u0644\u0646", "cuts": [[[331, 1906], [331, 2053], [331, 2053], [331, 1906]], [[370, 1906], [370, 2053], [370, 2053], [370, 1906]], [[409, 1906], [409, 2053], [409, 2053], [409, 1906]], [[473, 1906], [473, 2053], [473, 2053], [473, 1906]], [[512, 1906], [512, 2053], [525, 2053], [525, 1906]], [[563, 1906], [563, 2053], [563, 2053], [563, 1906]], [[602, 1906], [602, 2053], [602, 2053], [602, 1906]], [[628, 1906], [628, 2053], [641, 2053], [641, 1906]], [[679, 1906], [679, 2053], [679, 2053], [679, 1906]], [[705, 1906], [705, 2053], [705, 2053], [705, 1906]], [[757, 1906], [757, 2053], [757, 2053], [757, 1906]], [[795, 1906], [795, 2053], [808, 2053], [808, 1906]], [[821, 1906], [821, 2053], [821, 2053], [821, 1906]], [[834, 1906], [834, 2053], [847, 2053], [847, 1906]], [[860, 1906], [860, 2053], [873, 2053], [873, 1906]], [[924, 1906], [924, 2053], [937, 2053], [937, 1906]], [[976, 1906], [976, 2053], [976, 2053], [976, 1906]], [[1156, 1906], [1156, 2053], [1156, 2053], [1156, 1906]], [[1182, 1906], [1182, 2053], [1195, 2053], [1195, 1906]], [[1221, 1906], [1221, 2053], [1233, 2053], [1233, 1906]], [[1272, 1906], [1272, 2053], [1272, 2053], [1272, 1906]], [[1337, 1906], [1337, 2053], [1337, 2053], [1337, 1906]], [[1362, 1906], [1362, 2053], [1362, 2053], [1362, 1906]], [[1401, 1906], [1401, 2053], [1414, 2053], [1414, 1906]], [[1427, 1906], [1427, 2053], [1427, 2053], [1427, 1906]], [[1440, 1906], [1440, 2053], [1453, 2053], [1453, 1906]], [[1504, 1906], [1504, 2053], [1504, 2053], [1504, 1906]], [[1517, 1906], [1517, 2053], [1530, 2053], [1530, 1906]], [[1556, 1906], [1556, 2053], [1569, 2053], [1569, 1906]], [[1581, 1906], [1581, 2053], [1594, 2053], [1594, 1906]], [[1620, 1906], [1620, 2053], [1620, 2053], [1620, 1906]], [[1659, 1906], [1659, 2053], [1672, 2053], [1672, 1906]], [[1697, 1906], [1697, 2053], [1697, 2053], [1697, 1906]], [[1736, 1906], [1736, 2053], [1749, 2053], [1749, 1906]], [[1775, 1906], [1775, 2053], [1775, 2053], [1775, 1906]], [[1801, 1906], [1801, 2053], [1813, 2053], [1813, 1906]], [[1839, 1906], [1839, 2053], [1839, 2053], [1839, 1906]], [[1865, 1906], [1865, 2053], [1865, 2053], [1865, 1906]], [[1917, 1906], [1917, 2053], [1917, 2053], [1917, 1906]], [[1955, 1906], [1955, 2053], [1955, 2053], [1955, 1906]], [[2007, 1906], [2007, 2053], [2007, 2053], [2007, 1906]], [[2033, 1906], [2033, 2053], [2045, 2053], [2045, 1906]], [[2071, 1906], [2071, 2053], [2071, 2053], [2071, 1906]], [[2097, 1906], [2097, 2053], [2097, 2053], [2097, 1906]], [[2110, 1906], [2110, 2053], [2123, 2053], [2123, 1906]], [[2136, 1906], [2136, 2053], [2149, 2053], [2149, 1906]], [[2174, 1906], [2174, 2053], [2174, 2053], [2174, 1906]], [[2226, 1906], [2226, 2053], [2239, 2053], [2239, 1906]], [[2265, 1906], [2265, 2053], [2265, 2053], [2265, 1906]], [[2290, 1906], [2290, 2053], [2303, 2053], [2303, 1906]], [[2329, 1906], [2329, 2053], [2329, 2053], [2329, 1906]], [[2355, 1906], [2355, 2053], [2368, 2053], [2368, 1906]], [[2393, 1906], [2393, 2053], [2393, 2053], [2393, 1906]], [[2419, 1906], [2419, 2053], [2419, 2053], [2419, 1906]], [[2458, 1906], [2458, 2053], [2471, 2053], [2471, 1906]], [[2509, 1906], [2509, 2053], [2509, 2053], [2509, 1906]], [[2548, 1906], [2548, 2053], [2548, 2053], [2548, 1906]], [[2574, 1906], [2574, 2053], [2587, 2053], [2587, 1906]], [[2600, 1906], [2600, 2053], [2613, 2053], [2613, 1906]], [[2625, 1906], [2625, 2053], [2625, 2053], [2625, 1906]], [[2677, 1906], [2677, 2053], [2677, 2053], [2677, 1906]], [[2690, 1906], [2690, 2053], [2690, 2053], [2690, 1906]], [[2716, 1906], [2716, 2053], [2716, 2053], [2716, 1906]], [[2729, 1906], [2729, 2053], [2741, 2053], [2741, 1906]], [[2780, 1906], [2780, 2053], [2780, 2053], [2780, 1906]], [[2806, 1906], [2806, 2053], [2819, 2053], [2819, 1906]], [[2857, 1906], [2857, 2053], [2857, 2053], [2857, 1906]], [[2870, 1906], [2870, 2053], [2896, 2053], [2896, 1906]], [[2922, 1906], [2922, 2053], [2935, 2053], [2935, 1906]], [[2973, 1906], [2973, 2053], [2973, 2053], [2973, 1906]], [[2999, 1906], [2999, 2053], [2999, 2053], [2999, 1906]], [[3025, 1906], [3025, 2053], [3025, 2053], [3025, 1906]], [[3051, 1906], [3051, 2053], [3051, 2053], [3051, 1906]], [[3128, 1906], [3128, 2053], [3141, 2053], [3141, 1906]], [[3167, 1906], [3167, 2053], [3167, 2053], [3167, 1906]]], "confidences": [0.9159960746765137, 0.9976181387901306, 0.9996975660324097, 0.9877948760986328, 0.9998071789741516, 0.9193847179412842, 0.9977598190307617, 0.9999691247940063, 0.5213192105293274, 0.9998345375061035, 0.9993784427642822, 0.9995831847190857, 0.999843955039978, 0.9999074935913086, 0.6370336413383484, 0.9995335340499878, 0.9989326596260071, 0.9860919117927551, 0.999936580657959, 0.9919663667678833, 0.9993558526039124, 0.9862826466560364, 0.8228899836540222, 0.9858511090278625, 0.9946306943893433, 0.9999549388885498, 0.999767005443573, 0.9996095299720764, 0.9999788999557495, 0.9988093376159668, 0.5167495608329773, 0.9999475479125977, 0.9990980625152588, 0.9999123811721802, 0.6137158870697021, 0.9979343414306641, 0.9267524480819702, 0.7948201894760132, 0.9545791745185852, 0.9082372188568115, 0.9680109024047852, 0.995181143283844, 0.9705617427825928, 0.8799518942832947, 0.9786372184753418, 0.9424921274185181, 0.605963408946991, 0.9994131326675415, 0.9984038472175598, 0.9985394477844238, 0.9992857575416565, 0.9990177154541016, 0.9961357116699219, 0.9946891069412231, 0.9922365546226501, 0.9932458996772766, 0.9726880788803101, 0.9994227886199951, 0.9991672039031982, 0.9998785257339478, 0.999698281288147, 0.9973363280296326, 0.9942309856414795, 0.9929460883140564, 0.8134588599205017, 0.9999004602432251, 0.9500336647033691, 0.999967098236084, 0.9991039633750916, 0.9984264373779297, 0.8896018266677856, 0.7239580750465393, 0.9947216510772705, 0.9903062582015991, 0.8236287832260132], "line": {"id": "line_11", "bbox": [331, 1906, 3167, 2053], "type": "bbox"}}, {"prediction": "\u0627\u0647\u062f\u0639\u0628 \u0643\u064a\u0644\u0639 \u0642\u062f\u0635\u0627 \u0646\u0644\u0641 \u0627\u062f\u0634\u0627\u0631 \u0641\u0631\u0635\u0646\u0627\u0648 \u0627\u0647\u0646\u0627\u0643\u0645 \u0649\u0644\u0627 \u0627\u0647\u062f\u062f\u0631\u0627 \u0646\u064a\u0637\u0642\u064a \u0646\u0628 \u0649\u0644\u0639\u0644 \u0644\u0627\u0642 \u0645\u0654\u064a", "cuts": [[[334, 2060], [334, 2231], [334, 2231], [334, 2060]], [[360, 2060], [360, 2231], [360, 2231], [360, 2060]], [[425, 2060], [425, 2231], [425, 2231], [425, 2060]], [[451, 2060], [451, 2231], [451, 2231], [451, 2060]], [[477, 2060], [477, 2231], [490, 2231], [490, 2060]], [[503, 2060], [503, 2231], [516, 2231], [516, 2060]], [[569, 2060], [569, 2231], [569, 2231], [569, 2060]], [[621, 2060], [621, 2231], [634, 2231], [634, 2060]], [[647, 2060], [647, 2231], [647, 2231], [647, 2060]], [[673, 2060], [673, 2231], [686, 2231], [686, 2060]], [[712, 2060], [712, 2231], [738, 2231], [738, 2060]], [[803, 2060], [803, 2231], [803, 2231], [803, 2060]], [[842, 2060], [842, 2231], [855, 2231], [855, 2060]], [[894, 2060], [894, 2231], [907, 2231], [907, 2060]], [[946, 2060], [946, 2231], [959, 2231], [959, 2060]], [[972, 2060], [972, 2231], [972, 2231], [972, 2060]], [[1024, 2060], [1024, 2231], [1024, 2231], [1024, 2060]], [[1051, 2060], [1051, 2231], [1064, 2231], [1064, 2060]], [[1077, 2060], [1077, 2231], [1077, 2231], [1077, 2060]], [[1103, 2060], [1103, 2231], [1129, 2231], [1129, 2060]], [[1168, 2060], [1168, 2231], [1181, 2231], [1181, 2060]], [[1220, 2060], [1220, 2231], [1220, 2231], [1220, 2060]], [[1272, 2060], [1272, 2231], [1272, 2231], [1272, 2060]], [[1298, 2060], [1298, 2231], [1311, 2231], [1311, 2060]], [[1350, 2060], [1350, 2231], [1350, 2231], [1350, 2060]], [[1376, 2060], [1376, 2231], [1389, 2231], [1389, 2060]], [[1480, 2060], [1480, 2231], [1480, 2231], [1480, 2060]], [[1520, 2060], [1520, 2231], [1533, 2231], [1533, 2060]], [[1585, 2060], [1585, 2231], [1585, 2231], [1585, 2060]], [[1624, 2060], [1624, 2231], [1624, 2231], [1624, 2060]], [[1650, 2060], [1650, 2231], [1663, 2231], [1663, 2060]], [[1702, 2060], [1702, 2231], [1715, 2231], [1715, 2060]], [[1728, 2060], [1728, 2231], [1754, 2231], [1754, 2060]], [[1767, 2060], [1767, 2231], [1780, 2231], [1780, 2060]], [[1832, 2060], [1832, 2231], [1845, 2231], [1845, 2060]], [[1858, 2060], [1858, 2231], [1871, 2231], [1871, 2060]], [[1884, 2060], [1884, 2231], [1884, 2231], [1884, 2060]], [[1897, 2060], [1897, 2231], [1910, 2231], [1910, 2060]], [[1962, 2060], [1962, 2231], [1962, 2231], [1962, 2060]], [[1989, 2060], [1989, 2231], [2002, 2231], [2002, 2060]], [[2067, 2060], [2067, 2231], [2067, 2231], [2067, 2060]], [[2080, 2060], [2080, 2231], [2080, 2231], [2080, 2060]], [[2106, 2060], [2106, 2231], [2106, 2231], [2106, 2060]], [[2119, 2060], [2119, 2231], [2132, 2231], [2132, 2060]], [[2158, 2060], [2158, 2231], [2158, 2231], [2158, 2060]], [[2184, 2060], [2184, 2231], [2184, 2231], [2184, 2060]], [[2236, 2060], [2236, 2231], [2236, 2231], [2236, 2060]], [[2262, 2060], [2262, 2231], [2275, 2231], [2275, 2060]], [[2314, 2060], [2314, 2231], [2327, 2231], [2327, 2060]], [[2353, 2060], [2353, 2231], [2353, 2231], [2353, 2060]], [[2379, 2060], [2379, 2231], [2392, 2231], [2392, 2060]], [[2431, 2060], [2431, 2231], [2444, 2231], [2444, 2060]], [[2457, 2060], [2457, 2231], [2471, 2231], [2471, 2060]], [[2497, 2060], [2497, 2231], [2497, 2231], [2497, 2060]], [[2549, 2060], [2549, 2231], [2562, 2231], [2562, 2060]], [[2588, 2060], [2588, 2231], [2588, 2231], [2588, 2060]], [[2614, 2060], [2614, 2231], [2627, 2231], [2627, 2060]], [[2679, 2060], [2679, 2231], [2679, 2231], [2679, 2060]], [[2705, 2060], [2705, 2231], [2705, 2231], [2705, 2060]], [[2731, 2060], [2731, 2231], [2744, 2231], [2744, 2060]], [[2848, 2060], [2848, 2231], [2848, 2231], [2848, 2060]], [[2861, 2060], [2861, 2231], [2861, 2231], [2861, 2060]], [[2887, 2060], [2887, 2231], [2887, 2231], [2887, 2060]], [[2913, 2060], [2913, 2231], [2926, 2231], [2926, 2060]], [[2939, 2060], [2939, 2231], [2953, 2231], [2953, 2060]], [[3005, 2060], [3005, 2231], [3005, 2231], [3005, 2060]], [[3018, 2060], [3018, 2231], [3031, 2231], [3031, 2060]], [[3044, 2060], [3044, 2231], [3044, 2231], [3044, 2060]], [[3070, 2060], [3070, 2231], [3083, 2231], [3083, 2060]], [[3096, 2060], [3096, 2231], [3109, 2231], [3109, 2060]], [[3135, 2060], [3135, 2231], [3135, 2231], [3135, 2060]], [[3148, 2060], [3148, 2231], [3148, 2231], [3148, 2060]]], "confidences": [0.9586123824119568, 0.9986465573310852, 0.9566709995269775, 0.9922924041748047, 0.999371349811554, 0.999819815158844, 0.9982818365097046, 0.9999407529830933, 0.9542492032051086, 0.9999266862869263, 0.9977983236312866, 0.9082127213478088, 0.9984015822410583, 0.9999021291732788, 0.9999748468399048, 0.9999212026596069, 0.9956596493721008, 0.9997978806495667, 0.9995704293251038, 0.9999994039535522, 0.9999769926071167, 0.5398281216621399, 0.9999560117721558, 0.9999827146530151, 0.678408682346344, 0.999976634979248, 0.9999359846115112, 0.9980989098548889, 0.9837391376495361, 0.8357751369476318, 0.9999740123748779, 0.9798765182495117, 0.9975171089172363, 0.99134761095047, 0.9869094491004944, 0.8972664475440979, 0.9946538209915161, 0.9883899688720703, 0.9977121353149414, 0.9916154742240906, 0.9904273748397827, 0.9942137598991394, 0.9822350144386292, 0.9995124340057373, 0.6970008015632629, 0.9945922493934631, 0.9990953207015991, 0.9915691018104553, 0.9982545971870422, 0.9470371603965759, 0.9988258481025696, 0.9982693195343018, 0.9856593608856201, 0.9323335886001587, 0.9999984502792358, 0.9984018206596375, 0.9993857145309448, 0.9998714923858643, 0.6906755566596985, 0.9985949397087097, 0.994672954082489, 0.9955617189407349, 0.9956024885177612, 0.9990137815475464, 0.9867492318153381, 0.9986513257026672, 0.9989423155784607, 0.6353587508201599, 0.996551513671875, 0.9758750200271606, 0.8564420342445374, 0.5611870884895325], "line": {"id": "line_12", "bbox": [334, 2060, 3161, 2231], "type": "bbox"}}, {"prediction": "\u0648\u062d\" \u0628\u0631\u0636\u0641 \u0637\u0648\u0633 \u0641\u0644\u0627 \u0647\u0628 \u0649\u0639\u0627\u0633\u0644\u0627 \u0628\u0631\u0636\u0628 \u0645\u062f\u0642\u062a\u0648 \u0629\u064a\u0646\u0633 \u0629\u0632\u064a\u0627\u062c\u0628 \u0639\u0628\u062a\u064a \u0646\u0627 \u0631\u0645\u0654\u0627\u0648\u064b \u0627\u064a\u0639\u0627\u0633", "cuts": [[[354, 2227], [354, 2386], [354, 2386], [354, 2227]], [[393, 2227], [393, 2386], [406, 2386], [406, 2227]], [[459, 2227], [459, 2386], [459, 2386], [459, 2227]], [[472, 2227], [472, 2386], [486, 2386], [486, 2227]], [[551, 2227], [551, 2386], [551, 2386], [551, 2227]], [[617, 2227], [617, 2386], [631, 2386], [631, 2227]], [[670, 2227], [670, 2386], [670, 2386], [670, 2227]], [[710, 2227], [710, 2386], [710, 2386], [710, 2227]], [[736, 2227], [736, 2386], [763, 2386], [763, 2227]], [[815, 2227], [815, 2386], [815, 2386], [815, 2227]], [[881, 2227], [881, 2386], [881, 2386], [881, 2227]], [[921, 2227], [921, 2386], [934, 2386], [934, 2227]], [[961, 2227], [961, 2386], [987, 2386], [987, 2227]], [[1079, 2227], [1079, 2386], [1093, 2386], [1093, 2227]], [[1106, 2227], [1106, 2386], [1119, 2386], [1119, 2227]], [[1132, 2227], [1132, 2386], [1132, 2386], [1132, 2227]], [[1145, 2227], [1145, 2386], [1159, 2386], [1159, 2227]], [[1198, 2227], [1198, 2386], [1198, 2386], [1198, 2227]], [[1225, 2227], [1225, 2386], [1225, 2386], [1225, 2227]], [[1251, 2227], [1251, 2386], [1264, 2386], [1264, 2227]], [[1304, 2227], [1304, 2386], [1304, 2386], [1304, 2227]], [[1330, 2227], [1330, 2386], [1343, 2386], [1343, 2227]], [[1383, 2227], [1383, 2386], [1383, 2386], [1383, 2227]], [[1409, 2227], [1409, 2386], [1423, 2386], [1423, 2227]], [[1449, 2227], [1449, 2386], [1462, 2386], [1462, 2227]], [[1475, 2227], [1475, 2386], [1475, 2386], [1475, 2227]], [[1489, 2227], [1489, 2386], [1502, 2386], [1502, 2227]], [[1581, 2227], [1581, 2386], [1581, 2386], [1581, 2227]], [[1634, 2227], [1634, 2386], [1647, 2386], [1647, 2227]], [[1687, 2227], [1687, 2386], [1687, 2386], [1687, 2227]], [[1726, 2227], [1726, 2386], [1739, 2386], [1739, 2227]], [[1753, 2227], [1753, 2386], [1766, 2386], [1766, 2227]], [[1805, 2227], [1805, 2386], [1819, 2386], [1819, 2227]], [[1871, 2227], [1871, 2386], [1871, 2386], [1871, 2227]], [[1898, 2227], [1898, 2386], [1911, 2386], [1911, 2227]], [[1937, 2227], [1937, 2386], [1937, 2386], [1937, 2227]], [[1990, 2227], [1990, 2386], [1990, 2386], [1990, 2227]], [[2017, 2227], [2017, 2386], [2030, 2386], [2030, 2227]], [[2069, 2227], [2069, 2386], [2069, 2386], [2069, 2227]], [[2096, 2227], [2096, 2386], [2096, 2386], [2096, 2227]], [[2122, 2227], [2122, 2386], [2135, 2386], [2135, 2227]], [[2162, 2227], [2162, 2386], [2175, 2386], [2175, 2227]], [[2201, 2227], [2201, 2386], [2215, 2386], [2215, 2227]], [[2267, 2227], [2267, 2386], [2267, 2386], [2267, 2227]], [[2307, 2227], [2307, 2386], [2307, 2386], [2307, 2227]], [[2333, 2227], [2333, 2386], [2333, 2386], [2333, 2227]], [[2373, 2227], [2373, 2386], [2373, 2386], [2373, 2227]], [[2399, 2227], [2399, 2386], [2413, 2386], [2413, 2227]], [[2426, 2227], [2426, 2386], [2439, 2386], [2439, 2227]], [[2452, 2227], [2452, 2386], [2465, 2386], [2465, 2227]], [[2492, 2227], [2492, 2386], [2505, 2386], [2505, 2227]], [[2545, 2227], [2545, 2386], [2545, 2386], [2545, 2227]], [[2571, 2227], [2571, 2386], [2571, 2386], [2571, 2227]], [[2597, 2227], [2597, 2386], [2597, 2386], [2597, 2227]], [[2624, 2227], [2624, 2386], [2637, 2386], [2637, 2227]], [[2690, 2227], [2690, 2386], [2703, 2386], [2703, 2227]], [[2729, 2227], [2729, 2386], [2729, 2386], [2729, 2227]], [[2756, 2227], [2756, 2386], [2756, 2386], [2756, 2227]], [[2795, 2227], [2795, 2386], [2795, 2386], [2795, 2227]], [[2822, 2227], [2822, 2386], [2835, 2386], [2835, 2227]], [[2861, 2227], [2861, 2386], [2861, 2386], [2861, 2227]], [[2875, 2227], [2875, 2386], [2875, 2386], [2875, 2227]], [[2927, 2227], [2927, 2386], [2927, 2386], [2927, 2227]], [[2941, 2227], [2941, 2386], [2941, 2386], [2941, 2227]], [[2954, 2227], [2954, 2386], [2967, 2386], [2967, 2227]], [[2993, 2227], [2993, 2386], [3006, 2386], [3006, 2227]], [[3033, 2227], [3033, 2386], [3033, 2386], [3033, 2227]], [[3046, 2227], [3046, 2386], [3059, 2386], [3059, 2227]], [[3099, 2227], [3099, 2386], [3099, 2386], [3099, 2227]], [[3138, 2227], [3138, 2386], [3152, 2386], [3152, 2227]]], "confidences": [0.9823002219200134, 0.9972136616706848, 0.9999020099639893, 0.9994245767593384, 0.9984127283096313, 0.9963169097900391, 0.9989890456199646, 0.8085134625434875, 0.9999579191207886, 0.9999361038208008, 0.9942615032196045, 0.9278876185417175, 0.9998903274536133, 0.999955415725708, 0.9999262094497681, 0.9999407529830933, 0.9999767541885376, 0.9984294772148132, 0.8924553990364075, 0.9984814524650574, 0.9999494552612305, 0.9997356534004211, 0.9999189376831055, 0.9939833283424377, 0.9999998807907104, 0.9999184608459473, 0.9999300241470337, 0.573874831199646, 0.9986876845359802, 0.9068862199783325, 0.9941669702529907, 0.999953031539917, 0.997863233089447, 0.7316004037857056, 0.9987077713012695, 0.9907311797142029, 0.9943513870239258, 0.9962025284767151, 0.9970322847366333, 0.9568605422973633, 0.9899909496307373, 0.8733225464820862, 0.9993151426315308, 0.7688072919845581, 0.9994139671325684, 0.9989153146743774, 0.5057005286216736, 0.9989703893661499, 0.9991733431816101, 0.9928190112113953, 0.9984594583511353, 0.7554934024810791, 0.9958826303482056, 0.9795031547546387, 0.9996199607849121, 0.9911338686943054, 0.9956367611885071, 0.9094319939613342, 0.9807215929031372, 0.9925562739372253, 0.8968151211738586, 0.7551785707473755, 0.9919329285621643, 0.9729509353637695, 0.9989374279975891, 0.9944745898246765, 0.9989200830459595, 0.9993528723716736, 0.9896401166915894, 0.9964278340339661], "line": {"id": "line_13", "bbox": [327, 2227, 3165, 2386], "type": "bbox"}}, {"prediction": ". \u0643\u0644\u0630 \u064a\u0641 \u062a\u0627\u0645\u0641 \u0637\u0648\u0633 \u0629\u0627\u0645\u0633\u0645\u062e", "cuts": [[[2264, 2402], [2264, 2531], [2264, 2531], [2264, 2402]], [[2302, 2402], [2302, 2531], [2302, 2531], [2302, 2402]], [[2340, 2402], [2340, 2531], [2353, 2531], [2353, 2402]], [[2391, 2402], [2391, 2531], [2403, 2531], [2403, 2402]], [[2416, 2402], [2416, 2531], [2429, 2531], [2429, 2402]], [[2454, 2402], [2454, 2531], [2467, 2531], [2467, 2402]], [[2492, 2402], [2492, 2531], [2492, 2531], [2492, 2402]], [[2505, 2402], [2505, 2531], [2505, 2531], [2505, 2402]], [[2543, 2402], [2543, 2531], [2543, 2531], [2543, 2402]], [[2594, 2402], [2594, 2531], [2594, 2531], [2594, 2402]], [[2632, 2402], [2632, 2531], [2632, 2531], [2632, 2402]], [[2644, 2402], [2644, 2531], [2657, 2531], [2657, 2402]], [[2695, 2402], [2695, 2531], [2695, 2531], [2695, 2402]], [[2720, 2402], [2720, 2531], [2733, 2531], [2733, 2402]], [[2771, 2402], [2771, 2531], [2771, 2531], [2771, 2402]], [[2847, 2402], [2847, 2531], [2847, 2531], [2847, 2402]], [[2898, 2402], [2898, 2531], [2898, 2531], [2898, 2402]], [[2936, 2402], [2936, 2531], [2936, 2531], [2936, 2402]], [[2961, 2402], [2961, 2531], [2961, 2531], [2961, 2402]], [[3012, 2402], [3012, 2531], [3012, 2531], [3012, 2402]], [[3025, 2402], [3025, 2531], [3037, 2531], [3037, 2402]], [[3075, 2402], [3075, 2531], [3088, 2531], [3088, 2402]], [[3101, 2402], [3101, 2531], [3101, 2531], [3101, 2402]], [[3126, 2402], [3126, 2531], [3139, 2531], [3139, 2402]]], "confidences": [0.9456377625465393, 0.9999704360961914, 0.9999499320983887, 0.9995260238647461, 0.9999178647994995, 0.9999415874481201, 0.9920778870582581, 0.9997991919517517, 0.9995096921920776, 0.999977707862854, 0.8690007925033569, 0.9649189710617065, 0.9999690055847168, 0.9999949932098389, 0.9907584190368652, 0.9840313196182251, 0.9416587948799133, 0.998769223690033, 0.9915293455123901, 0.967819094657898, 0.9989644289016724, 0.9990310668945312, 0.9262909889221191, 0.9966443777084351], "line": {"id": "line_14", "bbox": [2264, 2402, 3164, 2531], "type": "bbox"}}, {"prediction": "\u062d\u0633\u0645 \u064a\u0641 \u0627\u0646\u0628\u0627\u062d\u0654\u0627 \u0646\u064a\u0628 \u0629\u064a\u0627\u0648\u0631\u0644\u0627 \u062a\u0641\u0644\u062a\u062e\u0627 \u0644\u0627\u0642 \u0644\u0636\u0635\u0641\u0644\u0627 \u0646\u0628 \u062f\u0645\u062d \u0646\u0639 \u0644\u064a\u0639\u0627\u0645\u0633\u0627 \u0646\u0628 \u062f\u0645\u0639\u0645 \u0649\u0648\u0631\u0648", "cuts": [[[331, 2564], [331, 2740], [344, 2740], [344, 2564]], [[398, 2564], [398, 2740], [398, 2740], [398, 2564]], [[439, 2564], [439, 2740], [452, 2740], [452, 2564]], [[466, 2564], [466, 2740], [479, 2740], [479, 2564]], [[520, 2564], [520, 2740], [520, 2740], [520, 2564]], [[533, 2564], [533, 2740], [533, 2740], [533, 2564]], [[560, 2564], [560, 2740], [560, 2740], [560, 2564]], [[587, 2564], [587, 2740], [587, 2740], [587, 2564]], [[614, 2564], [614, 2740], [614, 2740], [614, 2564]], [[628, 2564], [628, 2740], [641, 2740], [641, 2564]], [[668, 2564], [668, 2740], [668, 2740], [668, 2564]], [[695, 2564], [695, 2740], [709, 2740], [709, 2564]], [[763, 2564], [763, 2740], [763, 2740], [763, 2564]], [[776, 2564], [776, 2740], [790, 2740], [790, 2564]], [[803, 2564], [803, 2740], [803, 2740], [803, 2564]], [[844, 2564], [844, 2740], [857, 2740], [857, 2564]], [[871, 2564], [871, 2740], [884, 2740], [884, 2564]], [[898, 2564], [898, 2740], [898, 2740], [898, 2564]], [[925, 2564], [925, 2740], [938, 2740], [938, 2564]], [[979, 2564], [979, 2740], [979, 2740], [979, 2564]], [[1006, 2564], [1006, 2740], [1006, 2740], [1006, 2564]], [[1046, 2564], [1046, 2740], [1046, 2740], [1046, 2564]], [[1100, 2564], [1100, 2740], [1100, 2740], [1100, 2564]], [[1141, 2564], [1141, 2740], [1141, 2740], [1141, 2564]], [[1154, 2564], [1154, 2740], [1168, 2740], [1168, 2564]], [[1181, 2564], [1181, 2740], [1181, 2740], [1181, 2564]], [[1195, 2564], [1195, 2740], [1208, 2740], [1208, 2564]], [[1249, 2564], [1249, 2740], [1249, 2740], [1249, 2564]], [[1316, 2564], [1316, 2740], [1316, 2740], [1316, 2564]], [[1343, 2564], [1343, 2740], [1343, 2740], [1343, 2564]], [[1370, 2564], [1370, 2740], [1384, 2740], [1384, 2564]], [[1411, 2564], [1411, 2740], [1424, 2740], [1424, 2564]], [[1465, 2564], [1465, 2740], [1478, 2740], [1478, 2564]], [[1492, 2564], [1492, 2740], [1492, 2740], [1492, 2564]], [[1546, 2564], [1546, 2740], [1559, 2740], [1559, 2564]], [[1573, 2564], [1573, 2740], [1573, 2740], [1573, 2564]], [[1586, 2564], [1586, 2740], [1586, 2740], [1586, 2564]], [[1613, 2564], [1613, 2740], [1627, 2740], [1627, 2564]], [[1667, 2564], [1667, 2740], [1681, 2740], [1681, 2564]], [[1721, 2564], [1721, 2740], [1721, 2740], [1721, 2564]], [[1735, 2564], [1735, 2740], [1735, 2740], [1735, 2564]], [[1775, 2564], [1775, 2740], [1789, 2740], [1789, 2564]], [[1802, 2564], [1802, 2740], [1816, 2740], [1816, 2564]], [[1829, 2564], [1829, 2740], [1829, 2740], [1829, 2564]], [[1843, 2564], [1843, 2740], [1856, 2740], [1856, 2564]], [[1897, 2564], [1897, 2740], [1897, 2740], [1897, 2564]], [[1924, 2564], [1924, 2740], [1924, 2740], [1924, 2564]], [[1951, 2564], [1951, 2740], [1964, 2740], [1964, 2564]], [[2005, 2564], [2005, 2740], [2005, 2740], [2005, 2564]], [[2032, 2564], [2032, 2740], [2045, 2740], [2045, 2564]], [[2059, 2564], [2059, 2740], [2059, 2740], [2059, 2564]], [[2086, 2564], [2086, 2740], [2086, 2740], [2086, 2564]], [[2113, 2564], [2113, 2740], [2113, 2740], [2113, 2564]], [[2153, 2564], [2153, 2740], [2153, 2740], [2153, 2564]], [[2194, 2564], [2194, 2740], [2207, 2740], [2207, 2564]], [[2248, 2564], [2248, 2740], [2248, 2740], [2248, 2564]], [[2275, 2564], [2275, 2740], [2288, 2740], [2288, 2564]], [[2302, 2564], [2302, 2740], [2315, 2740], [2315, 2564]], [[2356, 2564], [2356, 2740], [2356, 2740], [2356, 2564]], [[2369, 2564], [2369, 2740], [2383, 2740], [2383, 2564]], [[2410, 2564], [2410, 2740], [2423, 2740], [2423, 2564]], [[2450, 2564], [2450, 2740], [2450, 2740], [2450, 2564]], [[2464, 2564], [2464, 2740], [2477, 2740], [2477, 2564]], [[2504, 2564], [2504, 2740], [2518, 2740], [2518, 2564]], [[2545, 2564], [2545, 2740], [2545, 2740], [2545, 2564]], [[2572, 2564], [2572, 2740], [2572, 2740], [2572, 2564]], [[2612, 2564], [2612, 2740], [2612, 2740], [2612, 2564]], [[2639, 2564], [2639, 2740], [2653, 2740], [2653, 2564]], [[2666, 2564], [2666, 2740], [2666, 2740], [2666, 2564]], [[2680, 2564], [2680, 2740], [2680, 2740], [2680, 2564]], [[2707, 2564], [2707, 2740], [2720, 2740], [2720, 2564]], [[2761, 2564], [2761, 2740], [2761, 2740], [2761, 2564]], [[2828, 2564], [2828, 2740], [2828, 2740], [2828, 2564]], [[2869, 2564], [2869, 2740], [2882, 2740], [2882, 2564]], [[2923, 2564], [2923, 2740], [2936, 2740], [2936, 2564]]], "confidences": [0.9999998807907104, 0.9929130673408508, 0.9938241243362427, 0.9778679609298706, 0.9086365699768066, 0.654657781124115, 0.9912302494049072, 0.9998319149017334, 0.9415075182914734, 0.9910994172096252, 0.8468749523162842, 0.991156816482544, 0.9946617484092712, 0.9841130375862122, 0.5371823906898499, 0.9606072902679443, 0.9999836683273315, 0.982523500919342, 0.9999951124191284, 0.9997585415840149, 0.9992431402206421, 0.9998185038566589, 0.8639128804206848, 0.999992847442627, 0.9997803568840027, 0.9999289512634277, 0.9999123811721802, 0.8764679431915283, 0.99874347448349, 0.7210342288017273, 0.9998082518577576, 0.9998107552528381, 0.9988790154457092, 0.9528904557228088, 0.9895849823951721, 0.989848792552948, 0.9913495779037476, 0.9971917271614075, 0.9919770359992981, 0.9953035116195679, 0.9654654860496521, 0.956558108329773, 0.968718945980072, 0.9891232848167419, 0.9995982050895691, 0.5353143811225891, 0.9994182586669922, 0.9978064894676208, 0.9980046153068542, 0.9997578263282776, 0.9991948008537292, 0.999717652797699, 0.999285876750946, 0.9232087731361389, 0.9976062774658203, 0.9995843768119812, 0.9938365817070007, 0.998508870601654, 0.8162130117416382, 0.9771808385848999, 0.9998940229415894, 0.9971707463264465, 0.9978471994400024, 0.9858810901641846, 0.938630223274231, 0.9977301955223083, 0.9997122883796692, 0.99797123670578, 0.5294272303581238, 0.9924471378326416, 0.9994334578514099, 0.9998548030853271, 0.999200165271759, 0.9990027546882629, 0.9875484704971313], "line": {"id": "line_15", "bbox": [317, 2564, 2950, 2740], "type": "bbox"}}, {"prediction": "\u0639\u0628\u0627\u0640\u0635\u0654\u0627\u0644\u0627 \u0649\u0644\u0627 \u0646\u064a\u0628\u0639\u0643\u0644\u0627 \u0646\u0645 \u0645\u0654\u0627 \u0646\u064a\u0628\u0639\u0643\u0644\u0627 \u0649\u0644\u0627 \u0639\u0628\u0627\u0635\u0654\u0627\u0644\u0627 \u0646\u0645 \u0648\u0645\u0654\u0627 \u0621\u0648\u0636\u0648\u0644\u0627 \u0641 \u0646\u064a\u0644\u062c\u0631\u0644\u0627", "cuts": [[[335, 2733], [335, 2890], [335, 2890], [335, 2733]], [[396, 2733], [396, 2890], [396, 2890], [396, 2733]], [[442, 2733], [442, 2890], [442, 2890], [442, 2733]], [[488, 2733], [488, 2890], [519, 2890], [519, 2733]], [[611, 2733], [611, 2890], [611, 2890], [611, 2733]], [[657, 2733], [657, 2890], [657, 2890], [657, 2733]], [[673, 2733], [673, 2890], [673, 2890], [673, 2733]], [[688, 2733], [688, 2890], [704, 2890], [704, 2733]], [[719, 2733], [719, 2890], [734, 2890], [734, 2733]], [[750, 2733], [750, 2890], [750, 2890], [750, 2733]], [[796, 2733], [796, 2890], [796, 2890], [796, 2733]], [[811, 2733], [811, 2890], [827, 2890], [827, 2733]], [[842, 2733], [842, 2890], [842, 2890], [842, 2733]], [[857, 2733], [857, 2890], [873, 2890], [873, 2733]], [[904, 2733], [904, 2890], [904, 2890], [904, 2733]], [[934, 2733], [934, 2890], [934, 2890], [934, 2733]], [[965, 2733], [965, 2890], [965, 2890], [965, 2733]], [[996, 2733], [996, 2890], [996, 2890], [996, 2733]], [[1057, 2733], [1057, 2890], [1057, 2890], [1057, 2733]], [[1119, 2733], [1119, 2890], [1134, 2890], [1134, 2733]], [[1150, 2733], [1150, 2890], [1150, 2890], [1150, 2733]], [[1165, 2733], [1165, 2890], [1180, 2890], [1180, 2733]], [[1288, 2733], [1288, 2890], [1303, 2890], [1303, 2733]], [[1380, 2733], [1380, 2890], [1380, 2890], [1380, 2733]], [[1411, 2733], [1411, 2890], [1426, 2890], [1426, 2733]], [[1442, 2733], [1442, 2890], [1457, 2890], [1457, 2733]], [[1473, 2733], [1473, 2890], [1473, 2890], [1473, 2733]], [[1488, 2733], [1488, 2890], [1503, 2890], [1503, 2733]], [[1519, 2733], [1519, 2890], [1534, 2890], [1534, 2733]], [[1565, 2733], [1565, 2890], [1565, 2890], [1565, 2733]], [[1580, 2733], [1580, 2890], [1596, 2890], [1596, 2733]], [[1626, 2733], [1626, 2890], [1626, 2890], [1626, 2733]], [[1657, 2733], [1657, 2890], [1657, 2890], [1657, 2733]], [[1703, 2733], [1703, 2890], [1719, 2890], [1719, 2733]], [[1780, 2733], [1780, 2890], [1780, 2890], [1780, 2733]], [[1796, 2733], [1796, 2890], [1796, 2890], [1796, 2733]], [[1811, 2733], [1811, 2890], [1826, 2890], [1826, 2733]], [[1857, 2733], [1857, 2890], [1872, 2890], [1872, 2733]], [[1888, 2733], [1888, 2890], [1888, 2890], [1888, 2733]], [[1903, 2733], [1903, 2890], [1919, 2890], [1919, 2733]], [[1934, 2733], [1934, 2890], [1934, 2890], [1934, 2733]], [[1965, 2733], [1965, 2890], [1965, 2890], [1965, 2733]], [[2042, 2733], [2042, 2890], [2042, 2890], [2042, 2733]], [[2072, 2733], [2072, 2890], [2072, 2890], [2072, 2733]], [[2118, 2733], [2118, 2890], [2134, 2890], [2134, 2733]], [[2165, 2733], [2165, 2890], [2180, 2890], [2180, 2733]], [[2195, 2733], [2195, 2890], [2195, 2890], [2195, 2733]], [[2211, 2733], [2211, 2890], [2211, 2890], [2211, 2733]], [[2226, 2733], [2226, 2890], [2241, 2890], [2241, 2733]], [[2257, 2733], [2257, 2890], [2272, 2890], [2272, 2733]], [[2318, 2733], [2318, 2890], [2318, 2890], [2318, 2733]], [[2349, 2733], [2349, 2890], [2349, 2890], [2349, 2733]], [[2380, 2733], [2380, 2890], [2395, 2890], [2395, 2733]], [[2426, 2733], [2426, 2890], [2441, 2890], [2441, 2733]], [[2472, 2733], [2472, 2890], [2472, 2890], [2472, 2733]], [[2503, 2733], [2503, 2890], [2503, 2890], [2503, 2733]], [[2518, 2733], [2518, 2890], [2534, 2890], [2534, 2733]], [[2549, 2733], [2549, 2890], [2549, 2890], [2549, 2733]], [[2580, 2733], [2580, 2890], [2580, 2890], [2580, 2733]], [[2626, 2733], [2626, 2890], [2641, 2890], [2641, 2733]], [[2687, 2733], [2687, 2890], [2687, 2890], [2687, 2733]], [[2749, 2733], [2749, 2890], [2749, 2890], [2749, 2733]], [[2780, 2733], [2780, 2890], [2780, 2890], [2780, 2733]], [[2795, 2733], [2795, 2890], [2811, 2890], [2811, 2733]], [[2826, 2733], [2826, 2890], [2826, 2890], [2826, 2733]], [[2872, 2733], [2872, 2890], [2887, 2890], [2887, 2733]], [[2918, 2733], [2918, 2890], [2918, 2890], [2918, 2733]], [[2949, 2733], [2949, 2890], [2949, 2890], [2949, 2733]], [[2980, 2733], [2980, 2890], [2980, 2890], [2980, 2733]], [[3010, 2733], [3010, 2890], [3010, 2890], [3010, 2733]], [[3041, 2733], [3041, 2890], [3041, 2890], [3041, 2733]], [[3103, 2733], [3103, 2890], [3103, 2890], [3103, 2733]], [[3118, 2733], [3118, 2890], [3133, 2890], [3133, 2733]], [[3149, 2733], [3149, 2890], [3149, 2890], [3149, 2733]]], "confidences": [0.9999692440032959, 0.7431797385215759, 0.9892282485961914, 0.9999510049819946, 0.9351767897605896, 0.9993116855621338, 0.9982556700706482, 0.9992502331733704, 0.9992731213569641, 0.9999591112136841, 0.9965296387672424, 0.9999610185623169, 0.9995737671852112, 0.9993835687637329, 0.987348198890686, 0.7714233994483948, 0.9989540576934814, 0.9985584616661072, 0.9998059868812561, 0.9927629828453064, 0.9998949766159058, 0.9996819496154785, 0.9967392086982727, 0.999603807926178, 0.9831695556640625, 0.9224259257316589, 0.9802579283714294, 0.9334492683410645, 0.9981402158737183, 0.9999240636825562, 0.986011266708374, 0.9975579977035522, 0.9953357577323914, 0.9803675413131714, 0.9984625577926636, 0.9977602958679199, 0.9838416576385498, 0.9906837940216064, 0.9881343245506287, 0.9841576814651489, 0.9998107552528381, 0.9991499185562134, 0.9434433579444885, 0.9854111671447754, 0.8520838618278503, 0.9964721202850342, 0.9900435209274292, 0.9503771066665649, 0.9993019104003906, 0.9988412261009216, 0.99639892578125, 0.8105504512786865, 0.9876804351806641, 0.9993699193000793, 0.921359121799469, 0.9604810476303101, 0.995456337928772, 0.9368835687637329, 0.9467335343360901, 0.9949937462806702, 0.999894380569458, 0.9988865256309509, 0.9930035471916199, 0.9975302815437317, 0.9954912066459656, 0.824739933013916, 0.9803107380867004, 0.98244708776474, 0.9932101368904114, 0.9977071285247803, 0.5027340054512024, 0.9766203165054321, 0.9856435060501099, 0.9869322180747986], "line": {"id": "line_16", "bbox": [319, 2733, 3149, 2890], "type": "bbox"}}, {"prediction": "\u062f\u0642 \u0627\u0646\u0628\u0627\u062d\u0635\u0654\u0627 \u0646\u0627 \u0643\u0627\u062f\u0641 \u062a\u0644\u0639\u062c \u0645\u0627\u0644\u0633\u0644\u0627 \u0647\u064a\u0644\u0639 \u0649\u0633\u0648\u0645 \u0646\u0633\u062d\u0644\u0627 \u064a\u0627 \u0649\u0644\u0627 \u0646\u064a\u0637\u0642\u064a \u0646\u0628 \u0649\u0644\u0639 \u0628\u062a\u0643\u0641", "cuts": [[[330, 2903], [330, 3080], [343, 3080], [343, 2903]], [[407, 2903], [407, 3080], [407, 3080], [407, 2903]], [[433, 2903], [433, 3080], [446, 3080], [446, 2903]], [[459, 2903], [459, 3080], [472, 3080], [472, 2903]], [[485, 2903], [485, 3080], [497, 3080], [497, 2903]], [[510, 2903], [510, 3080], [510, 3080], [510, 2903]], [[549, 2903], [549, 3080], [549, 3080], [549, 2903]], [[575, 2903], [575, 3080], [588, 3080], [588, 2903]], [[613, 2903], [613, 3080], [613, 3080], [613, 2903]], [[639, 2903], [639, 3080], [652, 3080], [652, 2903]], [[665, 2903], [665, 3080], [665, 3080], [665, 2903]], [[678, 2903], [678, 3080], [691, 3080], [691, 2903]], [[716, 2903], [716, 3080], [729, 3080], [729, 2903]], [[768, 2903], [768, 3080], [768, 3080], [768, 2903]], [[781, 2903], [781, 3080], [807, 3080], [807, 2903]], [[845, 2903], [845, 3080], [845, 3080], [845, 2903]], [[897, 2903], [897, 3080], [897, 3080], [897, 2903]], [[935, 2903], [935, 3080], [948, 3080], [948, 2903]], [[974, 2903], [974, 3080], [974, 3080], [974, 2903]], [[1000, 2903], [1000, 3080], [1013, 3080], [1013, 2903]], [[1051, 2903], [1051, 3080], [1051, 3080], [1051, 2903]], [[1103, 2903], [1103, 3080], [1116, 3080], [1116, 2903]], [[1142, 2903], [1142, 3080], [1142, 3080], [1142, 2903]], [[1180, 2903], [1180, 3080], [1193, 3080], [1193, 2903]], [[1232, 2903], [1232, 3080], [1245, 3080], [1245, 2903]], [[1283, 2903], [1283, 3080], [1296, 3080], [1296, 2903]], [[1335, 2903], [1335, 3080], [1348, 3080], [1348, 2903]], [[1360, 2903], [1360, 3080], [1373, 3080], [1373, 2903]], [[1412, 2903], [1412, 3080], [1425, 3080], [1425, 2903]], [[1438, 2903], [1438, 3080], [1451, 3080], [1451, 2903]], [[1464, 2903], [1464, 3080], [1464, 3080], [1464, 2903]], [[1476, 2903], [1476, 3080], [1489, 3080], [1489, 2903]], [[1502, 2903], [1502, 3080], [1515, 3080], [1515, 2903]], [[1541, 2903], [1541, 3080], [1554, 3080], [1554, 2903]], [[1567, 2903], [1567, 3080], [1579, 3080], [1579, 2903]], [[1592, 2903], [1592, 3080], [1605, 3080], [1605, 2903]], [[1644, 2903], [1644, 3080], [1657, 3080], [1657, 2903]], [[1708, 2903], [1708, 3080], [1708, 3080], [1708, 2903]], [[1747, 2903], [1747, 3080], [1747, 3080], [1747, 2903]], [[1798, 2903], [1798, 3080], [1811, 3080], [1811, 2903]], [[1837, 2903], [1837, 3080], [1837, 3080], [1837, 2903]], [[1863, 2903], [1863, 3080], [1876, 3080], [1876, 2903]], [[1927, 2903], [1927, 3080], [1927, 3080], [1927, 2903]], [[1966, 2903], [1966, 3080], [1979, 3080], [1979, 2903]], [[2017, 2903], [2017, 3080], [2017, 3080], [2017, 2903]], [[2030, 2903], [2030, 3080], [2043, 3080], [2043, 2903]], [[2069, 2903], [2069, 3080], [2082, 3080], [2082, 2903]], [[2095, 2903], [2095, 3080], [2108, 3080], [2108, 2903]], [[2146, 2903], [2146, 3080], [2146, 3080], [2146, 2903]], [[2198, 2903], [2198, 3080], [2211, 3080], [2211, 2903]], [[2223, 2903], [2223, 3080], [2223, 3080], [2223, 2903]], [[2262, 2903], [2262, 3080], [2262, 3080], [2262, 2903]], [[2275, 2903], [2275, 3080], [2288, 3080], [2288, 2903]], [[2301, 2903], [2301, 3080], [2314, 3080], [2314, 2903]], [[2326, 2903], [2326, 3080], [2339, 3080], [2339, 2903]], [[2365, 2903], [2365, 3080], [2378, 3080], [2378, 2903]], [[2404, 2903], [2404, 3080], [2404, 3080], [2404, 2903]], [[2430, 2903], [2430, 3080], [2430, 3080], [2430, 2903]], [[2494, 2903], [2494, 3080], [2494, 3080], [2494, 2903]], [[2520, 2903], [2520, 3080], [2520, 3080], [2520, 2903]], [[2545, 2903], [2545, 3080], [2558, 3080], [2558, 2903]], [[2623, 2903], [2623, 3080], [2623, 3080], [2623, 2903]], [[2649, 2903], [2649, 3080], [2649, 3080], [2649, 2903]], [[2674, 2903], [2674, 3080], [2687, 3080], [2687, 2903]], [[2752, 2903], [2752, 3080], [2752, 3080], [2752, 2903]], [[2764, 2903], [2764, 3080], [2777, 3080], [2777, 2903]], [[2790, 2903], [2790, 3080], [2803, 3080], [2803, 2903]], [[2829, 2903], [2829, 3080], [2842, 3080], [2842, 2903]], [[2893, 2903], [2893, 3080], [2893, 3080], [2893, 2903]], [[2945, 2903], [2945, 3080], [2945, 3080], [2945, 2903]], [[2983, 2903], [2983, 3080], [2983, 3080], [2983, 2903]], [[3138, 2903], [3138, 3080], [3138, 3080], [3138, 2903]]], "confidences": [0.9998844861984253, 0.7102985382080078, 0.9393450021743774, 0.9997884631156921, 0.999976634979248, 0.9990993738174438, 0.9997594952583313, 0.9806336760520935, 0.9991434812545776, 0.999870777130127, 0.999963641166687, 0.9986358284950256, 0.9997819066047668, 0.9902760982513428, 0.9999171495437622, 0.870272159576416, 0.9959033131599426, 0.9999700784683228, 0.9983206391334534, 0.9999897480010986, 0.9983596205711365, 0.9999958276748657, 0.7078837156295776, 0.9993500113487244, 0.9999644756317139, 0.9912440776824951, 0.9898048639297485, 0.9963675737380981, 0.9999985694885254, 0.9996073842048645, 0.9969272017478943, 0.9999234676361084, 0.9996798038482666, 0.9999964237213135, 0.9991588592529297, 0.9990678429603577, 0.9999243021011353, 0.9791718125343323, 0.8421644568443298, 0.9974477291107178, 0.7698737978935242, 0.9559314250946045, 0.9906162619590759, 0.9658488631248474, 0.9968318343162537, 0.9971415400505066, 0.9973932504653931, 0.99928218126297, 0.9969269633293152, 0.9991139769554138, 0.994012176990509, 0.880149781703949, 0.9992927312850952, 0.9991368651390076, 0.9945836663246155, 0.9022614359855652, 0.9830822944641113, 0.9845501780509949, 0.9880629777908325, 0.9992579817771912, 0.9978712797164917, 0.9982649683952332, 0.996843695640564, 0.9984459280967712, 0.9971120357513428, 0.9952387809753418, 0.9999581575393677, 0.9986611604690552, 0.9999819993972778, 0.9977983832359314, 0.5938760638237, 0.49053633213043213], "line": {"id": "line_17", "bbox": [317, 2903, 3151, 3080], "type": "bbox"}}, {"prediction": "\u0646\u0655\u0627 \u062a\u0644\u0639\u0641 \u0647\u064a\u0644\u0639 \u0649\u0644\u0645\u0639 \u0646\u0648\u0643\u064a \u0627\u0645 \u0643\u0637\u062e\u0628 \u0649\u0644\u0627 \u0628\u062a\u0643\u062a \u0646\u0654\u0627 \u062a\u064a\u0654\u0627\u0631 \u0646\u0627\u0641 \u0646\u064a\u0644\u062c\u0631\u0644\u0627 \u062d\u0633\u0645 \u064a\u0641 \u0627\u0648\u0641\u0644\u062a\u062e\u0627", "cuts": [[[328, 3067], [328, 3246], [342, 3246], [342, 3067]], [[357, 3067], [357, 3246], [357, 3246], [357, 3067]], [[371, 3067], [371, 3246], [386, 3246], [386, 3067]], [[400, 3067], [400, 3246], [400, 3246], [400, 3067]], [[444, 3067], [444, 3246], [444, 3246], [444, 3067]], [[502, 3067], [502, 3246], [502, 3246], [502, 3067]], [[531, 3067], [531, 3246], [531, 3246], [531, 3067]], [[560, 3067], [560, 3246], [560, 3246], [560, 3067]], [[589, 3067], [589, 3246], [589, 3246], [589, 3067]], [[604, 3067], [604, 3246], [618, 3246], [618, 3067]], [[647, 3067], [647, 3246], [647, 3246], [647, 3067]], [[676, 3067], [676, 3246], [676, 3246], [676, 3067]], [[691, 3067], [691, 3246], [705, 3246], [705, 3067]], [[735, 3067], [735, 3246], [749, 3246], [749, 3067]], [[822, 3067], [822, 3246], [822, 3246], [822, 3067]], [[836, 3067], [836, 3246], [836, 3246], [836, 3067]], [[851, 3067], [851, 3246], [851, 3246], [851, 3067]], [[880, 3067], [880, 3246], [880, 3246], [880, 3067]], [[923, 3067], [923, 3246], [938, 3246], [938, 3067]], [[967, 3067], [967, 3246], [967, 3246], [967, 3067]], [[1025, 3067], [1025, 3246], [1025, 3246], [1025, 3067]], [[1054, 3067], [1054, 3246], [1054, 3246], [1054, 3067]], [[1098, 3067], [1098, 3246], [1098, 3246], [1098, 3067]], [[1127, 3067], [1127, 3246], [1141, 3246], [1141, 3067]], [[1170, 3067], [1170, 3246], [1185, 3246], [1185, 3067]], [[1200, 3067], [1200, 3246], [1214, 3246], [1214, 3067]], [[1243, 3067], [1243, 3246], [1243, 3246], [1243, 3067]], [[1301, 3067], [1301, 3246], [1301, 3246], [1301, 3067]], [[1359, 3067], [1359, 3246], [1359, 3246], [1359, 3067]], [[1403, 3067], [1403, 3246], [1403, 3246], [1403, 3067]], [[1432, 3067], [1432, 3246], [1432, 3246], [1432, 3067]], [[1461, 3067], [1461, 3246], [1476, 3246], [1476, 3067]], [[1548, 3067], [1548, 3246], [1548, 3246], [1548, 3067]], [[1563, 3067], [1563, 3246], [1563, 3246], [1563, 3067]], [[1577, 3067], [1577, 3246], [1592, 3246], [1592, 3067]], [[1606, 3067], [1606, 3246], [1621, 3246], [1621, 3067]], [[1665, 3067], [1665, 3246], [1665, 3246], [1665, 3067]], [[1723, 3067], [1723, 3246], [1723, 3246], [1723, 3067]], [[1781, 3067], [1781, 3246], [1781, 3246], [1781, 3067]], [[1839, 3067], [1839, 3246], [1839, 3246], [1839, 3067]], [[1868, 3067], [1868, 3246], [1883, 3246], [1883, 3067]], [[1926, 3067], [1926, 3246], [1941, 3246], [1941, 3067]], [[1970, 3067], [1970, 3246], [1970, 3246], [1970, 3067]], [[1984, 3067], [1984, 3246], [1984, 3246], [1984, 3067]], [[1999, 3067], [1999, 3246], [2013, 3246], [2013, 3067]], [[2057, 3067], [2057, 3246], [2057, 3246], [2057, 3067]], [[2115, 3067], [2115, 3246], [2115, 3246], [2115, 3067]], [[2130, 3067], [2130, 3246], [2144, 3246], [2144, 3067]], [[2159, 3067], [2159, 3246], [2159, 3246], [2159, 3067]], [[2202, 3067], [2202, 3246], [2202, 3246], [2202, 3067]], [[2231, 3067], [2231, 3246], [2231, 3246], [2231, 3067]], [[2260, 3067], [2260, 3246], [2275, 3246], [2275, 3067]], [[2304, 3067], [2304, 3246], [2304, 3246], [2304, 3067]], [[2319, 3067], [2319, 3246], [2319, 3246], [2319, 3067]], [[2348, 3067], [2348, 3246], [2362, 3246], [2362, 3067]], [[2391, 3067], [2391, 3246], [2391, 3246], [2391, 3067]], [[2420, 3067], [2420, 3246], [2420, 3246], [2420, 3067]], [[2449, 3067], [2449, 3246], [2449, 3246], [2449, 3067]], [[2478, 3067], [2478, 3246], [2493, 3246], [2493, 3067]], [[2537, 3067], [2537, 3246], [2551, 3246], [2551, 3067]], [[2566, 3067], [2566, 3246], [2566, 3246], [2566, 3067]], [[2580, 3067], [2580, 3246], [2595, 3246], [2595, 3067]], [[2609, 3067], [2609, 3246], [2624, 3246], [2624, 3067]], [[2653, 3067], [2653, 3246], [2653, 3246], [2653, 3067]], [[2711, 3067], [2711, 3246], [2711, 3246], [2711, 3067]], [[2755, 3067], [2755, 3246], [2755, 3246], [2755, 3067]], [[2769, 3067], [2769, 3246], [2784, 3246], [2784, 3067]], [[2827, 3067], [2827, 3246], [2827, 3246], [2827, 3067]], [[2842, 3067], [2842, 3246], [2842, 3246], [2842, 3067]], [[2871, 3067], [2871, 3246], [2871, 3246], [2871, 3067]], [[2900, 3067], [2900, 3246], [2900, 3246], [2900, 3067]], [[2943, 3067], [2943, 3246], [2958, 3246], [2958, 3067]], [[2987, 3067], [2987, 3246], [3002, 3246], [3002, 3067]], [[3016, 3067], [3016, 3246], [3016, 3246], [3016, 3067]], [[3045, 3067], [3045, 3246], [3045, 3246], [3045, 3067]], [[3089, 3067], [3089, 3246], [3089, 3246], [3089, 3067]], [[3132, 3067], [3132, 3246], [3147, 3246], [3147, 3067]]], "confidences": [0.9998571872711182, 0.9720284938812256, 0.9996850490570068, 0.9983483552932739, 0.9983503818511963, 0.9421389102935791, 0.9757440090179443, 0.9998825788497925, 0.995537281036377, 0.9998735189437866, 0.979082465171814, 0.9991683959960938, 0.8312473297119141, 0.9998272061347961, 0.9998739957809448, 0.9941480159759521, 0.6946954131126404, 0.9902309775352478, 0.99941086769104, 0.9953650236129761, 0.9976621866226196, 0.9999786615371704, 0.6234442591667175, 0.9998052716255188, 0.9999556541442871, 0.9997043013572693, 0.9890322089195251, 0.9971346855163574, 0.9940102100372314, 0.9995328187942505, 0.999966025352478, 0.7640908360481262, 0.4993588328361511, 0.9998918771743774, 0.9999830722808838, 0.9678281545639038, 0.9903719425201416, 0.9858986139297485, 0.6294997930526733, 0.971433699131012, 0.9831180572509766, 0.9937307834625244, 0.9823363423347473, 0.9849645495414734, 0.9930417537689209, 0.9968459010124207, 0.9991890788078308, 0.9997627139091492, 0.9964436888694763, 0.8590208292007446, 0.9995020627975464, 0.9917978048324585, 0.9393941760063171, 0.9994710087776184, 0.9996200799942017, 0.6683350205421448, 0.7901033759117126, 0.9907926917076111, 0.9704153537750244, 0.9975791573524475, 0.999360978603363, 0.9991258978843689, 0.9997497200965881, 0.8905563354492188, 0.9997245669364929, 0.9991188645362854, 0.9998225569725037, 0.9893819093704224, 0.997583270072937, 0.9980733394622803, 0.9992850422859192, 0.9999197721481323, 0.9919565916061401, 0.9748324751853943, 0.8973613381385803, 0.9983094930648804, 0.9631760120391846], "line": {"id": "line_18", "bbox": [313, 3067, 3147, 3246], "type": "bbox"}}, {"prediction": "\u0621\u0648\u0636\u0648\u0644\u0627 \u064a\u0641 \u0641\u0627\u0644\u062a\u062e\u0655\u0627\u0644\u0627 \u0646\u0645 \u062a\u0631\u0643\u0630 \u0627\u0645 \u062a\u0645\u0647\u0641 \u060c \u0639. \u0646\u0633\u062d\u0644\u0627 \u0648\u0628\u0654\u0627 \u0647\u064a\u0644\u0627 \u0628\u062a\u0643\u0642 \u0649\u0644\u0627\u0639\u062a \u0647\u062a\u0627 \u0621\u0627\u0634", "cuts": [[[318, 3226], [318, 3412], [318, 3412], [318, 3226]], [[375, 3226], [375, 3412], [375, 3412], [375, 3226]], [[418, 3226], [418, 3412], [418, 3412], [418, 3226]], [[489, 3226], [489, 3412], [503, 3412], [503, 3226]], [[517, 3226], [517, 3412], [517, 3412], [517, 3226]], [[546, 3226], [546, 3412], [546, 3412], [546, 3226]], [[560, 3226], [560, 3412], [574, 3412], [574, 3226]], [[603, 3226], [603, 3412], [603, 3412], [603, 3226]], [[617, 3226], [617, 3412], [617, 3412], [617, 3226]], [[646, 3226], [646, 3412], [660, 3412], [660, 3226]], [[745, 3226], [745, 3412], [745, 3412], [745, 3226]], [[774, 3226], [774, 3412], [788, 3412], [788, 3226]], [[802, 3226], [802, 3412], [802, 3412], [802, 3226]], [[831, 3226], [831, 3412], [831, 3412], [831, 3226]], [[873, 3226], [873, 3412], [888, 3412], [888, 3226]], [[930, 3226], [930, 3412], [930, 3412], [930, 3226]], [[945, 3226], [945, 3412], [945, 3412], [945, 3226]], [[959, 3226], [959, 3412], [973, 3412], [973, 3226]], [[987, 3226], [987, 3412], [1001, 3412], [1001, 3226]], [[1016, 3226], [1016, 3412], [1030, 3412], [1030, 3226]], [[1101, 3226], [1101, 3412], [1101, 3412], [1101, 3226]], [[1130, 3226], [1130, 3412], [1144, 3412], [1144, 3226]], [[1172, 3226], [1172, 3412], [1172, 3412], [1172, 3226]], [[1215, 3226], [1215, 3412], [1215, 3412], [1215, 3226]], [[1286, 3226], [1286, 3412], [1286, 3412], [1286, 3226]], [[1315, 3226], [1315, 3412], [1315, 3412], [1315, 3226]], [[1386, 3226], [1386, 3412], [1386, 3412], [1386, 3226]], [[1414, 3226], [1414, 3412], [1443, 3412], [1443, 3226]], [[1471, 3226], [1471, 3412], [1471, 3412], [1471, 3226]], [[1500, 3226], [1500, 3412], [1500, 3412], [1500, 3226]], [[1528, 3226], [1528, 3412], [1542, 3412], [1542, 3226]], [[1585, 3226], [1585, 3412], [1585, 3412], [1585, 3226]], [[1642, 3226], [1642, 3412], [1642, 3412], [1642, 3226]], [[1685, 3226], [1685, 3412], [1685, 3412], [1685, 3226]], [[1727, 3226], [1727, 3412], [1727, 3412], [1727, 3226]], [[1756, 3226], [1756, 3412], [1770, 3412], [1770, 3226]], [[1799, 3226], [1799, 3412], [1799, 3412], [1799, 3226]], [[1827, 3226], [1827, 3412], [1827, 3412], [1827, 3226]], [[1870, 3226], [1870, 3412], [1870, 3412], [1870, 3226]], [[1941, 3226], [1941, 3412], [1941, 3412], [1941, 3226]], [[1969, 3226], [1969, 3412], [1984, 3412], [1984, 3226]], [[2026, 3226], [2026, 3412], [2026, 3412], [2026, 3226]], [[2069, 3226], [2069, 3412], [2083, 3412], [2083, 3226]], [[2112, 3226], [2112, 3412], [2112, 3412], [2112, 3226]], [[2126, 3226], [2126, 3412], [2140, 3412], [2140, 3226]], [[2169, 3226], [2169, 3412], [2183, 3412], [2183, 3226]], [[2197, 3226], [2197, 3412], [2211, 3412], [2211, 3226]], [[2240, 3226], [2240, 3412], [2254, 3412], [2254, 3226]], [[2268, 3226], [2268, 3412], [2268, 3412], [2268, 3226]], [[2297, 3226], [2297, 3412], [2297, 3412], [2297, 3226]], [[2311, 3226], [2311, 3412], [2311, 3412], [2311, 3226]], [[2339, 3226], [2339, 3412], [2354, 3412], [2354, 3226]], [[2382, 3226], [2382, 3412], [2382, 3412], [2382, 3226]], [[2411, 3226], [2411, 3412], [2411, 3412], [2411, 3226]], [[2439, 3226], [2439, 3412], [2439, 3412], [2439, 3226]], [[2453, 3226], [2453, 3412], [2468, 3412], [2468, 3226]], [[2482, 3226], [2482, 3412], [2482, 3412], [2482, 3226]], [[2539, 3226], [2539, 3412], [2539, 3412], [2539, 3226]], [[2596, 3226], [2596, 3412], [2596, 3412], [2596, 3226]], [[2638, 3226], [2638, 3412], [2638, 3412], [2638, 3226]], [[2681, 3226], [2681, 3412], [2681, 3412], [2681, 3226]], [[2710, 3226], [2710, 3412], [2724, 3412], [2724, 3226]], [[2766, 3226], [2766, 3412], [2766, 3412], [2766, 3226]], [[2781, 3226], [2781, 3412], [2781, 3412], [2781, 3226]], [[2795, 3226], [2795, 3412], [2809, 3412], [2809, 3226]], [[2823, 3226], [2823, 3412], [2838, 3412], [2838, 3226]], [[2866, 3226], [2866, 3412], [2866, 3412], [2866, 3226]], [[2880, 3226], [2880, 3412], [2895, 3412], [2895, 3226]], [[2923, 3226], [2923, 3412], [2923, 3412], [2923, 3226]], [[2952, 3226], [2952, 3412], [2952, 3412], [2952, 3226]], [[2994, 3226], [2994, 3412], [2994, 3412], [2994, 3226]], [[3008, 3226], [3008, 3412], [3023, 3412], [3023, 3226]], [[3051, 3226], [3051, 3412], [3051, 3412], [3051, 3226]], [[3080, 3226], [3080, 3412], [3094, 3412], [3094, 3226]], [[3137, 3226], [3137, 3412], [3137, 3412], [3137, 3226]]], "confidences": [0.9989814162254333, 0.9999122619628906, 0.9998594522476196, 0.9999371767044067, 0.9949018955230713, 0.8918391466140747, 0.9331813454627991, 0.9998503923416138, 0.999738872051239, 0.9999352693557739, 0.9999396800994873, 0.9997422099113464, 0.9998968839645386, 0.999890923500061, 0.9986469149589539, 0.9979827404022217, 0.9983227849006653, 0.9980936646461487, 0.9998340606689453, 0.9999415874481201, 0.9813975095748901, 0.9996932744979858, 0.9956713914871216, 0.9996687173843384, 0.9994198083877563, 0.732080340385437, 0.840719997882843, 0.9999840259552002, 0.9996098875999451, 0.9923226237297058, 0.9988951086997986, 0.5162858963012695, 0.5562438368797302, 0.799801766872406, 0.9747372269630432, 0.9793431758880615, 0.9933470487594604, 0.9947622418403625, 0.9987406134605408, 0.9820605516433716, 0.9616630673408508, 0.9937961101531982, 0.9977521300315857, 0.996338963508606, 0.9950332641601562, 0.8663762807846069, 0.9994631409645081, 0.9986950755119324, 0.8317818641662598, 0.9994366765022278, 0.9611929655075073, 0.9998297691345215, 0.9822288751602173, 0.9975958466529846, 0.9939688444137573, 0.9993873834609985, 0.998565137386322, 0.9918579459190369, 0.9916180968284607, 0.9998064637184143, 0.8910688161849976, 0.9938943982124329, 0.9996296167373657, 0.9683365821838379, 0.8659057021141052, 0.999840497970581, 0.9998772144317627, 0.9978265166282654, 0.9994264841079712, 0.9970901012420654, 0.9989050626754761, 0.9994168281555176, 0.9968239068984985, 0.9972999691963196, 0.8729744553565979], "line": {"id": "line_19", "bbox": [318, 3226, 3151, 3412], "type": "bbox"}}, {"prediction": "\u0644\u063a\u062a\u0648 \u0627\u0654\u064a\u0627\u0644\u062b \u0643\u0647\u062c\u0648 \u0644\u0633\u063a\u062a\u0648 \u0627\u062b\u0627\u0644\u062b \u0642\u0634\u0646\u062a\u0633\u062a\u0648 \u0627\u0627\u0644\u062b \u0636\u0645\u0636\u0645\u062a \u0646\u0654\u0627 \u0643\u0644\u0630 \u064a\u0641 \u0647\u0628\u0643\u0631\u0645\u0653\u0627 \u0649\u0630\u0644\u0627\u0648", "cuts": [[[340, 3404], [340, 3582], [369, 3582], [369, 3404]], [[398, 3404], [398, 3582], [398, 3582], [398, 3404]], [[441, 3404], [441, 3582], [441, 3582], [441, 3404]], [[484, 3404], [484, 3582], [498, 3582], [498, 3404]], [[513, 3404], [513, 3582], [527, 3582], [527, 3404]], [[556, 3404], [556, 3582], [556, 3582], [556, 3404]], [[570, 3404], [570, 3582], [570, 3582], [570, 3404]], [[585, 3404], [585, 3582], [585, 3582], [585, 3404]], [[613, 3404], [613, 3582], [628, 3582], [628, 3404]], [[642, 3404], [642, 3582], [642, 3582], [642, 3404]], [[671, 3404], [671, 3582], [671, 3582], [671, 3404]], [[700, 3404], [700, 3582], [714, 3582], [714, 3404]], [[757, 3404], [757, 3582], [757, 3582], [757, 3404]], [[800, 3404], [800, 3582], [815, 3582], [815, 3404]], [[844, 3404], [844, 3582], [858, 3582], [858, 3404]], [[930, 3404], [930, 3582], [930, 3582], [930, 3404]], [[959, 3404], [959, 3582], [973, 3582], [973, 3404]], [[1016, 3404], [1016, 3582], [1031, 3582], [1031, 3404]], [[1059, 3404], [1059, 3582], [1074, 3582], [1074, 3404]], [[1117, 3404], [1117, 3582], [1117, 3582], [1117, 3404]], [[1146, 3404], [1146, 3582], [1160, 3582], [1160, 3404]], [[1203, 3404], [1203, 3582], [1203, 3582], [1203, 3404]], [[1232, 3404], [1232, 3582], [1246, 3582], [1246, 3404]], [[1261, 3404], [1261, 3582], [1275, 3582], [1275, 3404]], [[1290, 3404], [1290, 3582], [1290, 3582], [1290, 3404]], [[1318, 3404], [1318, 3582], [1333, 3582], [1333, 3404]], [[1347, 3404], [1347, 3582], [1362, 3582], [1362, 3404]], [[1376, 3404], [1376, 3582], [1390, 3582], [1390, 3404]], [[1405, 3404], [1405, 3582], [1419, 3582], [1419, 3404]], [[1462, 3404], [1462, 3582], [1462, 3582], [1462, 3404]], [[1520, 3404], [1520, 3582], [1520, 3582], [1520, 3404]], [[1549, 3404], [1549, 3582], [1549, 3582], [1549, 3404]], [[1577, 3404], [1577, 3582], [1577, 3582], [1577, 3404]], [[1621, 3404], [1621, 3582], [1635, 3582], [1635, 3404]], [[1664, 3404], [1664, 3582], [1664, 3582], [1664, 3404]], [[1707, 3404], [1707, 3582], [1721, 3582], [1721, 3404]], [[1736, 3404], [1736, 3582], [1764, 3582], [1764, 3404]], [[1779, 3404], [1779, 3582], [1793, 3582], [1793, 3404]], [[1836, 3404], [1836, 3582], [1851, 3582], [1851, 3404]], [[1880, 3404], [1880, 3582], [1880, 3582], [1880, 3404]], [[1908, 3404], [1908, 3582], [1908, 3582], [1908, 3404]], [[1923, 3404], [1923, 3582], [1937, 3582], [1937, 3404]], [[2009, 3404], [2009, 3582], [2009, 3582], [2009, 3404]], [[2067, 3404], [2067, 3582], [2067, 3582], [2067, 3404]], [[2124, 3404], [2124, 3582], [2124, 3582], [2124, 3404]], [[2182, 3404], [2182, 3582], [2182, 3582], [2182, 3404]], [[2211, 3404], [2211, 3582], [2211, 3582], [2211, 3404]], [[2239, 3404], [2239, 3582], [2254, 3582], [2254, 3404]], [[2282, 3404], [2282, 3582], [2282, 3582], [2282, 3404]], [[2311, 3404], [2311, 3582], [2311, 3582], [2311, 3404]], [[2326, 3404], [2326, 3582], [2326, 3582], [2326, 3404]], [[2340, 3404], [2340, 3582], [2354, 3582], [2354, 3404]], [[2398, 3404], [2398, 3582], [2398, 3582], [2398, 3404]], [[2455, 3404], [2455, 3582], [2455, 3582], [2455, 3404]], [[2484, 3404], [2484, 3582], [2484, 3582], [2484, 3404]], [[2513, 3404], [2513, 3582], [2513, 3582], [2513, 3404]], [[2556, 3404], [2556, 3582], [2556, 3582], [2556, 3404]], [[2570, 3404], [2570, 3582], [2570, 3582], [2570, 3404]], [[2599, 3404], [2599, 3582], [2613, 3582], [2613, 3404]], [[2628, 3404], [2628, 3582], [2628, 3582], [2628, 3404]], [[2657, 3404], [2657, 3582], [2657, 3582], [2657, 3404]], [[2714, 3404], [2714, 3582], [2714, 3582], [2714, 3404]], [[2772, 3404], [2772, 3582], [2786, 3582], [2786, 3404]], [[2800, 3404], [2800, 3582], [2815, 3582], [2815, 3404]], [[2858, 3404], [2858, 3582], [2858, 3582], [2858, 3404]], [[2872, 3404], [2872, 3582], [2887, 3582], [2887, 3404]], [[2901, 3404], [2901, 3582], [2916, 3582], [2916, 3404]], [[2988, 3404], [2988, 3582], [2988, 3582], [2988, 3404]], [[3031, 3404], [3031, 3582], [3031, 3582], [3031, 3404]], [[3059, 3404], [3059, 3582], [3074, 3582], [3074, 3404]], [[3088, 3404], [3088, 3582], [3088, 3582], [3088, 3404]], [[3131, 3404], [3131, 3582], [3131, 3582], [3131, 3404]]], "confidences": [0.9967783093452454, 0.9999089241027832, 0.6990695595741272, 0.9999850988388062, 0.9994284510612488, 0.9905351996421814, 0.9979711174964905, 0.9925774931907654, 0.9997119307518005, 0.9998630285263062, 0.9991826415061951, 0.9995831847190857, 0.8739675283432007, 0.9986891150474548, 0.9998999834060669, 0.712096631526947, 0.9542328119277954, 0.9998071789741516, 0.9994687438011169, 0.9119349718093872, 0.9997267127037048, 0.9990538954734802, 0.9999830722808838, 0.9995676875114441, 0.9998180270195007, 0.9542503952980042, 0.9904987215995789, 0.9882673621177673, 0.9979777932167053, 0.9933269023895264, 0.9998037219047546, 0.9610075354576111, 0.9995414018630981, 0.9869469404220581, 0.9698469638824463, 0.9878268837928772, 0.9939728379249573, 0.8041937947273254, 0.9983476400375366, 0.792262077331543, 0.9819558262825012, 0.9396706223487854, 0.997104823589325, 0.9705645442008972, 0.9958399534225464, 0.9978986978530884, 0.8801516890525818, 0.9995551705360413, 0.9966424703598022, 0.9960938096046448, 0.9987300038337708, 0.9998194575309753, 0.563930094242096, 0.9453648328781128, 0.9340890049934387, 0.5644081830978394, 0.9911462664604187, 0.9987581968307495, 0.8091545701026917, 0.9992177486419678, 0.9971036314964294, 0.999757707118988, 0.999749481678009, 0.9985652565956116, 0.9988590478897095, 0.9889073371887207, 0.9370191693305969, 0.9869567155838013, 0.5738163590431213, 0.9979482293128967, 0.9877589344978333, 0.9431320428848267], "line": {"id": "line_20", "bbox": [311, 3404, 3146, 3582], "type": "bbox"}}, {"prediction": "\u0631\u0647\u0627\u0638 \u062d\u0633\u0645\u062a\u0648 \u0647\u0644\u0643 \u0643\u0633\u0654\u0627\u0631 \u062d\u0633\u0645\u062a\u0648 \u0646\u064a\u0642\u0641\u0631\u0645\u0644\u0627 \u0649\u0644\u0627 \u0643\u0639\u0628\u0627\u0635\u0654\u0627 \u0646\u0645 \u0643\u062f\u064a \u0644\u0633\u063a\u062a\u0648 \u0643\u062a\u064a\u062d\u0644 \u0631\u0639\u0634", "cuts": [[[321, 3580], [321, 3731], [335, 3731], [335, 3580]], [[363, 3580], [363, 3731], [363, 3731], [363, 3580]], [[405, 3580], [405, 3731], [405, 3731], [405, 3580]], [[434, 3580], [434, 3731], [434, 3731], [434, 3580]], [[476, 3580], [476, 3731], [504, 3731], [504, 3580]], [[546, 3580], [546, 3731], [560, 3731], [560, 3580]], [[616, 3580], [616, 3731], [616, 3731], [616, 3580]], [[644, 3580], [644, 3731], [658, 3731], [658, 3580]], [[672, 3580], [672, 3731], [672, 3731], [672, 3580]], [[729, 3580], [729, 3731], [729, 3731], [729, 3580]], [[757, 3580], [757, 3731], [771, 3731], [771, 3580]], [[785, 3580], [785, 3731], [799, 3731], [799, 3580]], [[813, 3580], [813, 3731], [827, 3731], [827, 3580]], [[841, 3580], [841, 3731], [841, 3731], [841, 3580]], [[883, 3580], [883, 3731], [883, 3731], [883, 3580]], [[925, 3580], [925, 3731], [925, 3731], [925, 3580]], [[995, 3580], [995, 3731], [1010, 3731], [1010, 3580]], [[1024, 3580], [1024, 3731], [1038, 3731], [1038, 3580]], [[1052, 3580], [1052, 3731], [1052, 3731], [1052, 3580]], [[1094, 3580], [1094, 3731], [1094, 3731], [1094, 3580]], [[1122, 3580], [1122, 3731], [1136, 3731], [1136, 3580]], [[1178, 3580], [1178, 3731], [1178, 3731], [1178, 3580]], [[1234, 3580], [1234, 3731], [1248, 3731], [1248, 3580]], [[1262, 3580], [1262, 3731], [1276, 3731], [1276, 3580]], [[1291, 3580], [1291, 3731], [1305, 3731], [1305, 3580]], [[1347, 3580], [1347, 3731], [1361, 3731], [1361, 3580]], [[1375, 3580], [1375, 3731], [1389, 3731], [1389, 3580]], [[1417, 3580], [1417, 3731], [1431, 3731], [1431, 3580]], [[1445, 3580], [1445, 3731], [1459, 3731], [1459, 3580]], [[1501, 3580], [1501, 3731], [1501, 3731], [1501, 3580]], [[1529, 3580], [1529, 3731], [1529, 3731], [1529, 3580]], [[1571, 3580], [1571, 3731], [1586, 3731], [1586, 3580]], [[1600, 3580], [1600, 3731], [1600, 3731], [1600, 3580]], [[1614, 3580], [1614, 3731], [1628, 3731], [1628, 3580]], [[1642, 3580], [1642, 3731], [1642, 3731], [1642, 3580]], [[1656, 3580], [1656, 3731], [1670, 3731], [1670, 3580]], [[1712, 3580], [1712, 3731], [1712, 3731], [1712, 3580]], [[1726, 3580], [1726, 3731], [1726, 3731], [1726, 3580]], [[1754, 3580], [1754, 3731], [1754, 3731], [1754, 3580]], [[1768, 3580], [1768, 3731], [1782, 3731], [1782, 3580]], [[1824, 3580], [1824, 3731], [1824, 3731], [1824, 3580]], [[1881, 3580], [1881, 3731], [1881, 3731], [1881, 3580]], [[1909, 3580], [1909, 3731], [1923, 3731], [1923, 3580]], [[1951, 3580], [1951, 3731], [1951, 3731], [1951, 3580]], [[2007, 3580], [2007, 3731], [2007, 3731], [2007, 3580]], [[2035, 3580], [2035, 3731], [2049, 3731], [2049, 3580]], [[2063, 3580], [2063, 3731], [2063, 3731], [2063, 3580]], [[2077, 3580], [2077, 3731], [2091, 3731], [2091, 3580]], [[2232, 3580], [2232, 3731], [2232, 3731], [2232, 3580]], [[2316, 3580], [2316, 3731], [2330, 3731], [2330, 3580]], [[2358, 3580], [2358, 3731], [2358, 3731], [2358, 3580]], [[2400, 3580], [2400, 3731], [2400, 3731], [2400, 3580]], [[2457, 3580], [2457, 3731], [2457, 3731], [2457, 3580]], [[2485, 3580], [2485, 3731], [2485, 3731], [2485, 3580]], [[2513, 3580], [2513, 3731], [2527, 3731], [2527, 3580]], [[2569, 3580], [2569, 3731], [2569, 3731], [2569, 3580]], [[2611, 3580], [2611, 3731], [2625, 3731], [2625, 3580]], [[2653, 3580], [2653, 3731], [2653, 3731], [2653, 3580]], [[2695, 3580], [2695, 3731], [2695, 3731], [2695, 3580]], [[2737, 3580], [2737, 3731], [2752, 3731], [2752, 3580]], [[2766, 3580], [2766, 3731], [2780, 3731], [2780, 3580]], [[2822, 3580], [2822, 3731], [2822, 3731], [2822, 3580]], [[2878, 3580], [2878, 3731], [2878, 3731], [2878, 3580]], [[2906, 3580], [2906, 3731], [2920, 3731], [2920, 3580]], [[2948, 3580], [2948, 3731], [2948, 3731], [2948, 3580]], [[2962, 3580], [2962, 3731], [2962, 3731], [2962, 3580]], [[3004, 3580], [3004, 3731], [3004, 3731], [3004, 3580]], [[3032, 3580], [3032, 3731], [3047, 3731], [3047, 3580]], [[3075, 3580], [3075, 3731], [3075, 3731], [3075, 3580]], [[3131, 3580], [3131, 3731], [3131, 3731], [3131, 3580]]], "confidences": [0.998375415802002, 0.7084844708442688, 0.9999047517776489, 0.9999986886978149, 0.9975200295448303, 0.9999372959136963, 0.9996757507324219, 0.9996148347854614, 0.9969292283058167, 0.9986764788627625, 0.9608417749404907, 0.9995263814926147, 0.9976219534873962, 0.9999587535858154, 0.9711738228797913, 0.9985242486000061, 0.8398705720901489, 0.9996516704559326, 0.9961230158805847, 0.9993791580200195, 0.9999798536300659, 0.9998527765274048, 0.9999849796295166, 0.9962425231933594, 0.9955328702926636, 0.9989853501319885, 0.999942421913147, 0.9898174405097961, 0.9999264478683472, 0.999687910079956, 0.9997530579566956, 0.9998797178268433, 0.9882998466491699, 0.9634631872177124, 0.999843955039978, 0.9989407658576965, 0.9994811415672302, 0.9873757362365723, 0.996773898601532, 0.9990653395652771, 0.9880833029747009, 0.9579822421073914, 0.9963617920875549, 0.968079149723053, 0.9967735409736633, 0.9786046743392944, 0.6416178941726685, 0.9990584254264832, 0.99955815076828, 0.9967063069343567, 0.998286783695221, 0.6909951567649841, 0.7128172516822815, 0.9613966941833496, 0.9996551275253296, 0.9983021020889282, 0.999221682548523, 0.9992075562477112, 0.9989655017852783, 0.9996083378791809, 0.9999632835388184, 0.936977207660675, 0.9235370755195618, 0.9997147917747498, 0.667002260684967, 0.9975676536560059, 0.9907772541046143, 0.9969243407249451, 0.9055776000022888, 0.7779210209846497], "line": {"id": "line_21", "bbox": [307, 3580, 3145, 3731], "type": "bbox"}}, {"prediction": "\u0644\u0635\u0648 \u0627\u0644\u0641 \u0647\u0631\u064a\u063a \u0649\u0644\u0627 \u0643\u0644\u0630 \u0641\u0644\u0627\u062e \u0627\u0644\u0648 \u0627\u0645\u062b\u0627\u0644\u062b \u0646\u064a\u0628\u0639\u0643\u0644\u0627 \u0649\u0644\u0627 \u0643\u064a\u0644\u062c\u0631 \u0644\u0633\u063a\u062a\u0648\u0627\u0645\u0647\u0646\u0637\u0627\u0628\u0648 \u0643\u064a\u0646\u0630\u0627", "cuts": [[[361, 3744], [361, 3918], [375, 3918], [375, 3744]], [[417, 3744], [417, 3918], [417, 3918], [417, 3744]], [[487, 3744], [487, 3918], [487, 3918], [487, 3744]], [[515, 3744], [515, 3918], [529, 3918], [529, 3744]], [[543, 3744], [543, 3918], [557, 3918], [557, 3744]], [[585, 3744], [585, 3918], [599, 3918], [599, 3744]], [[613, 3744], [613, 3918], [613, 3918], [613, 3744]], [[641, 3744], [641, 3918], [655, 3918], [655, 3744]], [[683, 3744], [683, 3918], [683, 3918], [683, 3744]], [[739, 3744], [739, 3918], [739, 3918], [739, 3744]], [[753, 3744], [753, 3918], [767, 3918], [767, 3744]], [[795, 3744], [795, 3918], [795, 3918], [795, 3744]], [[837, 3744], [837, 3918], [837, 3918], [837, 3744]], [[879, 3744], [879, 3918], [879, 3918], [879, 3744]], [[893, 3744], [893, 3918], [907, 3918], [907, 3744]], [[921, 3744], [921, 3918], [921, 3918], [921, 3744]], [[935, 3744], [935, 3918], [963, 3918], [963, 3744]], [[1019, 3744], [1019, 3918], [1019, 3918], [1019, 3744]], [[1075, 3744], [1075, 3918], [1075, 3918], [1075, 3744]], [[1103, 3744], [1103, 3918], [1103, 3918], [1103, 3744]], [[1131, 3744], [1131, 3918], [1145, 3918], [1145, 3744]], [[1215, 3744], [1215, 3918], [1229, 3918], [1229, 3744]], [[1243, 3744], [1243, 3918], [1257, 3918], [1257, 3744]], [[1271, 3744], [1271, 3918], [1285, 3918], [1285, 3744]], [[1299, 3744], [1299, 3918], [1313, 3918], [1313, 3744]], [[1383, 3744], [1383, 3918], [1397, 3918], [1397, 3744]], [[1411, 3744], [1411, 3918], [1439, 3918], [1439, 3744]], [[1453, 3744], [1453, 3918], [1467, 3918], [1467, 3744]], [[1509, 3744], [1509, 3918], [1509, 3918], [1509, 3744]], [[1537, 3744], [1537, 3918], [1537, 3918], [1537, 3744]], [[1551, 3744], [1551, 3918], [1551, 3918], [1551, 3744]], [[1565, 3744], [1565, 3918], [1565, 3918], [1565, 3744]], [[1579, 3744], [1579, 3918], [1579, 3918], [1579, 3744]], [[1607, 3744], [1607, 3918], [1621, 3918], [1621, 3744]], [[1635, 3744], [1635, 3918], [1649, 3918], [1649, 3744]], [[1663, 3744], [1663, 3918], [1663, 3918], [1663, 3744]], [[1691, 3744], [1691, 3918], [1719, 3918], [1719, 3744]], [[1747, 3744], [1747, 3918], [1761, 3918], [1761, 3744]], [[1775, 3744], [1775, 3918], [1789, 3918], [1789, 3744]], [[1803, 3744], [1803, 3918], [1817, 3918], [1817, 3744]], [[1845, 3744], [1845, 3918], [1845, 3918], [1845, 3744]], [[1873, 3744], [1873, 3918], [1873, 3918], [1873, 3744]], [[1943, 3744], [1943, 3918], [1957, 3918], [1957, 3744]], [[1971, 3744], [1971, 3918], [1971, 3918], [1971, 3744]], [[1985, 3744], [1985, 3918], [1999, 3918], [1999, 3744]], [[2041, 3744], [2041, 3918], [2041, 3918], [2041, 3744]], [[2055, 3744], [2055, 3918], [2055, 3918], [2055, 3744]], [[2083, 3744], [2083, 3918], [2083, 3918], [2083, 3744]], [[2097, 3744], [2097, 3918], [2111, 3918], [2111, 3744]], [[2153, 3744], [2153, 3918], [2153, 3918], [2153, 3744]], [[2209, 3744], [2209, 3918], [2209, 3918], [2209, 3744]], [[2237, 3744], [2237, 3918], [2237, 3918], [2237, 3744]], [[2265, 3744], [2265, 3918], [2279, 3918], [2279, 3744]], [[2335, 3744], [2335, 3918], [2349, 3918], [2349, 3744]], [[2363, 3744], [2363, 3918], [2377, 3918], [2377, 3744]], [[2419, 3744], [2419, 3918], [2433, 3918], [2433, 3744]], [[2475, 3744], [2475, 3918], [2475, 3918], [2475, 3744]], [[2517, 3744], [2517, 3918], [2517, 3918], [2517, 3744]], [[2545, 3744], [2545, 3918], [2545, 3918], [2545, 3744]], [[2601, 3744], [2601, 3918], [2601, 3918], [2601, 3744]], [[2643, 3744], [2643, 3918], [2643, 3918], [2643, 3744]], [[2657, 3744], [2657, 3918], [2671, 3918], [2671, 3744]], [[2699, 3744], [2699, 3918], [2713, 3918], [2713, 3744]], [[2741, 3744], [2741, 3918], [2741, 3918], [2741, 3744]], [[2769, 3744], [2769, 3918], [2769, 3918], [2769, 3744]], [[2811, 3744], [2811, 3918], [2825, 3918], [2825, 3744]], [[2839, 3744], [2839, 3918], [2839, 3918], [2839, 3744]], [[2881, 3744], [2881, 3918], [2895, 3918], [2895, 3744]], [[2923, 3744], [2923, 3918], [2923, 3918], [2923, 3744]], [[2965, 3744], [2965, 3918], [2979, 3918], [2979, 3744]], [[3021, 3744], [3021, 3918], [3035, 3918], [3035, 3744]], [[3049, 3744], [3049, 3918], [3049, 3918], [3049, 3744]], [[3077, 3744], [3077, 3918], [3091, 3918], [3091, 3744]], [[3119, 3744], [3119, 3918], [3133, 3918], [3133, 3744]]], "confidences": [0.9999858140945435, 0.9996674060821533, 0.9778488278388977, 0.999860405921936, 0.9980079531669617, 0.9999980926513672, 0.9997289776802063, 0.9999096393585205, 0.9999042749404907, 0.9987836480140686, 0.999509334564209, 0.8447310328483582, 0.9997413754463196, 0.9830690622329712, 0.9998390674591064, 0.8895362615585327, 0.9999918937683105, 0.9990143775939941, 0.9999878406524658, 0.9991787075996399, 0.9999074935913086, 0.999941349029541, 0.9998675584793091, 0.9998282194137573, 0.99846351146698, 0.9999916553497314, 0.9999760389328003, 0.9508774876594543, 0.9997891783714294, 0.9323558807373047, 0.9861510396003723, 0.9936410784721375, 0.9994382262229919, 0.9971796274185181, 0.9985735416412354, 0.9859241843223572, 0.9663385152816772, 0.9317023158073425, 0.9961659908294678, 0.9577418565750122, 0.9928492307662964, 0.9323335886001587, 0.9990610480308533, 0.9972244501113892, 0.9995347261428833, 0.9952410459518433, 0.9984773993492126, 0.999396800994873, 0.9987291693687439, 0.8243120908737183, 0.9955060482025146, 0.7022139430046082, 0.9865391850471497, 0.9992412328720093, 0.9976450800895691, 0.9810840487480164, 0.9991329312324524, 0.9990897178649902, 0.9992324113845825, 0.998461127281189, 0.9994111061096191, 0.9990944862365723, 0.9991432428359985, 0.9482150077819824, 0.9927623867988586, 0.9994828701019287, 0.953675389289856, 0.9985700845718384, 0.9993718266487122, 0.94927978515625, 0.9973020553588867, 0.9952284097671509, 0.9812739491462708, 0.9950826168060303], "line": {"id": "line_22", "bbox": [333, 3744, 3133, 3918], "type": "bbox"}}, {"prediction": "\u0649\u0627\u0644\u0648\u0645\u0644\u0627\u0642 \u0645\u062b \u0647\u0641\u0627\u0644\u062e \u0649\u0644\u0639 \u0629\u0628\u0627\u0635\u0639\u0644\u0627 \u0639\u0645\u062c\u0654\u0627 \u0627\u0645 \u0647\u064a\u0641 \u0647\u0644 \u0645\u0633\u0631 \u0645 \u0628\u062c\u0639\u062a \u0646\u064a\u0637\u0642\u064a \u0646\u0628 \u0649\u0644\u0639 \u0649\u0644\u0627 \u0628\u0646\u0627\u062a\u0643\u0644\u0627", "cuts": [[[374, 3912], [374, 4081], [374, 4081], [374, 3912]], [[416, 3912], [416, 4081], [430, 4081], [430, 3912]], [[444, 3912], [444, 4081], [458, 4081], [458, 3912]], [[486, 3912], [486, 4081], [500, 4081], [500, 3912]], [[528, 3912], [528, 4081], [528, 4081], [528, 3912]], [[598, 3912], [598, 4081], [598, 4081], [598, 3912]], [[612, 3912], [612, 4081], [612, 4081], [612, 3912]], [[641, 3912], [641, 4081], [641, 4081], [641, 3912]], [[669, 3912], [669, 4081], [683, 4081], [683, 3912]], [[697, 3912], [697, 4081], [711, 4081], [711, 3912]], [[739, 3912], [739, 4081], [739, 4081], [739, 3912]], [[767, 3912], [767, 4081], [767, 4081], [767, 3912]], [[781, 3912], [781, 4081], [795, 4081], [795, 3912]], [[823, 3912], [823, 4081], [823, 4081], [823, 3912]], [[851, 3912], [851, 4081], [865, 4081], [865, 3912]], [[879, 3912], [879, 4081], [893, 4081], [893, 3912]], [[921, 3912], [921, 4081], [935, 4081], [935, 3912]], [[963, 3912], [963, 4081], [977, 4081], [977, 3912]], [[1019, 3912], [1019, 4081], [1019, 4081], [1019, 3912]], [[1033, 3912], [1033, 4081], [1033, 4081], [1033, 3912]], [[1047, 3912], [1047, 4081], [1061, 4081], [1061, 3912]], [[1089, 3912], [1089, 4081], [1103, 4081], [1103, 3912]], [[1117, 3912], [1117, 4081], [1117, 4081], [1117, 3912]], [[1145, 3912], [1145, 4081], [1145, 4081], [1145, 3912]], [[1173, 3912], [1173, 4081], [1187, 4081], [1187, 3912]], [[1229, 3912], [1229, 4081], [1229, 4081], [1229, 3912]], [[1271, 3912], [1271, 4081], [1285, 4081], [1285, 3912]], [[1313, 3912], [1313, 4081], [1313, 4081], [1313, 3912]], [[1327, 3912], [1327, 4081], [1327, 4081], [1327, 3912]], [[1341, 3912], [1341, 4081], [1356, 4081], [1356, 3912]], [[1370, 3912], [1370, 4081], [1384, 4081], [1384, 3912]], [[1412, 3912], [1412, 4081], [1426, 4081], [1426, 3912]], [[1440, 3912], [1440, 4081], [1454, 4081], [1454, 3912]], [[1482, 3912], [1482, 4081], [1482, 4081], [1482, 3912]], [[1496, 3912], [1496, 4081], [1496, 4081], [1496, 3912]], [[1524, 3912], [1524, 4081], [1524, 4081], [1524, 3912]], [[1538, 3912], [1538, 4081], [1538, 4081], [1538, 3912]], [[1594, 3912], [1594, 4081], [1608, 4081], [1608, 3912]], [[1636, 3912], [1636, 4081], [1650, 4081], [1650, 3912]], [[1664, 3912], [1664, 4081], [1664, 4081], [1664, 3912]], [[1692, 3912], [1692, 4081], [1692, 4081], [1692, 3912]], [[1720, 3912], [1720, 4081], [1720, 4081], [1720, 3912]], [[1748, 3912], [1748, 4081], [1762, 4081], [1762, 3912]], [[1776, 3912], [1776, 4081], [1776, 4081], [1776, 3912]], [[1804, 3912], [1804, 4081], [1818, 4081], [1818, 3912]], [[1832, 3912], [1832, 4081], [1832, 4081], [1832, 3912]], [[1846, 3912], [1846, 4081], [1860, 4081], [1860, 3912]], [[1916, 3912], [1916, 4081], [1916, 4081], [1916, 3912]], [[1972, 3912], [1972, 4081], [1972, 4081], [1972, 3912]], [[1986, 3912], [1986, 4081], [2000, 4081], [2000, 3912]], [[2042, 3912], [2042, 4081], [2042, 4081], [2042, 3912]], [[2084, 3912], [2084, 4081], [2099, 4081], [2099, 3912]], [[2141, 3912], [2141, 4081], [2141, 4081], [2141, 3912]], [[2197, 3912], [2197, 4081], [2211, 4081], [2211, 3912]], [[2253, 3912], [2253, 4081], [2253, 4081], [2253, 3912]], [[2281, 3912], [2281, 4081], [2281, 4081], [2281, 3912]], [[2309, 3912], [2309, 4081], [2323, 4081], [2323, 3912]], [[2351, 3912], [2351, 4081], [2365, 4081], [2365, 3912]], [[2379, 3912], [2379, 4081], [2379, 4081], [2379, 3912]], [[2407, 3912], [2407, 4081], [2421, 4081], [2421, 3912]], [[2463, 3912], [2463, 4081], [2477, 4081], [2477, 3912]], [[2491, 3912], [2491, 4081], [2505, 4081], [2505, 3912]], [[2519, 3912], [2519, 4081], [2519, 4081], [2519, 3912]], [[2547, 3912], [2547, 4081], [2561, 4081], [2561, 3912]], [[2575, 3912], [2575, 4081], [2575, 4081], [2575, 3912]], [[2603, 3912], [2603, 4081], [2617, 4081], [2617, 3912]], [[2687, 3912], [2687, 4081], [2687, 4081], [2687, 3912]], [[2701, 3912], [2701, 4081], [2701, 4081], [2701, 3912]], [[2715, 3912], [2715, 4081], [2729, 4081], [2729, 3912]], [[2771, 3912], [2771, 4081], [2771, 4081], [2771, 3912]], [[2813, 3912], [2813, 4081], [2813, 4081], [2813, 3912]], [[2828, 3912], [2828, 4081], [2842, 4081], [2842, 3912]], [[2856, 3912], [2856, 4081], [2856, 4081], [2856, 3912]], [[2870, 3912], [2870, 4081], [2870, 4081], [2870, 3912]], [[2912, 3912], [2912, 4081], [2912, 4081], [2912, 3912]], [[2926, 3912], [2926, 4081], [2926, 4081], [2926, 3912]], [[2954, 3912], [2954, 4081], [2954, 4081], [2954, 3912]], [[2982, 3912], [2982, 4081], [2982, 4081], [2982, 3912]], [[3024, 3912], [3024, 4081], [3024, 4081], [3024, 3912]], [[3108, 3912], [3108, 4081], [3108, 4081], [3108, 3912]], [[3122, 3912], [3122, 4081], [3136, 4081], [3136, 3912]]], "confidences": [0.991776704788208, 0.9966753721237183, 0.9947142004966736, 0.9186890721321106, 0.9635366797447205, 0.9986220598220825, 0.9777283668518066, 0.9586911797523499, 0.9998502731323242, 0.9988514184951782, 0.9999862909317017, 0.46282950043678284, 0.973861575126648, 0.42882752418518066, 0.9648494124412537, 0.9557760953903198, 0.9976227879524231, 0.5231557488441467, 0.7373040914535522, 0.997160792350769, 0.9977774024009705, 0.9998714923858643, 0.9994800686836243, 0.5984565019607544, 0.9999616146087646, 0.953172504901886, 0.9998903274536133, 0.5577518939971924, 0.6261033415794373, 0.9999628067016602, 0.9987449645996094, 0.9979907274246216, 0.9999592304229736, 0.9994562268257141, 0.776331901550293, 0.9890751838684082, 0.9983356595039368, 0.986653745174408, 0.9932841062545776, 0.9770086407661438, 0.8269332051277161, 0.9864249229431152, 0.9786643981933594, 0.9915361404418945, 0.9968346953392029, 0.9864396452903748, 0.9924086332321167, 0.998105525970459, 0.9923842549324036, 0.9835927486419678, 0.9957876801490784, 0.9960395097732544, 0.9908498525619507, 0.9995176792144775, 0.9677330255508423, 0.9952746629714966, 0.9993299245834351, 0.998761773109436, 0.9985032081604004, 0.9977524876594543, 0.9977297186851501, 0.9998428821563721, 0.9996432065963745, 0.9972556233406067, 0.8950211405754089, 0.982606828212738, 0.9643605351448059, 0.9769435524940491, 0.9995658993721008, 0.9992498755455017, 0.7895783185958862, 0.9948700666427612, 0.8788118362426758, 0.9814590215682983, 0.9998113512992859, 0.8790767788887024, 0.7014104723930359, 0.7737085819244385, 0.9973267316818237, 0.9496884942054749, 0.9877499938011169], "line": {"id": "line_23", "bbox": [304, 3912, 3136, 4081], "type": "bbox"}}, {"prediction": "\u0647\u064a\u0644\u0639 \u0627\u0645 \u0641\u0644\u0627\u062e\u064a\u0648 \u062f\u062d\u0644\u0627 \u0627\u0630\u0647 \u0649\u0644\u0639 \u0647\u0648\u0636\u0648 \u064a\u0641 \u0644\u0645\u0639\u064a \u0646\u0627\u0643\u0641 \u0647\u0631\u0645\u0654\u0627 \u0644\u062b\u062a\u0645 \u0627\u0646\u0654\u0627\u0648 \u0644\u0627\u0642 \u0627\u0645\u0628 \u0645\u0644\u0639\u0654\u0627", "cuts": [[[305, 4078], [305, 4239], [305, 4239], [305, 4078]], [[348, 4078], [348, 4239], [348, 4239], [348, 4078]], [[362, 4078], [362, 4239], [376, 4239], [376, 4078]], [[390, 4078], [390, 4239], [404, 4239], [404, 4078]], [[447, 4078], [447, 4239], [447, 4239], [447, 4078]], [[461, 4078], [461, 4239], [475, 4239], [475, 4078]], [[489, 4078], [489, 4239], [489, 4239], [489, 4078]], [[518, 4078], [518, 4239], [532, 4239], [532, 4078]], [[617, 4078], [617, 4239], [617, 4239], [617, 4078]], [[645, 4078], [645, 4239], [645, 4239], [645, 4078]], [[659, 4078], [659, 4239], [674, 4239], [674, 4078]], [[702, 4078], [702, 4239], [702, 4239], [702, 4078]], [[730, 4078], [730, 4239], [744, 4239], [744, 4078]], [[787, 4078], [787, 4239], [801, 4239], [801, 4078]], [[815, 4078], [815, 4239], [830, 4239], [830, 4078]], [[872, 4078], [872, 4239], [872, 4239], [872, 4078]], [[900, 4078], [900, 4239], [900, 4239], [900, 4078]], [[915, 4078], [915, 4239], [929, 4239], [929, 4078]], [[957, 4078], [957, 4239], [971, 4239], [971, 4078]], [[985, 4078], [985, 4239], [1000, 4239], [1000, 4078]], [[1028, 4078], [1028, 4239], [1042, 4239], [1042, 4078]], [[1085, 4078], [1085, 4239], [1085, 4239], [1085, 4078]], [[1113, 4078], [1113, 4239], [1113, 4239], [1113, 4078]], [[1156, 4078], [1156, 4239], [1170, 4239], [1170, 4078]], [[1198, 4078], [1198, 4239], [1198, 4239], [1198, 4078]], [[1212, 4078], [1212, 4239], [1212, 4239], [1212, 4078]], [[1241, 4078], [1241, 4239], [1241, 4239], [1241, 4078]], [[1283, 4078], [1283, 4239], [1297, 4239], [1297, 4078]], [[1311, 4078], [1311, 4239], [1311, 4239], [1311, 4078]], [[1397, 4078], [1397, 4239], [1397, 4239], [1397, 4078]], [[1439, 4078], [1439, 4239], [1453, 4239], [1453, 4078]], [[1524, 4078], [1524, 4239], [1524, 4239], [1524, 4078]], [[1552, 4078], [1552, 4239], [1552, 4239], [1552, 4078]], [[1595, 4078], [1595, 4239], [1595, 4239], [1595, 4078]], [[1609, 4078], [1609, 4239], [1609, 4239], [1609, 4078]], [[1638, 4078], [1638, 4239], [1652, 4239], [1652, 4078]], [[1694, 4078], [1694, 4239], [1694, 4239], [1694, 4078]], [[1723, 4078], [1723, 4239], [1723, 4239], [1723, 4078]], [[1765, 4078], [1765, 4239], [1765, 4239], [1765, 4078]], [[1793, 4078], [1793, 4239], [1793, 4239], [1793, 4078]], [[1822, 4078], [1822, 4239], [1836, 4239], [1836, 4078]], [[1978, 4078], [1978, 4239], [1978, 4239], [1978, 4078]], [[2049, 4078], [2049, 4239], [2063, 4239], [2063, 4078]], [[2077, 4078], [2077, 4239], [2077, 4239], [2077, 4078]], [[2120, 4078], [2120, 4239], [2120, 4239], [2120, 4078]], [[2148, 4078], [2148, 4239], [2162, 4239], [2162, 4078]], [[2205, 4078], [2205, 4239], [2205, 4239], [2205, 4078]], [[2247, 4078], [2247, 4239], [2261, 4239], [2261, 4078]], [[2290, 4078], [2290, 4239], [2290, 4239], [2290, 4078]], [[2304, 4078], [2304, 4239], [2318, 4239], [2318, 4078]], [[2332, 4078], [2332, 4239], [2332, 4239], [2332, 4078]], [[2346, 4078], [2346, 4239], [2361, 4239], [2361, 4078]], [[2403, 4078], [2403, 4239], [2417, 4239], [2417, 4078]], [[2431, 4078], [2431, 4239], [2446, 4239], [2446, 4078]], [[2474, 4078], [2474, 4239], [2474, 4239], [2474, 4078]], [[2488, 4078], [2488, 4239], [2502, 4239], [2502, 4078]], [[2531, 4078], [2531, 4239], [2531, 4239], [2531, 4078]], [[2545, 4078], [2545, 4239], [2559, 4239], [2559, 4078]], [[2573, 4078], [2573, 4239], [2573, 4239], [2573, 4078]], [[2601, 4078], [2601, 4239], [2601, 4239], [2601, 4078]], [[2616, 4078], [2616, 4239], [2616, 4239], [2616, 4078]], [[2672, 4078], [2672, 4239], [2672, 4239], [2672, 4078]], [[2701, 4078], [2701, 4239], [2701, 4239], [2701, 4078]], [[2757, 4078], [2757, 4239], [2757, 4239], [2757, 4078]], [[2772, 4078], [2772, 4239], [2772, 4239], [2772, 4078]], [[2786, 4078], [2786, 4239], [2786, 4239], [2786, 4078]], [[2814, 4078], [2814, 4239], [2842, 4239], [2842, 4078]], [[2871, 4078], [2871, 4239], [2871, 4239], [2871, 4078]], [[2928, 4078], [2928, 4239], [2942, 4239], [2942, 4078]], [[2970, 4078], [2970, 4239], [2970, 4239], [2970, 4078]], [[2984, 4078], [2984, 4239], [2998, 4239], [2998, 4078]], [[3013, 4078], [3013, 4239], [3027, 4239], [3027, 4078]], [[3041, 4078], [3041, 4239], [3041, 4239], [3041, 4078]], [[3055, 4078], [3055, 4239], [3069, 4239], [3069, 4078]], [[3098, 4078], [3098, 4239], [3098, 4239], [3098, 4078]], [[3112, 4078], [3112, 4239], [3112, 4239], [3112, 4078]]], "confidences": [0.7411984801292419, 0.6705909371376038, 0.9994827508926392, 0.9999536275863647, 0.9637630581855774, 0.990339457988739, 0.9970928430557251, 0.9842832088470459, 0.9999134540557861, 0.8257625699043274, 0.9998522996902466, 0.9860520362854004, 0.8672003149986267, 0.999895453453064, 0.9987590312957764, 0.6380735635757446, 0.9966011047363281, 0.9999879598617554, 0.9917520880699158, 0.9998186230659485, 0.9985596537590027, 0.9999741315841675, 0.9970946311950684, 0.9999897480010986, 0.9996445178985596, 0.9999563694000244, 0.9980692267417908, 0.9994539618492126, 0.5508994460105896, 0.9075180888175964, 0.6853848099708557, 0.8571422696113586, 0.7955424189567566, 0.8907495737075806, 0.9879714846611023, 0.9994396567344666, 0.848770260810852, 0.9981479644775391, 0.909099280834198, 0.9869056344032288, 0.9833765625953674, 0.9991958737373352, 0.9672496318817139, 0.9993138313293457, 0.5518977046012878, 0.8995003700256348, 0.9811897277832031, 0.9994994401931763, 0.9018236994743347, 0.9840490818023682, 0.9967617392539978, 0.9858490228652954, 0.7903525233268738, 0.996831476688385, 0.9998800754547119, 0.9991426467895508, 0.9994601607322693, 0.9994288086891174, 0.9615521430969238, 0.8211493492126465, 0.9944064617156982, 0.9838215112686157, 0.9928451180458069, 0.9992262125015259, 0.9864301681518555, 0.980707585811615, 0.9878180027008057, 0.7048366665840149, 0.9973539113998413, 0.8788666129112244, 0.9915334582328796, 0.9992111921310425, 0.9873242378234863, 0.9851594567298889, 0.5106502771377563, 0.9952054023742676], "line": {"id": "line_24", "bbox": [305, 4078, 3126, 4239], "type": "bbox"}}, {"prediction": "\u062f\u064a\u0634\u0631\u0644\u0627 \u0649\u0644\u0627 \u0646\u064a\u0637\u0642\u064a \u0646\u0628 \u0649\u0644\u0639! \u064a\u0645\u0639\u0633\u0648 \u0645\u0627\u0644\u0633\u0644\u0627 \u0647\u064a\u0644\u0639 \u0646\u0633\u062d\u0644\u0627 \u064a\u0628\u0654\u0627 \u0645\u0627\u0644 \u0627\u0644\u0627\u062b\u062a\u0645\u0655\u0627 \u0629\u0640\u0639\u064a\u0634\u0644\u0627 \u0639\u064a\u0645\u062c", "cuts": [[[316, 4249], [316, 4413], [331, 4413], [331, 4249]], [[359, 4249], [359, 4413], [359, 4413], [359, 4249]], [[402, 4249], [402, 4413], [402, 4413], [402, 4249]], [[444, 4249], [444, 4413], [444, 4413], [444, 4249]], [[459, 4249], [459, 4413], [473, 4413], [473, 4249]], [[487, 4249], [487, 4413], [501, 4413], [501, 4249]], [[515, 4249], [515, 4413], [530, 4413], [530, 4249]], [[587, 4249], [587, 4413], [587, 4413], [587, 4249]], [[601, 4249], [601, 4413], [601, 4413], [601, 4249]], [[629, 4249], [629, 4413], [629, 4413], [629, 4249]], [[643, 4249], [643, 4413], [658, 4413], [658, 4249]], [[686, 4249], [686, 4413], [700, 4413], [700, 4249]], [[715, 4249], [715, 4413], [715, 4413], [715, 4249]], [[743, 4249], [743, 4413], [757, 4413], [757, 4249]], [[800, 4249], [800, 4413], [814, 4413], [814, 4249]], [[828, 4249], [828, 4413], [843, 4413], [843, 4249]], [[857, 4249], [857, 4413], [871, 4413], [871, 4249]], [[914, 4249], [914, 4413], [914, 4413], [914, 4249]], [[942, 4249], [942, 4413], [942, 4413], [942, 4249]], [[971, 4249], [971, 4413], [985, 4413], [985, 4249]], [[1070, 4249], [1070, 4413], [1070, 4413], [1070, 4249]], [[1084, 4249], [1084, 4413], [1084, 4413], [1084, 4249]], [[1113, 4249], [1113, 4413], [1113, 4413], [1113, 4249]], [[1141, 4249], [1141, 4413], [1141, 4413], [1141, 4249]], [[1155, 4249], [1155, 4413], [1184, 4413], [1184, 4249]], [[1212, 4249], [1212, 4413], [1226, 4413], [1226, 4249]], [[1255, 4249], [1255, 4413], [1255, 4413], [1255, 4249]], [[1269, 4249], [1269, 4413], [1269, 4413], [1269, 4249]], [[1312, 4249], [1312, 4413], [1326, 4413], [1326, 4249]], [[1369, 4249], [1369, 4413], [1383, 4413], [1383, 4249]], [[1397, 4249], [1397, 4413], [1411, 4413], [1411, 4249]], [[1426, 4249], [1426, 4413], [1440, 4413], [1440, 4249]], [[1482, 4249], [1482, 4413], [1482, 4413], [1482, 4249]], [[1497, 4249], [1497, 4413], [1511, 4413], [1511, 4249]], [[1553, 4249], [1553, 4413], [1553, 4413], [1553, 4249]], [[1582, 4249], [1582, 4413], [1582, 4413], [1582, 4249]], [[1596, 4249], [1596, 4413], [1610, 4413], [1610, 4249]], [[1625, 4249], [1625, 4413], [1639, 4413], [1639, 4249]], [[1653, 4249], [1653, 4413], [1653, 4413], [1653, 4249]], [[1681, 4249], [1681, 4413], [1681, 4413], [1681, 4249]], [[1710, 4249], [1710, 4413], [1710, 4413], [1710, 4249]], [[1738, 4249], [1738, 4413], [1738, 4413], [1738, 4249]], [[1781, 4249], [1781, 4413], [1795, 4413], [1795, 4249]], [[1824, 4249], [1824, 4413], [1824, 4413], [1824, 4249]], [[1866, 4249], [1866, 4413], [1895, 4413], [1895, 4249]], [[1923, 4249], [1923, 4413], [1923, 4413], [1923, 4249]], [[1937, 4249], [1937, 4413], [1952, 4413], [1952, 4249]], [[1980, 4249], [1980, 4413], [1994, 4413], [1994, 4249]], [[2008, 4249], [2008, 4413], [2023, 4413], [2023, 4249]], [[2065, 4249], [2065, 4413], [2065, 4413], [2065, 4249]], [[2080, 4249], [2080, 4413], [2080, 4413], [2080, 4249]], [[2108, 4249], [2108, 4413], [2108, 4413], [2108, 4249]], [[2122, 4249], [2122, 4413], [2122, 4413], [2122, 4249]], [[2136, 4249], [2136, 4413], [2151, 4413], [2151, 4249]], [[2222, 4249], [2222, 4413], [2236, 4413], [2236, 4249]], [[2264, 4249], [2264, 4413], [2279, 4413], [2279, 4249]], [[2293, 4249], [2293, 4413], [2307, 4413], [2307, 4249]], [[2321, 4249], [2321, 4413], [2336, 4413], [2336, 4249]], [[2378, 4249], [2378, 4413], [2378, 4413], [2378, 4249]], [[2407, 4249], [2407, 4413], [2407, 4413], [2407, 4249]], [[2435, 4249], [2435, 4413], [2435, 4413], [2435, 4249]], [[2463, 4249], [2463, 4413], [2463, 4413], [2463, 4249]], [[2492, 4249], [2492, 4413], [2492, 4413], [2492, 4249]], [[2520, 4249], [2520, 4413], [2520, 4413], [2520, 4249]], [[2549, 4249], [2549, 4413], [2549, 4413], [2549, 4249]], [[2563, 4249], [2563, 4413], [2563, 4413], [2563, 4249]], [[2577, 4249], [2577, 4413], [2591, 4413], [2591, 4249]], [[2606, 4249], [2606, 4413], [2606, 4413], [2606, 4249]], [[2663, 4249], [2663, 4413], [2677, 4413], [2677, 4249]], [[2762, 4249], [2762, 4413], [2762, 4413], [2762, 4249]], [[2805, 4249], [2805, 4413], [2805, 4413], [2805, 4249]], [[2847, 4249], [2847, 4413], [2847, 4413], [2847, 4249]], [[2876, 4249], [2876, 4413], [2876, 4413], [2876, 4249]], [[2890, 4249], [2890, 4413], [2904, 4413], [2904, 4249]], [[2919, 4249], [2919, 4413], [2933, 4413], [2933, 4249]], [[2975, 4249], [2975, 4413], [2990, 4413], [2990, 4249]], [[3061, 4249], [3061, 4413], [3061, 4413], [3061, 4249]], [[3089, 4249], [3089, 4413], [3089, 4413], [3089, 4249]], [[3103, 4249], [3103, 4413], [3103, 4413], [3103, 4249]]], "confidences": [0.9999558925628662, 0.9997685551643372, 0.9997368454933167, 0.9977124929428101, 0.999941349029541, 0.9980744123458862, 0.9950352907180786, 0.9224417805671692, 0.8580173254013062, 0.9524855613708496, 0.9989435076713562, 0.9999842643737793, 0.9986186027526855, 0.9998856782913208, 0.9995737671852112, 0.9912926554679871, 0.9999467134475708, 0.9999945163726807, 0.9995242357254028, 0.9999788999557495, 0.9609777331352234, 0.9153129458427429, 0.9045202136039734, 0.9997207522392273, 0.9395636916160583, 0.9894552826881409, 0.9998144507408142, 0.9997990727424622, 0.9999853372573853, 0.9999799728393555, 1.0, 0.9706733822822571, 0.9758889675140381, 0.9932337403297424, 0.8476508259773254, 0.9795082807540894, 0.9796251058578491, 0.9970026612281799, 0.4895252287387848, 0.5919338464736938, 0.9867957830429077, 0.7614318132400513, 0.9896360039710999, 0.9846451878547668, 0.9974541068077087, 0.5357677340507507, 0.9974640607833862, 0.9990847110748291, 0.9961497783660889, 0.9180766940116882, 0.8193199634552002, 0.9990463852882385, 0.9899054169654846, 0.9957371950149536, 0.9989354014396667, 0.9109645485877991, 0.9999076128005981, 0.999586284160614, 0.7132347226142883, 0.9970788955688477, 0.9983876943588257, 0.6264116764068604, 0.9988951086997986, 0.9250513315200806, 0.8208836913108826, 0.8228710293769836, 0.9901149272918701, 0.997815728187561, 0.9998468160629272, 0.9990491271018982, 0.9956784844398499, 0.7115011811256409, 0.9978455305099487, 0.9982227683067322, 0.9991169571876526, 0.9916975498199463, 0.9556155204772949, 0.9978026747703552, 0.9827321171760559], "line": {"id": "line_25", "bbox": [302, 4249, 3132, 4413], "type": "bbox"}}, {"prediction": ".\u0649\u0644\u0639 \u064a\u0641 \u0644\u0648\u0642\u0644\u0627 \u0649\u062f\u0646\u0639 \u0631\u062b\u0643 \u062f\u0642 \u0647\u062a\u0635\u0627\u062e \u0636\u0639\u0628\u0627 \u062f\u064a\u0634\u0631\u0644\u0627 \u0644\u0627\u0642\u0641 \u0643\u0644 \u0641\u0627\u0627\u062e\u0645 \u064a\u0636\u0641\u0627\u0631 \u0647\u0627 \u0647\u0644 \u0644\u064a\u0642\u0648", "cuts": [[[297, 4427], [297, 4585], [297, 4585], [297, 4427]], [[350, 4427], [350, 4585], [350, 4585], [350, 4427]], [[363, 4427], [363, 4585], [376, 4585], [376, 4427]], [[389, 4427], [389, 4585], [389, 4585], [389, 4427]], [[429, 4427], [429, 4585], [442, 4585], [442, 4427]], [[468, 4427], [468, 4585], [468, 4585], [468, 4427]], [[481, 4427], [481, 4585], [481, 4585], [481, 4427]], [[508, 4427], [508, 4585], [534, 4585], [534, 4427]], [[587, 4427], [587, 4585], [600, 4585], [600, 4427]], [[626, 4427], [626, 4585], [639, 4585], [639, 4427]], [[679, 4427], [679, 4585], [679, 4585], [679, 4427]], [[705, 4427], [705, 4585], [705, 4585], [705, 4427]], [[718, 4427], [718, 4585], [718, 4585], [718, 4427]], [[732, 4427], [732, 4585], [745, 4585], [745, 4427]], [[797, 4427], [797, 4585], [797, 4585], [797, 4427]], [[850, 4427], [850, 4585], [863, 4585], [863, 4427]], [[890, 4427], [890, 4585], [890, 4585], [890, 4427]], [[916, 4427], [916, 4585], [916, 4585], [916, 4427]], [[955, 4427], [955, 4585], [969, 4585], [969, 4427]], [[995, 4427], [995, 4585], [1008, 4585], [1008, 4427]], [[1021, 4427], [1021, 4585], [1021, 4585], [1021, 4427]], [[1048, 4427], [1048, 4585], [1061, 4585], [1061, 4427]], [[1219, 4427], [1219, 4585], [1219, 4585], [1219, 4427]], [[1245, 4427], [1245, 4585], [1258, 4585], [1258, 4427]], [[1285, 4427], [1285, 4585], [1285, 4585], [1285, 4427]], [[1311, 4427], [1311, 4585], [1324, 4585], [1324, 4427]], [[1337, 4427], [1337, 4585], [1337, 4585], [1337, 4427]], [[1364, 4427], [1364, 4585], [1364, 4585], [1364, 4427]], [[1416, 4427], [1416, 4585], [1429, 4585], [1429, 4427]], [[1456, 4427], [1456, 4585], [1469, 4585], [1469, 4427]], [[1495, 4427], [1495, 4585], [1495, 4585], [1495, 4427]], [[1535, 4427], [1535, 4585], [1548, 4585], [1548, 4427]], [[1614, 4427], [1614, 4585], [1614, 4585], [1614, 4427]], [[1666, 4427], [1666, 4585], [1666, 4585], [1666, 4427]], [[1693, 4427], [1693, 4585], [1706, 4585], [1706, 4427]], [[1732, 4427], [1732, 4585], [1732, 4585], [1732, 4427]], [[1745, 4427], [1745, 4585], [1759, 4585], [1759, 4427]], [[1798, 4427], [1798, 4585], [1798, 4585], [1798, 4427]], [[1824, 4427], [1824, 4585], [1824, 4585], [1824, 4427]], [[1877, 4427], [1877, 4585], [1877, 4585], [1877, 4427]], [[1917, 4427], [1917, 4585], [1930, 4585], [1930, 4427]], [[1943, 4427], [1943, 4585], [1943, 4585], [1943, 4427]], [[1969, 4427], [1969, 4585], [1969, 4585], [1969, 4427]], [[1982, 4427], [1982, 4585], [1996, 4585], [1996, 4427]], [[2048, 4427], [2048, 4585], [2048, 4585], [2048, 4427]], [[2075, 4427], [2075, 4585], [2075, 4585], [2075, 4427]], [[2101, 4427], [2101, 4585], [2114, 4585], [2114, 4427]], [[2140, 4427], [2140, 4585], [2140, 4585], [2140, 4427]], [[2154, 4427], [2154, 4585], [2167, 4585], [2167, 4427]], [[2206, 4427], [2206, 4585], [2219, 4585], [2219, 4427]], [[2272, 4427], [2272, 4585], [2272, 4585], [2272, 4427]], [[2285, 4427], [2285, 4585], [2298, 4585], [2298, 4427]], [[2364, 4427], [2364, 4585], [2377, 4585], [2377, 4427]], [[2404, 4427], [2404, 4585], [2404, 4585], [2404, 4427]], [[2430, 4427], [2430, 4585], [2430, 4585], [2430, 4427]], [[2456, 4427], [2456, 4585], [2456, 4585], [2456, 4427]], [[2470, 4427], [2470, 4585], [2483, 4585], [2483, 4427]], [[2509, 4427], [2509, 4585], [2522, 4585], [2522, 4427]], [[2562, 4427], [2562, 4585], [2562, 4585], [2562, 4427]], [[2601, 4427], [2601, 4585], [2601, 4585], [2601, 4427]], [[2654, 4427], [2654, 4585], [2654, 4585], [2654, 4427]], [[2680, 4427], [2680, 4585], [2680, 4585], [2680, 4427]], [[2720, 4427], [2720, 4585], [2733, 4585], [2733, 4427]], [[2759, 4427], [2759, 4585], [2759, 4585], [2759, 4427]], [[2786, 4427], [2786, 4585], [2786, 4585], [2786, 4427]], [[2838, 4427], [2838, 4585], [2851, 4585], [2851, 4427]], [[2865, 4427], [2865, 4585], [2865, 4585], [2865, 4427]], [[2891, 4427], [2891, 4585], [2891, 4585], [2891, 4427]], [[2917, 4427], [2917, 4585], [2930, 4585], [2930, 4427]], [[2944, 4427], [2944, 4585], [2957, 4585], [2957, 4427]], [[2996, 4427], [2996, 4585], [2996, 4585], [2996, 4427]], [[3023, 4427], [3023, 4585], [3023, 4585], [3023, 4427]], [[3049, 4427], [3049, 4585], [3049, 4585], [3049, 4427]], [[3102, 4427], [3102, 4585], [3102, 4585], [3102, 4427]]], "confidences": [0.8309170007705688, 0.9710848927497864, 0.9978118538856506, 0.9952423572540283, 0.9998619556427002, 0.9853734970092773, 0.9041633605957031, 0.9999642372131348, 0.9992184638977051, 0.987206757068634, 0.9999744892120361, 0.9998753070831299, 0.9998530149459839, 0.9993923902511597, 0.9804210662841797, 0.9999669790267944, 0.9681344628334045, 0.7007457613945007, 0.9999014139175415, 0.9938947558403015, 0.9991243481636047, 0.9994795918464661, 0.9906601309776306, 0.9998043179512024, 0.9999531507492065, 0.9996731281280518, 0.9904140830039978, 0.8484129309654236, 0.9998654127120972, 0.9998722076416016, 0.884601891040802, 0.9997289776802063, 0.5172210335731506, 0.9777674078941345, 0.9999169111251831, 0.49916383624076843, 0.9641693830490112, 0.9937703013420105, 0.7306916117668152, 0.9957754015922546, 0.9984592199325562, 0.943457841873169, 0.6241721510887146, 0.9954598546028137, 0.9971427321434021, 0.8888192176818848, 0.9960846900939941, 0.9893342852592468, 0.9664679169654846, 0.9914203882217407, 0.9974316954612732, 0.9991137385368347, 0.9997954964637756, 0.9750413298606873, 0.9770325422286987, 0.9967040419578552, 0.9981144666671753, 0.9363402724266052, 0.9950194358825684, 0.8760650753974915, 0.9999531507492065, 0.9947760105133057, 0.99937504529953, 0.9894686341285706, 0.9319698810577393, 0.9841182231903076, 0.998865008354187, 0.9998772144317627, 0.9999456405639648, 0.9940637946128845, 0.8951064348220825, 0.9981452226638794, 0.9989315867424011, 0.9663097262382507], "line": {"id": "line_26", "bbox": [297, 4427, 3128, 4585], "type": "bbox"}}] \ No newline at end of file diff --git a/tests/resources/xlink.xsd b/tests/resources/xlink.xsd index f55eb6dae..8283fe669 100644 --- a/tests/resources/xlink.xsd +++ b/tests/resources/xlink.xsd @@ -1,75 +1,75 @@ - + - + - - - - - + + + + + - - - - + + + + - - - + + + - - - - - - - + + + + + + + - - - + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - + + + + - + - + diff --git a/tests/test_arrow_dataset.py b/tests/test_arrow_dataset.py index 4ce06031a..31c3fb8ba 100644 --- a/tests/test_arrow_dataset.py +++ b/tests/test_arrow_dataset.py @@ -2,8 +2,10 @@ import json import unittest -from pathlib import Path +import tempfile +import pyarrow as pa +from pathlib import Path from pytest import raises import kraken @@ -13,23 +15,77 @@ thisfile = Path(__file__).resolve().parent resources = thisfile / 'resources' +def _validate_ds(self, path, num_lines, num_empty_lines, ds_type): + with pa.memory_map(path, 'rb') as source: + ds_table = pa.ipc.open_file(source).read_all() + raw_metadata = ds_table.schema.metadata + if not raw_metadata or b'lines' not in raw_metadata: + raise ValueError(f'{file} does not contain a valid metadata record.') + metadata = json.loads(raw_metadata[b'lines']) + self.assertEqual(metadata['type'], + ds_type, + f'Unexpected dataset type (expected: {ds_type}, found: {metadata["type"]}') + self.assertEqual(metadata['counts']['all'], + num_lines, + 'Unexpected number of lines in dataset metadata ' + f'(expected: {num_lines}, found: {metadata["counts"]["all"]}') + self.assertEqual(len(ds_table), + num_lines, + 'Unexpected number of rows in arrow table ' + f'(expected: {num_lines}, found: {metadata["counts"]["all"]}') + + real_empty_lines = len([line for line in ds_table.column('lines') if not str(line[0])]) + self.assertEqual(real_empty_lines, + num_empty_lines, + 'Unexpected number of empty lines in dataset ' + f'(expected: {num_empty_lines}, found: {real_empty_lines}') + + class TestKrakenArrowCompilation(unittest.TestCase): """ Tests for binary datasets """ def setUp(self): - self.xml = resources / '170025120000003,0074.xml' - self.bls = xml.XMLPage(self.xml) + self.xml = resources / '170025120000003,0074-lite.xml' + self.seg = xml.XMLPage(self.xml).to_container() self.box_lines = [resources / '000236.png'] def test_build_path_dataset(self): - pass + with tempfile.NamedTemporaryFile() as tmp_file: + build_binary_dataset(files=4*self.box_lines, + output_file=tmp_file.name, + format_type='path') + _validate_ds(self, tmp_file.name, 4, 0, 'kraken_recognition_bbox') def test_build_xml_dataset(self): - pass + with tempfile.NamedTemporaryFile() as tmp_file: + build_binary_dataset(files=[self.xml], + output_file=tmp_file.name, + format_type='xml') + _validate_ds(self, tmp_file.name, 4, 0, 'kraken_recognition_baseline') + + def test_build_seg_dataset(self): + with tempfile.NamedTemporaryFile() as tmp_file: + build_binary_dataset(files=[self.seg], + output_file=tmp_file.name, + format_type=None) + _validate_ds(self, tmp_file.name, 4, 0, 'kraken_recognition_baseline') - def test_build_obj_dataset(self): - pass + def test_forced_type_dataset(self): + with tempfile.NamedTemporaryFile() as tmp_file: + build_binary_dataset(files=4*self.box_lines, + output_file=tmp_file.name, + format_type='path', + force_type='kraken_recognition_baseline') + _validate_ds(self, tmp_file.name, 4, 0, 'kraken_recognition_baseline') def test_build_empty_dataset(self): - pass + """ + Test that empty lines are retained in compiled dataset. + """ + with tempfile.NamedTemporaryFile() as tmp_file: + build_binary_dataset(files=[self.xml], + output_file=tmp_file.name, + format_type='xml', + skip_empty_lines=False) + _validate_ds(self, tmp_file.name, 5, 1, 'kraken_recognition_baseline') diff --git a/tests/test_merging.py b/tests/test_merging.py index a9a00631e..a32b3a47e 100644 --- a/tests/test_merging.py +++ b/tests/test_merging.py @@ -81,7 +81,7 @@ def test_merging_union(self): model.nn.codec.encode("x").shape, (1, ), "x is known to the loaded model and should be encoded through `new`" ) - + def test_merging_union_with_nfd(self): """ Asserts that union, which only takes into account new the original codec and the new data, works as intended diff --git a/tests/test_newpolygons.py b/tests/test_newpolygons.py new file mode 100644 index 000000000..7c24ffb7b --- /dev/null +++ b/tests/test_newpolygons.py @@ -0,0 +1,454 @@ +# -*- coding: utf-8 -*- + +from contextlib import contextmanager +import unittest +import tempfile +from unittest.mock import Mock, patch +from pathlib import Path +from traceback import print_exc +import warnings +from typing import Optional, List, Union + +from PIL import Image + +from click.testing import CliRunner + +from kraken.containers import ( + BaselineLine, + BaselineOCRRecord, + BBoxLine, + BBoxOCRRecord, + Segmentation, +) +from kraken.lib import xml +from kraken.lib import segmentation +from kraken.lib.models import load_any +from kraken.rpred import mm_rpred, rpred +from kraken.kraken import cli as kraken_cli +from kraken.ketos import cli as ketos_cli +import re + +thisfile = Path(__file__).resolve().parent +resources = thisfile / "resources" + +def mock_extract_polygons(): + return Mock(side_effect=segmentation.extract_polygons) + +class TestNewPolygons(unittest.TestCase): + """ + Tests for the new polygon extraction method. + """ + + def setUp(self): + self.im = Image.open(resources / "bw.png") + self.old_model_path = str(resources / "overfit.mlmodel") + self.old_model = load_any(self.old_model_path) + self.new_model_path = str(resources / "overfit_newpoly.mlmodel") + self.new_model = load_any(self.new_model_path) + self.segmented_img = str(resources / "170025120000003,0074-lite.xml") + self.runner = CliRunner() + self.color_img = resources / "input.tif" + self.arrow_data = str(resources / "merge_tests/base.arrow") + self.simple_bl_seg = Segmentation( + type="baselines", + imagename=resources / "bw.png", + lines=[ + BaselineLine( + id="foo", + baseline=[[0, 10], [2543, 10]], + boundary=[[0, 0], [2543, 0], [2543, 155], [0, 155]], + ) + ], + text_direction="horizontal-lr", + script_detection=False, + ) + + ## RECIPES + + @patch("kraken.rpred.extract_polygons", new_callable=mock_extract_polygons) + def _test_rpred(self, extractor_mock: Mock, *, model, force_no_legacy: bool=False, expect_legacy: bool): + """ + Base recipe for testing rpred with a given model and polygon extraction method + """ + pred = rpred(model, self.im, self.simple_bl_seg, True, no_legacy_polygons=force_no_legacy) + _ = next(pred) + + extractor_mock.assert_called() + for cl in extractor_mock.mock_calls: + self.assertEqual(cl[2]["legacy"], expect_legacy) + + @patch("kraken.rpred.extract_polygons", new_callable=mock_extract_polygons) + def _test_krakencli(self, extractor_mock: Mock, *, args, force_no_legacy: bool=False, expect_legacy: bool,): + """ + Base recipe for testing kraken_cli with a given polygon extraction method + """ + if force_no_legacy: + args = ["--no-legacy-polygons"] + args + + result = self.runner.invoke(kraken_cli, args) + print("kraken", *args) + + if result.exception: + print_exc() + + self.assertEqual(result.exit_code, 0) + extractor_mock.assert_called() + for cl in extractor_mock.mock_calls: + self.assertEqual(cl[2]["legacy"], expect_legacy) + + def _test_ketoscli(self, *, args, expect_legacy: bool, check_exit_code: Optional[Union[int, List[int]]] = 0, patching_dir="kraken.lib.dataset.recognition"): + """ + Base recipe for testing ketos_cli with a given polygon extraction method + """ + with patch(patching_dir + ".extract_polygons", new_callable=mock_extract_polygons) as extractor_mock: + result = self.runner.invoke(ketos_cli, args) + + print("ketos", *args) + if result.exception: + print(result.output) + print_exc() + + if check_exit_code is not None: + if isinstance(check_exit_code, int): + check_exit_code = [check_exit_code] + self.assertIn(result.exit_code, check_exit_code, "Command failed") + + extractor_mock.assert_called() + for cl in extractor_mock.mock_calls: + self.assertEqual(cl[2]["legacy"], expect_legacy) + + ## TESTS + + def test_rpred_from_old_model(self): + """ + Test rpred with old model, check that it uses legacy polygon extraction method + """ + self._test_rpred(model=self.old_model, force_no_legacy=False, expect_legacy=True) + + def test_rpred_from_old_model_force_new(self): + """ + Test rpred with old model, but disabling legacy polygons + """ + self._test_rpred(model=self.old_model, force_no_legacy=True, expect_legacy=False) + + def test_rpred_from_new_model(self): + """ + Test rpred with new model, check that it uses new polygon extraction method + """ + self._test_rpred(model=self.new_model, force_no_legacy=False, expect_legacy=False) + + + def test_krakencli_ocr_old_model(self): + """ + Test kraken_cli with old model, check that it uses legacy polygon extraction method + """ + with tempfile.NamedTemporaryFile() as fp: + self._test_krakencli( + args=['-f', 'xml', '-i', self.segmented_img, fp.name, 'ocr', '-m', self.old_model_path], + force_no_legacy=False, + expect_legacy=True, + ) + + def test_krakencli_ocr_old_model_force_new(self): + """ + Test kraken_cli with old model, check that it uses legacy polygon extraction method + """ + with tempfile.NamedTemporaryFile() as fp: + self._test_krakencli( + args=['-f', 'xml', '-i', self.segmented_img, fp.name, 'ocr', '-m', self.old_model_path], + force_no_legacy=True, + expect_legacy=False, + ) + + def test_krakencli_ocr_new_model(self): + """ + Test kraken_cli with new model, check that it uses new polygon extraction method + """ + with tempfile.NamedTemporaryFile() as fp: + self._test_krakencli( + args=['-f', 'xml', '-i', self.segmented_img, fp.name, 'ocr', '-m', self.new_model_path], + force_no_legacy=False, + expect_legacy=False, + ) + + + def test_ketoscli_test_old_model(self): + """ + Test `ketos test` with old model, check that it uses legacy polygon extraction method + """ + self._test_ketoscli( + args=['test', '-m', self.old_model_path, '-f', 'xml', '--workers', '0', self.segmented_img], + expect_legacy=True, + ) + + def test_ketoscli_test_old_model_force_new(self): + """ + Test `ketos test` with old model, check that it does not use legacy polygon extraction method + """ + self._test_ketoscli( + args=['test', '--no-legacy-polygons', '-m', self.old_model_path, '-f', 'xml', '--workers', '0', self.segmented_img], + expect_legacy=False, + ) + + def test_ketoscli_test_new_model(self): + """ + Test `ketos test` with new model, check that it uses new polygon extraction method + """ + self._test_ketoscli( + args=['test', '-m', self.new_model_path, '-f', 'xml', '--workers', '0', self.segmented_img], + expect_legacy=False, + ) + + @unittest.skip('fails randomly') + def test_ketoscli_train_new_model(self): + """ + Test `ketos train` with new model, check that it uses new polygon extraction method + """ + with tempfile.TemporaryDirectory() as tempdir: + mfp = str(Path(tempdir) / "model") + fp = str(Path(tempdir) / "test.xml") + + self._test_ketoscli( + args=['train', '-f', 'xml', '-N', '1', '-q', 'fixed', '-o', mfp, '--workers', '0', self.segmented_img], + expect_legacy=False, + check_exit_code=[0, 1], # Model may not improve during training + ) + + self._test_krakencli( + args=['-f', 'xml', '-i', self.segmented_img, fp, 'ocr', '-m', mfp + "_0.mlmodel"], + expect_legacy=False, + ) + + @unittest.skip('fails randomly') + def test_ketoscli_train_new_model_force_legacy(self): + """ + Test `ketos train` training new model, check that it uses legacy polygon extraction method if forced + """ + with tempfile.TemporaryDirectory() as tempdir: + mfp = str(Path(tempdir) / "model") + fp = str(Path(tempdir) / "test.xml") + + self._test_ketoscli( + args=['train', '--legacy-polygons', '-f', 'xml', '-N', '1', '-q', 'fixed', '-o', mfp, '--workers', '0', self.segmented_img], + expect_legacy=True, + check_exit_code=[0, 1], # Model may not improve during training + ) + + self._test_krakencli( + args=['-f', 'xml', '-i', self.segmented_img, fp, 'ocr', '-m', mfp + "_0.mlmodel"], + expect_legacy=True, + ) + + @unittest.skip('fails randomly') + def test_ketoscli_train_old_model(self): + """ + Test `ketos train` finetuning old model, check that it uses new polygon extraction method + """ + with tempfile.TemporaryDirectory() as tempdir: + mfp = str(Path(tempdir) / "model") + fp = str(Path(tempdir) / "test.xml") + + self._test_ketoscli( + args=['train', '-f', 'xml', '-N', '1', '-q', 'fixed', '-i', self.old_model_path, '--resize', 'add', '-o', mfp, '--workers', '0', self.segmented_img], + expect_legacy=False, + check_exit_code=[0, 1], # Model may not improve during training + ) + self._test_krakencli( + args=['-f', 'xml', '-i', self.segmented_img, fp, 'ocr', '-m', mfp + "_0.mlmodel"], + expect_legacy=False, + ) + + @unittest.skip('fails randomly') + def test_ketoscli_train_old_model_force_legacy(self): + """ + Test `ketos train` finetuning old model, check that it uses legacy polygon extraction method if forced + """ + with tempfile.TemporaryDirectory() as tempdir: + mfp = str(Path(tempdir) / "model") + fp = str(Path(tempdir) / "test.xml") + + self._test_ketoscli( + args=['train', '--legacy-polygons', '-f', 'xml', '-N', '1', '-q', 'fixed', '-i', self.old_model_path, '--resize', 'add', '-o', mfp, '--workers', '0', self.segmented_img], + expect_legacy=True, + check_exit_code=[0, 1], # Model may not improve during training + ) + self._test_krakencli( + args=['-f', 'xml', '-i', self.segmented_img, fp, 'ocr', '-m', mfp + "_0.mlmodel"], + expect_legacy=True, + ) + + @unittest.expectedFailure + def test_ketoscli_pretrain_new_model(self): + """ + Test `ketos pretrain` with new model, check that it uses new polygon extraction method + """ + with tempfile.TemporaryDirectory() as tempdir: + mfp = str(Path(tempdir) / "model") + fp = str(Path(tempdir) / "test.xml") + + self._test_ketoscli( + args=['pretrain', '-f', 'xml', '-N', '1', '-q', 'fixed', '-o', mfp, '--workers', '0', self.segmented_img], + expect_legacy=False, + check_exit_code=[0, 1], # Model may not improve during training + ) + self._test_krakencli( + args=['-f', 'xml', '-i', self.segmented_img, fp, 'ocr', '-m', mfp + "_0.mlmodel"], + expect_legacy=False, + ) + + @unittest.expectedFailure + def test_ketoscli_pretrain_new_model_force_legacy(self): + """ + Test `ketos pretrain` with new model, check that it uses legacy polygon extraction method if forced + """ + with tempfile.TemporaryDirectory() as tempdir: + mfp = str(Path(tempdir) / "model") + fp = str(Path(tempdir) / "test.xml") + + self._test_ketoscli( + args=['pretrain', '--legacy-polygons', '-f', 'xml', '-N', '1', '-q', 'fixed', '-o', mfp, '--workers', '0', self.segmented_img], + expect_legacy=True, + check_exit_code=[0, 1], # Model may not improve during training + ) + + self._test_krakencli( + args=['-f', 'xml', '-i', self.segmented_img, fp, 'ocr', '-m', str(mfp) + "_0.mlmodel"], + expect_legacy=True, + ) + + @unittest.expectedFailure + def test_ketoscli_pretrain_old_model(self): + """ + Test `ketos pretrain` with old model, check that it uses new polygon extraction method + """ + with tempfile.TemporaryDirectory() as tempdir: + mfp = str(Path(tempdir) / "model") + fp = str(Path(tempdir) / "test.xml") + + self._test_ketoscli( + args=['pretrain', '-f', 'xml', '-N', '1', '-q', 'fixed', '-i', self.old_model_path, '--resize', 'add', '-o', mfp, '--workers', '0', self.segmented_img], + expect_legacy=False, + check_exit_code=[0, 1], # Model may not improve during training + ) + + self._test_krakencli( + args=['-f', 'xml', '-i', self.segmented_img, fp, 'ocr', '-m', mfp + "_0.mlmodel"], + expect_legacy=False, + ) + + + def _assertWarnsWhenTrainingArrow(self, + model: str, + *dset: str, + from_model: Optional[str] = None, + force_legacy: bool = False, + expect_warning_msgs: List[str] = [], + expect_not_warning_msgs: List[str] = []): + + args = ['-f', 'binary', '-N', '1', '-q', 'fixed', '-o', model, *dset] + if force_legacy: + args = ['--legacy-polygons'] + args + if from_model: + args = ['-i', from_model, '--resize', 'add'] + args + + print("ketos", 'train', *args) + run = self.runner.invoke(ketos_cli, ['train'] + args) + output = re.sub(r'\w+\.py:\d+\n', '', run.output) + output = re.sub(r'\s+', ' ', output) + for warning_msg in expect_warning_msgs: + self.assertIn(warning_msg, output, f"Expected warning '{warning_msg}' not found in output") + for warning_msg in expect_not_warning_msgs: + self.assertNotIn(warning_msg, output, f"Unexpected warning '{warning_msg}' found in output") + + def test_ketos_old_arrow_train_new(self): + """ + Test `ketos train`, on old arrow dataset, check that it raises a warning about polygon extraction method only if incoherent + """ + with tempfile.TemporaryDirectory() as tempdir: + mfp = str(Path(tempdir) / "model") + mfp2 = str(Path(tempdir) / "model2") + + self._assertWarnsWhenTrainingArrow(mfp, self.arrow_data, force_legacy=False, expect_warning_msgs=["WARNING Setting dataset legacy polygon status to True based on training set", "the new model will be flagged to use legacy"]) + self._assertWarnsWhenTrainingArrow(mfp2, self.arrow_data, force_legacy=True, expect_not_warning_msgs=["WARNING Setting dataset legacy polygon status to True based on training set", "the new model will be flagged to use legacy"]) + + def test_ketos_new_arrow(self): + """ + Test `ketos compile`, check that it uses new polygon extraction method + """ + with tempfile.TemporaryDirectory() as tempdir: + dset = str(Path(tempdir) / "dataset.arrow") + mfp = str(Path(tempdir) / "model") + mfp2 = str(Path(tempdir) / "model2") + + self._test_ketoscli( + args=['compile', '--workers', '0', '-f', 'xml', '-o', dset, self.segmented_img], + expect_legacy=False, + patching_dir="kraken.lib.arrow_dataset", + ) + + self._assertWarnsWhenTrainingArrow(mfp, dset, force_legacy=False, expect_not_warning_msgs=["WARNING Setting dataset legacy polygon status to False based on training set", "the new model will be flagged to use legacy"]) + self._assertWarnsWhenTrainingArrow(mfp2, dset, force_legacy=True, expect_warning_msgs=["WARNING Setting dataset legacy polygon status to False based on training set", "the new model will be flagged to use new"]) + + + def test_ketos_new_arrow_force_legacy(self): + """ + Test `ketos compile`, check that it uses old polygon extraction method + """ + with tempfile.TemporaryDirectory() as tempdir: + dset = str(Path(tempdir) / "dataset.arrow") + mfp = str(Path(tempdir) / "model") + mfp2 = str(Path(tempdir) / "model2") + + self._test_ketoscli( + args=['compile', '--workers', '0', '--legacy-polygons', '-f', 'xml', '-o', dset, self.segmented_img], + expect_legacy=True, + patching_dir="kraken.lib.arrow_dataset", + ) + + self._assertWarnsWhenTrainingArrow(mfp, dset, force_legacy=False, expect_warning_msgs=["WARNING Setting dataset legacy polygon status to True based on training set", "the new model will be flagged to use legacy"]) + self._assertWarnsWhenTrainingArrow(mfp2, dset, force_legacy=True, expect_not_warning_msgs=["WARNING Setting dataset legacy polygon status to True based on training set", "the new model will be flagged to use legacy"]) + + def test_ketos_old_arrow_old_model(self): + """ + Test `ketos train`, on old arrow dataset, check that it raises a warning about polygon extraction method only if incoherent + """ + with tempfile.TemporaryDirectory() as tempdir: + mfp = str(Path(tempdir) / "model") + mfp2 = str(Path(tempdir) / "model2") + + self._assertWarnsWhenTrainingArrow(mfp, self.arrow_data, from_model=self.old_model_path, force_legacy=False, expect_warning_msgs=["WARNING Setting dataset legacy polygon status to True based on training set"], expect_not_warning_msgs=["model will be flagged to use new"]) + self._assertWarnsWhenTrainingArrow(mfp2, self.arrow_data, from_model=self.old_model_path, force_legacy=True, expect_not_warning_msgs=["WARNING Setting dataset legacy polygon status to True based on training set", "model will be flagged to use new"]) + + def test_ketos_new_arrow_old_model(self): + """ + Test `ketos compile`, on new arrow dataset, check that it raises a warning about polygon extraction method only if incoherent + """ + with tempfile.TemporaryDirectory() as tempdir: + dset = str(Path(tempdir) / "dataset.arrow") + mfp = str(Path(tempdir) / "model") + mfp2 = str(Path(tempdir) / "model2") + + self._test_ketoscli( + args=['compile', '--workers', '0', '-f', 'xml', '-o', dset, self.segmented_img], + expect_legacy=False, + patching_dir="kraken.lib.arrow_dataset", + ) + + self._assertWarnsWhenTrainingArrow(mfp, dset, from_model=self.old_model_path, force_legacy=False, expect_not_warning_msgs=["WARNING Setting dataset legacy polygon status to False based on training set"], expect_warning_msgs=["model will be flagged to use new"]) + self._assertWarnsWhenTrainingArrow(mfp2, dset, from_model=self.old_model_path, force_legacy=True, expect_warning_msgs=["WARNING Setting dataset legacy polygon status to False based on training set"], expect_not_warning_msgs=["model will be flagged to use new"]) + + def test_ketos_mixed_arrow_train_new(self): + """ + Test `ketos compile`, on mixed arrow dataset, check that it raises a warning about polygon extraction method only if incoherent + """ + with tempfile.TemporaryDirectory() as tempdir: + dset = str(Path(tempdir) / "dataset.arrow") + mfp = str(Path(tempdir) / "model") + + self._test_ketoscli( + args=['compile', '--workers', '0', '-f', 'xml', '-o', dset, self.segmented_img, self.arrow_data], + expect_legacy=False, + patching_dir="kraken.lib.arrow_dataset", + ) + + self._assertWarnsWhenTrainingArrow(mfp, dset, self.arrow_data, force_legacy=True, expect_warning_msgs=["WARNING Mixed legacy polygon", "WARNING Setting dataset legacy polygon status to False based on training set"], expect_not_warning_msgs=["model will be flagged to use legacy"]) diff --git a/tests/test_repo.py b/tests/test_repo.py index 06a97fc28..3b54f099a 100644 --- a/tests/test_repo.py +++ b/tests/test_repo.py @@ -32,14 +32,31 @@ def test_get_description(self): """ Tests fetching the description of a model. """ - record = repo.get_description('10.5281/zenodo.6657809') - self.assertEqual(record['doi'], '10.5281/zenodo.6657809') + record = repo.get_description('10.5281/zenodo.8425684') + self.assertEqual(record['doi'], '10.5281/zenodo.8425684') def test_get_model(self): """ Tests fetching a model. """ + id = repo.get_model('10.5281/zenodo.8425684', + path=self.temp_model.name) + self.assertEqual(id, 'omnisyr_best.mlmodel') + self.assertEqual((self.temp_path / id).stat().st_size, 16245671) + + def test_prev_record_version_get_description(self): + """ + Tests fetching the description of a model that has a superseding newer version. + """ + record = repo.get_description('10.5281/zenodo.6657809') + self.assertEqual(record['doi'], '10.5281/zenodo.6657809') + + def test_prev_record_version_get_model(self): + """ + Tests fetching a model that has a superseding newer version. + """ id = repo.get_model('10.5281/zenodo.6657809', path=self.temp_model.name) self.assertEqual(id, 'HTR-United-Manu_McFrench.mlmodel') self.assertEqual((self.temp_path / id).stat().st_size, 16176844) + diff --git a/tests/test_train.py b/tests/test_train.py index 3d651d927..59b663435 100644 --- a/tests/test_train.py +++ b/tests/test_train.py @@ -200,7 +200,7 @@ def test_krakentrainer_rec_bl_dict(self): self.assertEqual(module.nn.seg_type, 'baselines') self.assertIsInstance(module.train_set.dataset, kraken.lib.dataset.PolygonGTDataset) trainer = KrakenTrainer(max_steps=1) - + def test_krakentrainer_rec_bl_augment(self): """ Test that augmentation is added if specified. @@ -212,14 +212,14 @@ def test_krakentrainer_rec_bl_augment(self): evaluation_data=evaluation_data) module.setup() self.assertEqual(module.train_set.dataset.aug, None) - + module = RecognitionModel({'augment': True}, format_type='xml', training_data=training_data, evaluation_data=evaluation_data) module.setup() self.assertIsInstance(module.train_set.dataset.aug, kraken.lib.dataset.recognition.DefaultAugmenter) - + def test_krakentrainer_rec_box_augment(self): """ Test that augmentation is added if specified. @@ -231,7 +231,7 @@ def test_krakentrainer_rec_box_augment(self): evaluation_data=evaluation_data) module.setup() self.assertEqual(module.train_set.dataset.aug, None) - + module = RecognitionModel({'augment': True}, format_type='path', training_data=training_data,