Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0a1216bf14 | ||
|
|
f10a0f7707 | ||
|
|
dc11802809 | ||
|
|
4cce0077d0 | ||
|
|
d293e05946 | ||
|
|
4030258bbc | ||
|
|
db388165a9 | ||
|
|
3d6907f7f6 | ||
|
|
701c3b371b | ||
|
|
684e5b4944 | ||
|
|
a964080f77 | ||
|
|
3f72f16958 | ||
|
|
b4f2582766 | ||
|
|
c77cc7c837 | ||
|
|
f3715daf15 | ||
|
|
c87221a4e6 |
+1
-6
@@ -37,12 +37,7 @@ COPY . /app
|
|||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
RUN pip3 install --no-cache-dir \
|
RUN pip3 install --no-cache-dir .[test,webservice,watcher]
|
||||||
-r requirements/main.txt \
|
|
||||||
-r requirements/webservice.txt \
|
|
||||||
-r requirements/test.txt \
|
|
||||||
-r requirements/watcher.txt \
|
|
||||||
.
|
|
||||||
|
|
||||||
FROM base
|
FROM base
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,14 @@ A clear and concise description of what the problem is. Ex. I'm always frustrate
|
|||||||
A clear and concise description of what you want to happen.
|
A clear and concise description of what you want to happen.
|
||||||
|
|
||||||
**Describe alternatives you've considered**
|
**Describe alternatives you've considered**
|
||||||
A clear and concise description of any alternative solutions or features you've considered.
|
A clear and concise description of any alternative solutions or features you've considered. Please include the versions of OCRmyPDF and other supporting programs (Tesseract OCR, Ghostscript) - maybe an alternative already exists in a newer version.
|
||||||
|
|
||||||
|
**Example file**
|
||||||
|
If your issue concerns how OCRmyPDF processes certain files, and please provide an example file that helps illustrate how OCRmyPDF's output could be improve.
|
||||||
|
|
||||||
|
Please provide an input file with no personal or confidential information. At your option you may [GPG-encrypt the file](https://github.com/jbarlow83/OCRmyPDF/wiki) for OCRmyPDF's author only.
|
||||||
|
|
||||||
|
Links to files hosted elsewhere are perfectly acceptable. You could also look in ``tests/resources`` and see if any of those files reproduce your issue.
|
||||||
|
|
||||||
**Additional context**
|
**Additional context**
|
||||||
Add any other context or screenshots about the feature request here.
|
Add any other context or screenshots about the feature request here.
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Install Python packages
|
- name: Install Python packages
|
||||||
run: |
|
run: |
|
||||||
python -m pip install -r requirements/main.txt -r requirements/test.txt .
|
python -m pip install .[test]
|
||||||
|
|
||||||
- name: Report versions
|
- name: Report versions
|
||||||
run: |
|
run: |
|
||||||
@@ -124,7 +124,7 @@ jobs:
|
|||||||
- name: Install Python packages
|
- name: Install Python packages
|
||||||
run: |
|
run: |
|
||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
python -m pip install -r requirements/main.txt -r requirements/test.txt .
|
python -m pip install .[test]
|
||||||
|
|
||||||
- name: Report versions
|
- name: Report versions
|
||||||
run: |
|
run: |
|
||||||
@@ -174,7 +174,7 @@ jobs:
|
|||||||
- name: Install Python packages
|
- name: Install Python packages
|
||||||
run: |
|
run: |
|
||||||
python -m pip install --upgrade pip
|
python -m pip install --upgrade pip
|
||||||
python -m pip install -r requirements/main.txt -r requirements/test.txt .
|
python -m pip install .[test]
|
||||||
|
|
||||||
- name: Test
|
- name: Test
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
+2
-1
@@ -6,8 +6,9 @@
|
|||||||
!.gitattributes
|
!.gitattributes
|
||||||
!.gitignore
|
!.gitignore
|
||||||
!.pre-commit-config.yaml
|
!.pre-commit-config.yaml
|
||||||
!.readthedocs.yml
|
!.readthedocs.yaml
|
||||||
!.github/
|
!.github/
|
||||||
|
!.docker/
|
||||||
|
|
||||||
# Dev scratch
|
# Dev scratch
|
||||||
*.ipynb
|
*.ipynb
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
# Read the Docs configuration file
|
||||||
|
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
||||||
|
|
||||||
|
# Required
|
||||||
|
version: 2
|
||||||
|
|
||||||
|
# Build documentation in the docs/ directory with Sphinx
|
||||||
|
sphinx:
|
||||||
|
configuration: docs/conf.py
|
||||||
|
|
||||||
|
# Optionally build your docs in additional formats such as PDF
|
||||||
|
formats:
|
||||||
|
- pdf
|
||||||
|
|
||||||
|
# Optionally set the version of Python and requirements required to build your docs
|
||||||
|
python:
|
||||||
|
version: 3.7
|
||||||
|
install:
|
||||||
|
- method: pip
|
||||||
|
path: .
|
||||||
|
extra_requirements:
|
||||||
|
- docs
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
build:
|
|
||||||
image: latest
|
|
||||||
|
|
||||||
python:
|
|
||||||
version: 3.6
|
|
||||||
|
|
||||||
formats:
|
|
||||||
- pdf
|
|
||||||
|
|
||||||
requirements_file: requirements/main.txt
|
|
||||||
@@ -57,7 +57,7 @@ I searched the web for a free command line tool to OCR PDF files: I found many,
|
|||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
Linux, Windows, macOS and FreeBSD are supported. Docker images are also available.
|
Linux, Windows, macOS and FreeBSD are supported. Docker images are also available, for both x64 and ARM.
|
||||||
|
|
||||||
| Operating system | Install command |
|
| Operating system | Install command |
|
||||||
| ----------------------------- | ------------------------------|
|
| ----------------------------- | ------------------------------|
|
||||||
@@ -115,6 +115,7 @@ In addition to the required Python version (3.6+), OCRmyPDF requires external pr
|
|||||||
- [heise Open Source, 09/2014: Texterkennung mit OCRmyPDF](https://heise.de/-2356670)
|
- [heise Open Source, 09/2014: Texterkennung mit OCRmyPDF](https://heise.de/-2356670)
|
||||||
- [heise Durchsuchbare PDF-Dokumente mit OCRmyPDF erstellen](https://www.heise.de/ratgeber/Durchsuchbare-PDF-Dokumente-mit-OCRmyPDF-erstellen-4607592.html)
|
- [heise Durchsuchbare PDF-Dokumente mit OCRmyPDF erstellen](https://www.heise.de/ratgeber/Durchsuchbare-PDF-Dokumente-mit-OCRmyPDF-erstellen-4607592.html)
|
||||||
- [Excellent Utilities: OCRmyPDF](https://www.linuxlinks.com/excellent-utilities-ocrmypdf-add-ocr-text-layer-scanned-pdfs/)
|
- [Excellent Utilities: OCRmyPDF](https://www.linuxlinks.com/excellent-utilities-ocrmypdf-add-ocr-text-layer-scanned-pdfs/)
|
||||||
|
- [LinuxUser Texterkennung mit OCRmyPDF und Scanbd automatisieren](https://www.linux-community.de/ausgaben/linuxuser/2021/06/texterkennung-mit-ocrmypdf-und-scanbd-automatisieren/)
|
||||||
|
|
||||||
## Business enquiries
|
## Business enquiries
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -228,8 +228,8 @@ preprocessing is specified, then the image layer is a new PDF.
|
|||||||
Unlike ``sandwich`` this renderer is implemented within OCRmyPDF; anyone
|
Unlike ``sandwich`` this renderer is implemented within OCRmyPDF; anyone
|
||||||
looking to customize how OCR is presented should look here. A major
|
looking to customize how OCR is presented should look here. A major
|
||||||
disadvantage of this renderer is it not capable of correctly handling
|
disadvantage of this renderer is it not capable of correctly handling
|
||||||
text outside the Latin alphabet. Pull requests to improve the situation
|
text outside the Latin alphabet (specifically, it supports the ISO 8859-1
|
||||||
are welcome.
|
character). Pull requests to improve the situation are welcome.
|
||||||
|
|
||||||
Currently, this renderer has the best compatibility with Mozilla's
|
Currently, this renderer has the best compatibility with Mozilla's
|
||||||
PDF.js viewer.
|
PDF.js viewer.
|
||||||
|
|||||||
+1
-1
@@ -111,7 +111,7 @@ Users may need to customize the script to meet their requirements.
|
|||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
pip3 install -r requirements/watcher.txt
|
pip3 install ocrmypdf[watcher]
|
||||||
|
|
||||||
env OCR_INPUT_DIRECTORY=/mnt/input-pdfs \
|
env OCR_INPUT_DIRECTORY=/mnt/input-pdfs \
|
||||||
OCR_OUTPUT_DIRECTORY=/mnt/output-pdfs \
|
OCR_OUTPUT_DIRECTORY=/mnt/output-pdfs \
|
||||||
|
|||||||
@@ -812,8 +812,7 @@ To install all of the development and test requirements:
|
|||||||
python3 -m venv
|
python3 -m venv
|
||||||
source venv/bin/activate
|
source venv/bin/activate
|
||||||
cd OCRmyPDF
|
cd OCRmyPDF
|
||||||
pip install -e .
|
pip install -e .[test]
|
||||||
pip install -r requirements/dev.txt -r requirements/test.txt
|
|
||||||
|
|
||||||
To add JBIG2 encoding, see :ref:`jbig2`.
|
To add JBIG2 encoding, see :ref:`jbig2`.
|
||||||
|
|
||||||
|
|||||||
@@ -139,7 +139,7 @@ Limitations
|
|||||||
OCRmyPDF is limited by the Tesseract OCR engine. As such it experiences
|
OCRmyPDF is limited by the Tesseract OCR engine. As such it experiences
|
||||||
these limitations, as do any other programs that rely on Tesseract:
|
these limitations, as do any other programs that rely on Tesseract:
|
||||||
|
|
||||||
- The OCR is not as accurate as commercial solutions such as Abbyy.
|
- The OCR is not as accurate as commercial OCR solutions.
|
||||||
- It is not capable of recognizing handwriting.
|
- It is not capable of recognizing handwriting.
|
||||||
- It may find gibberish and report this as OCR output.
|
- It may find gibberish and report this as OCR output.
|
||||||
- If a document contains languages outside of those given in the
|
- If a document contains languages outside of those given in the
|
||||||
|
|||||||
@@ -128,8 +128,9 @@ Commercial alternatives
|
|||||||
The author also provides professional services that include OCR and
|
The author also provides professional services that include OCR and
|
||||||
building databases around PDFs, and is happy to provide consultation.
|
building databases around PDFs, and is happy to provide consultation.
|
||||||
|
|
||||||
Abbyy Cloud OCR is a viable commercial alternative with a web services
|
Abbyy Cloud OCR is viable commercial alternative with a web services
|
||||||
API.
|
API. Amazon Textract, Google Cloud Vision, and Microsoft Azure
|
||||||
|
Computer Vision provide advanced OCR but have less PDF rendering capability.
|
||||||
|
|
||||||
Password protection, digital signatures and certification
|
Password protection, digital signatures and certification
|
||||||
=========================================================
|
=========================================================
|
||||||
|
|||||||
+20
-1
@@ -12,6 +12,25 @@ may be unreliable. Use the API to depend on precise behavior.
|
|||||||
The public API may be useful in scripts that launch OCRmyPDF processes or that
|
The public API may be useful in scripts that launch OCRmyPDF processes or that
|
||||||
wish to use some of its features for working with PDFs.
|
wish to use some of its features for working with PDFs.
|
||||||
|
|
||||||
|
v12.1.0
|
||||||
|
=======
|
||||||
|
|
||||||
|
- For security reasons we now require Pillow >= 8.2.x. (Older versions will continue
|
||||||
|
to work if upgrading is not an option.)
|
||||||
|
- The build system was reorganized to rely on ``setup.cfg`` instead of ``setup.py``.
|
||||||
|
All changes should work with previously supported versions of setuptools.
|
||||||
|
- The files in ``requirements/*`` are now considered deprecated but will be retained for v12.
|
||||||
|
Instead use ``pip install ocrmypdf[test]`` instead of ``requirements/test.txt``, etc.
|
||||||
|
These files will be removed in v13.
|
||||||
|
|
||||||
|
v12.0.3
|
||||||
|
=======
|
||||||
|
|
||||||
|
- Expand the list of languages supported by the hocr PDF renderer.
|
||||||
|
Several languages were previously considered not supported, particularly those
|
||||||
|
non-European languages that use the Latin alphabet.
|
||||||
|
- Fixed a case where the exception stack trace was suppressed in verbose mode.
|
||||||
|
- Improved documentation around commercial OCR.
|
||||||
|
|
||||||
v12.0.2
|
v12.0.2
|
||||||
=======
|
=======
|
||||||
@@ -19,7 +38,7 @@ v12.0.2
|
|||||||
- Fix exception thrown when using ``--remove-background`` on files containing small
|
- Fix exception thrown when using ``--remove-background`` on files containing small
|
||||||
images (#769).
|
images (#769).
|
||||||
- Improve documentation for description of adding language packs to the Docker image
|
- Improve documentation for description of adding language packs to the Docker image
|
||||||
and corrected name of French language pack.
|
and corrected name of French language pack.
|
||||||
|
|
||||||
v12.0.1
|
v12.0.1
|
||||||
=======
|
=======
|
||||||
|
|||||||
+4
-1
@@ -3,11 +3,14 @@ requires = [
|
|||||||
"setuptools >= 30.3.0",
|
"setuptools >= 30.3.0",
|
||||||
"wheel",
|
"wheel",
|
||||||
"cffi",
|
"cffi",
|
||||||
"setuptools_scm",
|
"setuptools_scm[toml] >= 3.4",
|
||||||
"setuptools_scm_git_archive"
|
"setuptools_scm_git_archive"
|
||||||
]
|
]
|
||||||
build-backend = "setuptools.build_meta"
|
build-backend = "setuptools.build_meta"
|
||||||
|
|
||||||
|
[tool.setuptools_scm]
|
||||||
|
version_scheme = "post-release"
|
||||||
|
|
||||||
[tool.black]
|
[tool.black]
|
||||||
line-length = 88
|
line-length = 88
|
||||||
target-version = ["py36", "py37", "py38"]
|
target-version = ["py36", "py37", "py38"]
|
||||||
|
|||||||
@@ -1,12 +1,10 @@
|
|||||||
# requirements.txt can be used to replicate the developer's build environment
|
# Deprecated and not maintained; use "pip install ocrmypdf" instead
|
||||||
# setup.py lists a separate set of requirements that are looser to simplify
|
|
||||||
# installation
|
|
||||||
cffi == 1.14.5
|
cffi == 1.14.5
|
||||||
coloredlogs == 15.0 # technically optional
|
coloredlogs == 15.0 # technically optional
|
||||||
img2pdf == 0.4.0
|
img2pdf == 0.4.0
|
||||||
pdfminer.six == 20201018
|
pdfminer.six == 20201018
|
||||||
pikepdf == 2.10.0
|
pikepdf == 2.10.0
|
||||||
pluggy == 0.13.1
|
pluggy == 0.13.1
|
||||||
Pillow == 8.1.2
|
Pillow == 8.2.0
|
||||||
reportlab == 3.5.66
|
reportlab == 3.5.66
|
||||||
tqdm == 4.59.0
|
tqdm == 4.59.0
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# Deprecated and not maintained; use "pip install ocrmypdf[test]" instead
|
||||||
pytest >= 6.0.0
|
pytest >= 6.0.0
|
||||||
pytest-xdist >= 2.2.0
|
pytest-xdist >= 2.2.0
|
||||||
pytest-cov >= 2.11.1
|
pytest-cov >= 2.11.1
|
||||||
|
|||||||
@@ -1 +1,2 @@
|
|||||||
|
# Deprecated and not maintained; use "pip install ocrmypdf[watcher]" instead
|
||||||
watchdog == 1.0.2
|
watchdog == 1.0.2
|
||||||
|
|||||||
@@ -1 +1,2 @@
|
|||||||
|
# Deprecated and not maintained; use "pip install ocrmypdf[webservice]" instead
|
||||||
Flask >= 1, < 2
|
Flask >= 1, < 2
|
||||||
|
|||||||
@@ -1,8 +1,101 @@
|
|||||||
|
[metadata]
|
||||||
|
name = ocrmypdf
|
||||||
|
description = OCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched
|
||||||
|
long_description = file: README.md
|
||||||
|
long_description_content_type = text/markdown; charset=UTF-8
|
||||||
|
url = https://github.com/jbarlow83/OCRmyPDF
|
||||||
|
author = James R. Barlow
|
||||||
|
author_email = james@purplerock.ca
|
||||||
|
license_files =
|
||||||
|
LICENSE
|
||||||
|
keywords =
|
||||||
|
PDF
|
||||||
|
OCR
|
||||||
|
optical character recognition
|
||||||
|
PDF/A
|
||||||
|
scanning
|
||||||
|
classifiers =
|
||||||
|
Programming Language :: Python :: 3.6
|
||||||
|
Programming Language :: Python :: 3.7
|
||||||
|
Programming Language :: Python :: 3.8
|
||||||
|
Programming Language :: Python :: 3.9
|
||||||
|
Development Status :: 5 - Production/Stable
|
||||||
|
Environment :: Console
|
||||||
|
Intended Audience :: End Users/Desktop
|
||||||
|
Intended Audience :: Science/Research
|
||||||
|
Intended Audience :: System Administrators
|
||||||
|
License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)
|
||||||
|
Operating System :: MacOS :: MacOS X
|
||||||
|
Operating System :: Microsoft :: Windows :: Windows 10
|
||||||
|
Operating System :: POSIX
|
||||||
|
Operating System :: POSIX :: BSD
|
||||||
|
Operating System :: POSIX :: Linux
|
||||||
|
Topic :: Scientific/Engineering :: Image Recognition
|
||||||
|
Topic :: Text Processing :: Indexing
|
||||||
|
Topic :: Text Processing :: Linguistic
|
||||||
|
project_urls =
|
||||||
|
Documentation = https://ocrmypdf.readthedocs.io/
|
||||||
|
Source = https://github.com/jbarlow83/ocrmypdf
|
||||||
|
Tracker = https://github.com/jbarlow83/ocrmypdf/issues
|
||||||
|
|
||||||
|
[options]
|
||||||
|
zip_safe = False
|
||||||
|
packages = find:
|
||||||
|
package_dir =
|
||||||
|
=src
|
||||||
|
platforms = any
|
||||||
|
include_package_data=True
|
||||||
|
install_requires =
|
||||||
|
cffi >= 1.9.1 # must be a setup and install requirement
|
||||||
|
coloredlogs >= 14.0 # strictly optional
|
||||||
|
img2pdf >= 0.3.0, < 0.5 # pure Python, so track HEAD closely
|
||||||
|
pdfminer.six >= 20191110, != 20200720, <= 20201018
|
||||||
|
pikepdf >= 2.10.0
|
||||||
|
Pillow >= 8.2.0
|
||||||
|
pluggy >= 0.13.0, < 1.0
|
||||||
|
reportlab >= 3.5.66
|
||||||
|
setuptools
|
||||||
|
tqdm >= 4
|
||||||
|
python_requires = >= 3.6
|
||||||
|
setup_requires = # can be removed whenever we can drop pip 9 support
|
||||||
|
cffi >= 1.9.1 # to build the leptonica module
|
||||||
|
setuptools_scm # so that version will work
|
||||||
|
setuptools_scm_git_archive # enable version from github tarballs
|
||||||
|
|
||||||
|
[options.package_data]
|
||||||
|
ocrmypdf =
|
||||||
|
data/sRGB.icc
|
||||||
|
py.typed
|
||||||
|
|
||||||
|
[options.packages.find]
|
||||||
|
where = src
|
||||||
|
|
||||||
|
[options.extras_require]
|
||||||
|
test =
|
||||||
|
pytest >= 6.0.0
|
||||||
|
pytest-xdist >= 2.2.0
|
||||||
|
pytest-cov >= 2.11.1
|
||||||
|
python-xmp-toolkit == 2.0.1 # also requires apt-get install libexempi3
|
||||||
|
# or brew install exempi
|
||||||
|
docs =
|
||||||
|
sphinx
|
||||||
|
sphinx_rtd_theme
|
||||||
|
extended_test =
|
||||||
|
PyMuPDF == 1.13.4
|
||||||
|
watcher =
|
||||||
|
watchdog >= 1.0.2, < 2
|
||||||
|
webservice =
|
||||||
|
Flask >= 1, < 2
|
||||||
|
|
||||||
|
[options.entry_points]
|
||||||
|
console_scripts =
|
||||||
|
ocrmypdf = ocrmypdf.__main__:run
|
||||||
|
|
||||||
[bdist_wheel]
|
[bdist_wheel]
|
||||||
python-tag = py36
|
python-tag = py36
|
||||||
|
|
||||||
[aliases]
|
[aliases]
|
||||||
test=pytest
|
test = pytest
|
||||||
|
|
||||||
[check-manifest]
|
[check-manifest]
|
||||||
ignore =
|
ignore =
|
||||||
@@ -19,17 +112,14 @@ addopts =
|
|||||||
-n auto
|
-n auto
|
||||||
|
|
||||||
[isort]
|
[isort]
|
||||||
multi_line_output=3
|
multi_line_output = 3
|
||||||
include_trailing_comma=True
|
include_trailing_comma = True
|
||||||
force_grid_wrap=0
|
force_grid_wrap = 0
|
||||||
use_parentheses=True
|
use_parentheses = True
|
||||||
line_length=88
|
line_length = 88
|
||||||
known_first_party = ocrmypdf
|
known_first_party = ocrmypdf
|
||||||
known_third_party = PIL,_cffi_backend,cffi,flask,img2pdf,pdfminer,pikepdf,pkg_resources,pluggy,pytest,reportlab,setuptools,sphinx_rtd_theme,tqdm,watchdog,werkzeug
|
known_third_party = PIL,_cffi_backend,cffi,flask,img2pdf,pdfminer,pikepdf,pkg_resources,pluggy,pytest,reportlab,setuptools,sphinx_rtd_theme,tqdm,watchdog,werkzeug
|
||||||
|
|
||||||
[metadata]
|
|
||||||
license_file = LICENSE
|
|
||||||
|
|
||||||
[coverage:paths]
|
[coverage:paths]
|
||||||
source =
|
source =
|
||||||
src/ocrmypdf
|
src/ocrmypdf
|
||||||
|
|||||||
@@ -1,62 +1,16 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# © 2015 James R. Barlow: github.com/jbarlow83
|
# © 2021 James R. Barlow: github.com/jbarlow83
|
||||||
#
|
#
|
||||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
|
||||||
from __future__ import print_function, unicode_literals
|
from setuptools import setup
|
||||||
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from setuptools import find_packages, setup
|
|
||||||
|
|
||||||
if sys.version_info < (3, 6):
|
|
||||||
print("Python 3.6 or newer is required", file=sys.stderr)
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
tests_require = open('requirements/test.txt', encoding='utf-8').read().splitlines()
|
|
||||||
|
|
||||||
|
|
||||||
def readme():
|
|
||||||
with open('README.md', encoding='utf-8') as f:
|
|
||||||
return f.read()
|
|
||||||
|
|
||||||
|
|
||||||
|
# Minimal setup to support older setuptools/setuptools_scm
|
||||||
setup(
|
setup(
|
||||||
name='ocrmypdf',
|
|
||||||
description='OCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched',
|
|
||||||
long_description=readme(),
|
|
||||||
long_description_content_type='text/markdown',
|
|
||||||
url='https://github.com/jbarlow83/OCRmyPDF',
|
|
||||||
author='James R. Barlow',
|
|
||||||
author_email='james@purplerock.ca',
|
|
||||||
packages=find_packages('src', exclude=["tests", "tests.*"]),
|
|
||||||
package_dir={'': 'src'},
|
|
||||||
keywords=['PDF', 'OCR', 'optical character recognition', 'PDF/A', 'scanning'],
|
|
||||||
classifiers=[
|
|
||||||
"Programming Language :: Python :: 3.6",
|
|
||||||
"Programming Language :: Python :: 3.7",
|
|
||||||
"Programming Language :: Python :: 3.8",
|
|
||||||
"Programming Language :: Python :: 3.9",
|
|
||||||
"Development Status :: 5 - Production/Stable",
|
|
||||||
"Environment :: Console",
|
|
||||||
"Intended Audience :: End Users/Desktop",
|
|
||||||
"Intended Audience :: Science/Research",
|
|
||||||
"Intended Audience :: System Administrators",
|
|
||||||
"License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)",
|
|
||||||
"Operating System :: MacOS :: MacOS X",
|
|
||||||
"Operating System :: Microsoft :: Windows :: Windows 10",
|
|
||||||
"Operating System :: POSIX",
|
|
||||||
"Operating System :: POSIX :: BSD",
|
|
||||||
"Operating System :: POSIX :: Linux",
|
|
||||||
"Topic :: Scientific/Engineering :: Image Recognition",
|
|
||||||
"Topic :: Text Processing :: Indexing",
|
|
||||||
"Topic :: Text Processing :: Linguistic",
|
|
||||||
],
|
|
||||||
python_requires=' >= 3.6',
|
|
||||||
setup_requires=[ # can be removed whenever we can drop pip 9 support
|
setup_requires=[ # can be removed whenever we can drop pip 9 support
|
||||||
'cffi >= 1.9.1', # to build the leptonica module
|
'cffi >= 1.9.1', # to build the leptonica module
|
||||||
'setuptools_scm', # so that version will work
|
'setuptools_scm', # so that version will work
|
||||||
@@ -64,26 +18,4 @@ setup(
|
|||||||
],
|
],
|
||||||
use_scm_version={'version_scheme': 'post-release'},
|
use_scm_version={'version_scheme': 'post-release'},
|
||||||
cffi_modules=['src/ocrmypdf/lib/compile_leptonica.py:ffibuilder'],
|
cffi_modules=['src/ocrmypdf/lib/compile_leptonica.py:ffibuilder'],
|
||||||
install_requires=[
|
|
||||||
'cffi >= 1.9.1', # must be a setup and install requirement
|
|
||||||
'coloredlogs >= 14.0', # strictly optional
|
|
||||||
'img2pdf >= 0.3.0, < 0.5', # pure Python, so track HEAD closely
|
|
||||||
'pdfminer.six >= 20191110, != 20200720, <= 20201018',
|
|
||||||
"pikepdf >= 2.10.0",
|
|
||||||
'Pillow >= 8.1.2',
|
|
||||||
'pluggy >= 0.13.0, < 1.0',
|
|
||||||
'reportlab >= 3.5.66',
|
|
||||||
'setuptools',
|
|
||||||
'tqdm >= 4',
|
|
||||||
],
|
|
||||||
tests_require=tests_require,
|
|
||||||
entry_points={'console_scripts': ['ocrmypdf = ocrmypdf.__main__:run']},
|
|
||||||
package_data={'ocrmypdf': ['data/sRGB.icc', 'py.typed']},
|
|
||||||
include_package_data=True,
|
|
||||||
zip_safe=False,
|
|
||||||
project_urls={
|
|
||||||
'Documentation': 'https://ocrmypdf.readthedocs.io/',
|
|
||||||
'Source': 'https://github.com/jbarlow83/ocrmypdf',
|
|
||||||
'Tracker': 'https://github.com/jbarlow83/ocrmypdf/issues',
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
- Search for deprecation: search all files for deprec*, etc.
|
- Search for deprecation: search all files for deprec*, etc.
|
||||||
|
|
||||||
- Check requirements/*
|
- Check requirements in setup.cfg
|
||||||
|
|
||||||
- Delete `tests/cache`, do `pytest --runslow`, and update cache.
|
- Delete `tests/cache`, do `pytest --runslow`, and update cache.
|
||||||
|
|
||||||
|
|||||||
@@ -406,7 +406,9 @@ def run_pipeline(options, *, plugin_manager, api=False):
|
|||||||
log.error("KeyboardInterrupt")
|
log.error("KeyboardInterrupt")
|
||||||
return ExitCode.ctrl_c
|
return ExitCode.ctrl_c
|
||||||
except (ExitCodeException if not api else NeverRaise) as e:
|
except (ExitCodeException if not api else NeverRaise) as e:
|
||||||
if str(e):
|
if options.verbose >= 1:
|
||||||
|
log.exception("ExitCodeException")
|
||||||
|
elif str(e):
|
||||||
log.error("%s: %s", type(e).__name__, str(e))
|
log.error("%s: %s", type(e).__name__, str(e))
|
||||||
else:
|
else:
|
||||||
log.error(type(e).__name__)
|
log.error(type(e).__name__)
|
||||||
|
|||||||
@@ -32,12 +32,12 @@ from ocrmypdf.helpers import (
|
|||||||
monotonic,
|
monotonic,
|
||||||
safe_symlink,
|
safe_symlink,
|
||||||
)
|
)
|
||||||
|
from ocrmypdf.hocrtransform import HOCR_OK_LANGS
|
||||||
from ocrmypdf.subprocess import check_external_program
|
from ocrmypdf.subprocess import check_external_program
|
||||||
|
|
||||||
# -------------
|
# -------------
|
||||||
# External dependencies
|
# External dependencies
|
||||||
|
|
||||||
HOCR_OK_LANGS = frozenset(['eng', 'deu', 'spa', 'ita', 'por'])
|
|
||||||
DEFAULT_LANGUAGE = 'eng' # Enforce English hegemony
|
DEFAULT_LANGUAGE = 'eng' # Enforce English hegemony
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
@@ -279,7 +279,7 @@ def check_closed_streams(options): # pragma: no cover
|
|||||||
Attempting to a fork/exec a new Python process when any of std{in,out,err}
|
Attempting to a fork/exec a new Python process when any of std{in,out,err}
|
||||||
are closed or not flushable for some reason may raise an exception.
|
are closed or not flushable for some reason may raise an exception.
|
||||||
Fix this by opening devnull if the handle seems to be closed. Do this
|
Fix this by opening devnull if the handle seems to be closed. Do this
|
||||||
globally to avoid tracking places all places that fork.
|
globally to avoid tracking all places that fork.
|
||||||
|
|
||||||
Seems to be specific to multiprocessing.Process not all Python process
|
Seems to be specific to multiprocessing.Process not all Python process
|
||||||
forkers.
|
forkers.
|
||||||
|
|||||||
@@ -41,6 +41,62 @@ from reportlab.lib.colors import black, cyan, magenta, red
|
|||||||
from reportlab.lib.units import inch
|
from reportlab.lib.units import inch
|
||||||
from reportlab.pdfgen.canvas import Canvas
|
from reportlab.pdfgen.canvas import Canvas
|
||||||
|
|
||||||
|
# According to Wikipedia these languages are supported in the ISO-8859-1 character
|
||||||
|
# set, meaning reportlab can generate them and they are compatible with hocr,
|
||||||
|
# assuming Tesseract has the necessary languages installed. Note that there may
|
||||||
|
# not be language packs for them.
|
||||||
|
HOCR_OK_LANGS = frozenset(
|
||||||
|
[
|
||||||
|
# Languages fully covered by Latin-1:
|
||||||
|
'afr', # Afrikaans
|
||||||
|
'alb', # Albanian
|
||||||
|
'ast', # Leonese
|
||||||
|
'baq', # Basque
|
||||||
|
'bre', # Breton
|
||||||
|
'cos', # Corsican
|
||||||
|
'eng', # English
|
||||||
|
'eus', # Basque
|
||||||
|
'fao', # Faoese
|
||||||
|
'gla', # Scottish Gaelic
|
||||||
|
'glg', # Galician
|
||||||
|
'glv', # Manx
|
||||||
|
'ice', # Icelandic
|
||||||
|
'ind', # Indonesian
|
||||||
|
'isl', # Icelandic
|
||||||
|
'ita', # Italian
|
||||||
|
'ltz', # Luxembourgish
|
||||||
|
'mal', # Malay Rumi
|
||||||
|
'mga', # Irish
|
||||||
|
'nor', # Norwegian
|
||||||
|
'oci', # Occitan
|
||||||
|
'por', # Portugeuse
|
||||||
|
'roh', # Romansh
|
||||||
|
'sco', # Scots
|
||||||
|
'sma', # Sami
|
||||||
|
'spa', # Spanish
|
||||||
|
'sqi', # Albanian
|
||||||
|
'swa', # Swahili
|
||||||
|
'swe', # Swedish
|
||||||
|
'tgl', # Tagalog
|
||||||
|
'wln', # Walloon
|
||||||
|
# Languages supported by Latin-1 except for a few rare characters that OCR
|
||||||
|
# is probably not trained to recognize anyway:
|
||||||
|
'cat', # Catalan
|
||||||
|
'cym', # Welsh
|
||||||
|
'dan', # Danish
|
||||||
|
'deu', # German
|
||||||
|
'dut', # Dutch
|
||||||
|
'est', # Estonian
|
||||||
|
'fin', # Finnish
|
||||||
|
'fra', # French
|
||||||
|
'hun', # Hungarian
|
||||||
|
'kur', # Kurdish
|
||||||
|
'nld', # Dutch
|
||||||
|
'wel', # Welsh
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
Element = ElementTree.Element
|
Element = ElementTree.Element
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user