From be832f2f05d4acf7a1848b18db323fbec2c42b6c Mon Sep 17 00:00:00 2001 From: Robert Sachunsky Date: Fri, 7 Mar 2025 11:26:57 +0100 Subject: [PATCH 1/2] Docker: shortcut ocrd-all-tool.json via ocrd-tool.json --- Dockerfile | 25 +++++++++++++++---------- Makefile | 4 ++-- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index 46f122a..cc99b51 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,17 +6,22 @@ LABEL \ maintainer="https://ocr-d.de/kontakt" \ org.label-schema.vcs-ref=$VCS_REF \ org.label-schema.vcs-url="https://github.com/bertsky/ocrd_wrap" \ - org.label-schema.build-date=$BUILD_DATE + org.label-schema.build-date=$BUILD_DATE \ + org.opencontainers.image.vendor="DFG-Funded Initiative for Optical Character Recognition Development" \ + org.opencontainers.image.title="ocrd_wrap" \ + org.opencontainers.image.description="arbitrary coords-preserving image operations" \ + org.opencontainers.image.source="https://github.com/bertsky/ocrd_wrap" \ + org.opencontainers.image.documentation="https://github.com/bertsky/ocrd_wrap/blob/${VCS_REF}/README.md" \ + org.opencontainers.image.revision=$VCS_REF \ + org.opencontainers.image.created=$BUILD_DATE \ + org.opencontainers.image.base.name=ocrd/core WORKDIR /build/ocrd_wrap -COPY setup.py . -COPY ocrd_wrap/ocrd-tool.json . -COPY ocrd_wrap ./ocrd_wrap -COPY requirements.txt . -COPY README.md . -COPY Makefile . -RUN make install -RUN rm -rf /build/ocrd_wrap +COPY . . +# prepackage ocrd-tool.json as ocrd-all-tool.json +RUN ocrd ocrd-tool ocrd_wrap/ocrd-tool.json dump-tools > $(dirname $(ocrd bashlib filename))/ocrd-all-tool.json +# install everything and reduce image size +RUN make install && rm -rf /build/ocrd_wrap WORKDIR /data -VOLUME ["/data"] +VOLUME /data diff --git a/Makefile b/Makefile index 475c5da..71c913b 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ PYTHON = python3 PIP = pip3 PYTHONIOENCODING=utf8 -DOCKER_BASE_IMAGE = docker.io/ocrd/core:v3.0.3 +DOCKER_BASE_IMAGE = docker.io/ocrd/core:v3.1.0 DOCKER_TAG = ocrd/wrap help: @@ -67,4 +67,4 @@ docker: --build-arg BUILD_DATE=$$(date -u +"%Y-%m-%dT%H:%M:%SZ") \ -t $(DOCKER_TAG) . -.PHONY: help deps deps-test install install-dev test docker +.PHONY: help deps deps-test install install-dev build test docker From 9f4141542d8012e69327ec02f9c4d6fb09a768b8 Mon Sep 17 00:00:00 2001 From: Robert Sachunsky Date: Fri, 7 Mar 2025 11:35:15 +0100 Subject: [PATCH 2/2] =?UTF-8?q?setup=E2=86=92pyproject?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++ setup.py | 46 ------------------------ 2 files changed, 96 insertions(+), 46 deletions(-) create mode 100644 pyproject.toml delete mode 100644 setup.py diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..ac9a512 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,96 @@ +[build-system] +requires = ["setuptools>=61.0.0", "wheel", "setuptools-ocrd"] + +[project] +name = "ocrd_wrap" +authors = [ + {name = "Robert Sachunsky", email = "sachunsky@informatik.uni-leipzig.de"}, +] +description = "OCR-D wrapper for arbitrary coords-preserving image operations" +readme = "README.md" +license = {text = "MIT"} +requires-python = ">=3.8" +keywords = ["ocr", "ocr-d", "scikit-image"] + +dynamic = ["version", "dependencies", "optional-dependencies"] + +# https://pypi.org/classifiers/ +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Intended Audience :: Science/Research", + "Intended Audience :: Other Audience", + "License :: OSI Approved :: MIT Software License", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Topic :: Text Processing", +] + +[project.scripts] +ocrd-preprocess-image = "ocrd_wrap.cli:ocrd_preprocess_image" +ocrd-skimage-normalize = "ocrd_wrap.cli:ocrd_skimage_normalize" +ocrd-skimage-denoise-raw = "ocrd_wrap.cli:ocrd_skimage_denoise_raw" +ocrd-skimage-denoise = "ocrd_wrap.cli:ocrd_skimage_denoise" +ocrd-skimage-binarize = "ocrd_wrap.cli:ocrd_skimage_binarize" + +[project.urls] +Homepage = "https://github.com/bertsky/ocrd_wrap" +Repository = "https://github.com/bertsky/ocrd_wrap.git" + + +[tool.setuptools.dynamic] +dependencies = {file = ["requirements.txt"]} +optional-dependencies.test = {file = ["requirements_test.txt"]} + +[tool.setuptools] +packages = ["ocrd_wrap"] +package-data = {"*" = ["*.json"]} + +[tool.pytest.ini_options] +minversion = 6.0 +addopts = "--strict-markers" +markers = [ + "integration: integration tests", +] + + +[tool.mypy] +plugins = ["numpy.typing.mypy_plugin"] + +ignore_missing_imports = true + + +strict = true + +disallow_subclassing_any = false +# ❗ error: Class cannot subclass "Processor" (has type "Any") +disallow_any_generics = false +disallow_untyped_defs = false +disallow_untyped_calls = false + + +[tool.ruff.lint] +select = ["E", "F", "I"] + + +[tool.coverage.run] +branch = true +source = [ + "ocrd_wrap" +] +concurrency = [ + "thread", + "multiprocessing" +] + +[tool.coverage.report] +exclude_also = [ + "if self\\.debug", + "pragma: no cover", + "raise NotImplementedError", + "if __name__ == .__main__.:", +] +ignore_errors = true +omit = [ + "ocrd_wrap/cli.py" +] diff --git a/setup.py b/setup.py deleted file mode 100644 index dbfbc12..0000000 --- a/setup.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -Installs: - - ocrd-preprocess-image - - ocrd-skimage-normalize - - ocrd-skimage-denoise-raw - - ocrd-skimage-binarize - - ocrd-skimage-denoise -""" - -import codecs -import json -from setuptools import setup -from setuptools import find_packages - -with codecs.open('README.md', encoding='utf-8') as f: - README = f.read() - -with open('./ocrd-tool.json', 'r') as f: - version = json.load(f)['version'] - -setup( - name='ocrd_wrap', - version=version, - description='OCR-D wrapper for arbitrary coords-preserving image operations', - long_description=README, - long_description_content_type='text/markdown', - author='Robert Sachunsky', - author_email='sachunsky@informatik.uni-leipzig.de', - url='https://github.com/bertsky/ocrd_wrap', - license='MIT', - packages=find_packages(), - include_package_data=True, - install_requires=open('requirements.txt').read().split('\n'), - package_data={ - '': ['*.json', '*.yml', '*.yaml', '*.csv.gz', '*.jar', '*.zip'], - }, - entry_points={ - 'console_scripts': [ - 'ocrd-preprocess-image=ocrd_wrap.cli:ocrd_preprocess_image', - 'ocrd-skimage-binarize=ocrd_wrap.cli:ocrd_skimage_binarize', - 'ocrd-skimage-denoise=ocrd_wrap.cli:ocrd_skimage_denoise', - 'ocrd-skimage-denoise-raw=ocrd_wrap.cli:ocrd_skimage_denoise_raw', - 'ocrd-skimage-normalize=ocrd_wrap.cli:ocrd_skimage_normalize', - ] - }, -)