Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d8d9c41abb | ||
|
|
a8cad72f72 | ||
|
|
86c04305f4 | ||
|
|
0a110fac55 | ||
|
|
f8970ad862 | ||
|
|
fcfc78b7ee | ||
|
|
8bb244df24 |
@@ -18,8 +18,20 @@ jobs:
|
|||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-18.04] #, ubuntu-20.04]
|
include:
|
||||||
python: ["3.6"] #, "3.7", "3.8", "3.9"]
|
- os: ubuntu-18.04
|
||||||
|
python: 3.6
|
||||||
|
- os: ubuntu-18.04
|
||||||
|
python: 3.7
|
||||||
|
- os: ubuntu-20.04
|
||||||
|
python: 3.8
|
||||||
|
- os: ubuntu-20.04
|
||||||
|
python: 3.9
|
||||||
|
- os: ubuntu-latest
|
||||||
|
python: 3.9
|
||||||
|
- os: ubuntu-latest
|
||||||
|
python: 3.9
|
||||||
|
tesseract5: true
|
||||||
|
|
||||||
env:
|
env:
|
||||||
OS: ${{ matrix.os }}
|
OS: ${{ matrix.os }}
|
||||||
@@ -35,6 +47,11 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python }}
|
python-version: ${{ matrix.python }}
|
||||||
|
|
||||||
|
- name: Install Tesseract 5
|
||||||
|
if: matrix.tesseract5
|
||||||
|
run: |
|
||||||
|
sudo add-apt-repository ppa:alex-p/tesseract-ocr-devel
|
||||||
|
|
||||||
- name: Install common packages
|
- name: Install common packages
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
|
|||||||
@@ -91,6 +91,11 @@ brew install tesseract-lang
|
|||||||
|
|
||||||
You can then pass the `-l LANG` argument to OCRmyPDF to give a hint as to what languages it should search for. Multiple languages can be requested.
|
You can then pass the `-l LANG` argument to OCRmyPDF to give a hint as to what languages it should search for. Multiple languages can be requested.
|
||||||
|
|
||||||
|
OCRmyPDF supports Tesseract 4.0 and the beta versions of Tesseract 5.0. It will
|
||||||
|
automatically use whichever version it finds first on the `PATH` environment
|
||||||
|
variable. On Windows, if `PATH` does not provide a Tesseract binary, we use
|
||||||
|
the highest version number that is installed according to the Windows Registry.
|
||||||
|
|
||||||
## Documentation and support
|
## Documentation and support
|
||||||
|
|
||||||
Once OCRmyPDF is installed, the built-in help which explains the command syntax and options can be accessed via:
|
Once OCRmyPDF is installed, the built-in help which explains the command syntax and options can be accessed via:
|
||||||
@@ -115,7 +120,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/)
|
- [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
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -9,11 +9,11 @@ encoding was patented for a long time. All known JBIG2 US patents have
|
|||||||
expired as of 2017, but it is possible that unknown patents exist.
|
expired as of 2017, but it is possible that unknown patents exist.
|
||||||
|
|
||||||
JBIG2 encoding is recommended for OCRmyPDF and is used to losslessly
|
JBIG2 encoding is recommended for OCRmyPDF and is used to losslessly
|
||||||
create smaller PDFs. If JBIG2 encoding not available, lower quality
|
create smaller PDFs. If JBIG2 encoding is not available, lower quality
|
||||||
encodings will be used.
|
encodings will be used.
|
||||||
|
|
||||||
JBIG2 decoding is not patented and is performed automatically by most
|
JBIG2 decoding is not patented and is performed automatically by most
|
||||||
PDF viewers. It is widely supported has been part of the PDF
|
PDF viewers. It is widely supported and has been part of the PDF
|
||||||
specification since 2001.
|
specification since 2001.
|
||||||
|
|
||||||
On macOS, Homebrew packages jbig2enc and OCRmyPDF includes it by
|
On macOS, Homebrew packages jbig2enc and OCRmyPDF includes it by
|
||||||
@@ -37,7 +37,7 @@ Lossy mode JBIG2
|
|||||||
|
|
||||||
OCRmyPDF provides lossy mode JBIG2 as an advanced feature. Users should
|
OCRmyPDF provides lossy mode JBIG2 as an advanced feature. Users should
|
||||||
`review the technical concerns with JBIG2 in lossy
|
`review the technical concerns with JBIG2 in lossy
|
||||||
mode <https://abbyy.technology/en:kb:tip:jbig2_compression_and_ocr>`__
|
mode <https://en.wikipedia.org/wiki/JBIG2#Disadvantages>`__
|
||||||
and decide if this feature is acceptable for their use case.
|
and decide if this feature is acceptable for their use case.
|
||||||
|
|
||||||
JBIG2 lossy mode does achieve higher compression ratios than any other
|
JBIG2 lossy mode does achieve higher compression ratios than any other
|
||||||
|
|||||||
@@ -12,6 +12,13 @@ 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.3.3
|
||||||
|
=======
|
||||||
|
|
||||||
|
- watcher.py: fixed interpretation of boolean env vars (:issue:`821`).
|
||||||
|
- Adjust CI scripts to test Tesseract 5 betas.
|
||||||
|
- Document our support for the Tesseract 5 betas.
|
||||||
|
|
||||||
v12.3.2
|
v12.3.2
|
||||||
=======
|
=======
|
||||||
|
|
||||||
|
|||||||
+9
-4
@@ -37,14 +37,19 @@ import ocrmypdf
|
|||||||
|
|
||||||
# pylint: disable=logging-format-interpolation
|
# pylint: disable=logging-format-interpolation
|
||||||
|
|
||||||
|
|
||||||
|
def getenv_bool(name: str, default: str = 'False'):
|
||||||
|
return os.getenv(name, default).lower() in ('true', 'yes', 'y', '1')
|
||||||
|
|
||||||
|
|
||||||
INPUT_DIRECTORY = os.getenv('OCR_INPUT_DIRECTORY', '/input')
|
INPUT_DIRECTORY = os.getenv('OCR_INPUT_DIRECTORY', '/input')
|
||||||
OUTPUT_DIRECTORY = os.getenv('OCR_OUTPUT_DIRECTORY', '/output')
|
OUTPUT_DIRECTORY = os.getenv('OCR_OUTPUT_DIRECTORY', '/output')
|
||||||
OUTPUT_DIRECTORY_YEAR_MONTH = bool(os.getenv('OCR_OUTPUT_DIRECTORY_YEAR_MONTH', ''))
|
OUTPUT_DIRECTORY_YEAR_MONTH = getenv_bool('OCR_OUTPUT_DIRECTORY_YEAR_MONTH')
|
||||||
ON_SUCCESS_DELETE = bool(os.getenv('OCR_ON_SUCCESS_DELETE', ''))
|
ON_SUCCESS_DELETE = getenv_bool('OCR_ON_SUCCESS_DELETE')
|
||||||
DESKEW = bool(os.getenv('OCR_DESKEW', ''))
|
DESKEW = getenv_bool('OCR_DESKEW')
|
||||||
OCR_JSON_SETTINGS = json.loads(os.getenv('OCR_JSON_SETTINGS', '{}'))
|
OCR_JSON_SETTINGS = json.loads(os.getenv('OCR_JSON_SETTINGS', '{}'))
|
||||||
POLL_NEW_FILE_SECONDS = int(os.getenv('OCR_POLL_NEW_FILE_SECONDS', '1'))
|
POLL_NEW_FILE_SECONDS = int(os.getenv('OCR_POLL_NEW_FILE_SECONDS', '1'))
|
||||||
USE_POLLING = bool(os.getenv('OCR_USE_POLLING', ''))
|
USE_POLLING = getenv_bool('OCR_USE_POLLING')
|
||||||
LOGLEVEL = os.getenv('OCR_LOGLEVEL', 'INFO')
|
LOGLEVEL = os.getenv('OCR_LOGLEVEL', 'INFO')
|
||||||
PATTERNS = ['*.pdf', '*.PDF']
|
PATTERNS = ['*.pdf', '*.PDF']
|
||||||
|
|
||||||
|
|||||||
@@ -34,3 +34,41 @@ exclude = '''
|
|||||||
| src/ocrmypdf/lib/_leptonica.py
|
| src/ocrmypdf/lib/_leptonica.py
|
||||||
)/
|
)/
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
[tool.coverage.run]
|
||||||
|
branch = true
|
||||||
|
parallel = true
|
||||||
|
concurrency = ["multiprocessing"]
|
||||||
|
|
||||||
|
[tool.coverage.paths]
|
||||||
|
source = ["src/ocrmypdf"]
|
||||||
|
|
||||||
|
[tool.coverage.report]
|
||||||
|
# Regexes for lines to exclude from consideration
|
||||||
|
exclude_lines = [
|
||||||
|
# Have to re-enable the standard pragma
|
||||||
|
"pragma: no cover",
|
||||||
|
|
||||||
|
# Don't complain if tests don't hit defensive assertion code:
|
||||||
|
"raise AssertionError",
|
||||||
|
"raise NotImplementedError",
|
||||||
|
|
||||||
|
# Don't complain if non-runnable code isn't run:
|
||||||
|
"if 0:",
|
||||||
|
"if False:",
|
||||||
|
"if __name__ == .__main__.:",
|
||||||
|
"if TYPE_CHECKING:"
|
||||||
|
]
|
||||||
|
|
||||||
|
[tool.isort]
|
||||||
|
profile = "black"
|
||||||
|
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"]
|
||||||
|
|
||||||
|
[tool.pytest.ini_options]
|
||||||
|
minversion = "6.0"
|
||||||
|
norecursedirs = ["lib", ".pc", ".git", "venv", "output", "cache", "resources"]
|
||||||
|
testpaths = ["tests"]
|
||||||
|
addopts = "-n auto"
|
||||||
|
markers = ["slow"]
|
||||||
|
filterwarnings = ["ignore:.*XMLParser.*:DeprecationWarning"]
|
||||||
@@ -72,6 +72,7 @@ where = src
|
|||||||
|
|
||||||
[options.extras_require]
|
[options.extras_require]
|
||||||
test =
|
test =
|
||||||
|
coverage[toml] >= 5
|
||||||
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
|
||||||
@@ -101,47 +102,3 @@ test = pytest
|
|||||||
[check-manifest]
|
[check-manifest]
|
||||||
ignore =
|
ignore =
|
||||||
.github
|
.github
|
||||||
|
|
||||||
[tool:pytest]
|
|
||||||
norecursedirs = lib .pc .git output cache resources
|
|
||||||
testpaths = tests
|
|
||||||
filterwarnings =
|
|
||||||
ignore:.*XMLParser.*:DeprecationWarning
|
|
||||||
markers =
|
|
||||||
slow
|
|
||||||
addopts =
|
|
||||||
-n auto
|
|
||||||
|
|
||||||
[isort]
|
|
||||||
multi_line_output = 3
|
|
||||||
include_trailing_comma = True
|
|
||||||
force_grid_wrap = 0
|
|
||||||
use_parentheses = True
|
|
||||||
line_length = 88
|
|
||||||
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
|
|
||||||
|
|
||||||
[coverage:paths]
|
|
||||||
source =
|
|
||||||
src/ocrmypdf
|
|
||||||
|
|
||||||
[coverage:run]
|
|
||||||
branch = true
|
|
||||||
parallel = true
|
|
||||||
concurrency = multiprocessing
|
|
||||||
|
|
||||||
[coverage:report]
|
|
||||||
# Regexes for lines to exclude from consideration
|
|
||||||
exclude_lines =
|
|
||||||
# Have to re-enable the standard pragma
|
|
||||||
pragma: no cover
|
|
||||||
|
|
||||||
# Don't complain if tests don't hit defensive assertion code:
|
|
||||||
raise AssertionError
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
# Don't complain if non-runnable code isn't run:
|
|
||||||
if 0:
|
|
||||||
if False:
|
|
||||||
if __name__ == .__main__.:
|
|
||||||
if TYPE_CHECKING:
|
|
||||||
|
|||||||
Reference in New Issue
Block a user