Compare commits
20
Commits
v2.0-rc2
...
v2.1-stable
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b403016d5b | ||
|
|
5a81823969 | ||
|
|
17801401cd | ||
|
|
5c7b2a2a36 | ||
|
|
1db06de287 | ||
|
|
3904178d44 | ||
|
|
8bb9c3610c | ||
|
|
7dcc382ccc | ||
|
|
b71fc807d2 | ||
|
|
15d28d970a | ||
|
|
e083a860e9 | ||
|
|
6463b9dd84 | ||
|
|
c873de6ca4 | ||
|
|
b70863b47e | ||
|
|
3546f84c6d | ||
|
|
1c34fd69cf | ||
|
|
4cf38404cc | ||
|
|
be830ddc31 | ||
|
|
18322b424f | ||
|
|
6901c60db4 |
+2
-1
@@ -1,2 +1,3 @@
|
|||||||
tmp/
|
tmp/
|
||||||
log/
|
log/
|
||||||
|
*.pyc
|
||||||
Regular → Executable
+29
-13
@@ -4,7 +4,8 @@
|
|||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
# Import required scripts
|
# Import required scripts
|
||||||
. "`dirname $0`/src/config.sh"
|
BASEPATH="$(dirname $(readlink -f $0))"
|
||||||
|
. "$BASEPATH/src/config.sh"
|
||||||
|
|
||||||
# Set variables corresponding to the input parameters
|
# Set variables corresponding to the input parameters
|
||||||
ARGUMENTS="$@"
|
ARGUMENTS="$@"
|
||||||
@@ -39,10 +40,10 @@ Usage: OCRmyPDF.sh [-h] [-v] [-g] [-k] [-d] [-c] [-i] [-o dpi] [-f] [-l languag
|
|||||||
an oversampled image having the latter dpi value. This can improve the OCR results but can lead to a larger output PDF file.
|
an oversampled image having the latter dpi value. This can improve the OCR results but can lead to a larger output PDF file.
|
||||||
(default: no oversampling performed)
|
(default: no oversampling performed)
|
||||||
-f : Force to OCR the whole document, even if some page already contain font data
|
-f : Force to OCR the whole document, even if some page already contain font data
|
||||||
(which should not be the case for PDF files built from scnanned images)
|
(which should not be the case for PDF files built from scanned images)
|
||||||
-l : Set the language of the PDF file in order to improve OCR results (default "eng")
|
-l : Set the language of the PDF file in order to improve OCR results (default "eng")
|
||||||
Any language supported by tesseract is supported (Tesseract uses 3-character ISO 639-2 language codes)
|
Any language supported by tesseract is supported (Tesseract uses 3-character ISO 639-2 language codes)
|
||||||
Multiple languages may be specified, separated by plus characters.
|
Multiple languages may be specified, separated by '+' characters.
|
||||||
-C : Pass an additional configuration file to the tesseract OCR engine.
|
-C : Pass an additional configuration file to the tesseract OCR engine.
|
||||||
(this option can be used more than once)
|
(this option can be used more than once)
|
||||||
Note 1: The configuration file must be available in the "tessdata/configs" folder of your tesseract installation
|
Note 1: The configuration file must be available in the "tessdata/configs" folder of your tesseract installation
|
||||||
@@ -111,8 +112,7 @@ done
|
|||||||
# Remove the optional arguments parsed above.
|
# Remove the optional arguments parsed above.
|
||||||
shift $((OPTIND-1))
|
shift $((OPTIND-1))
|
||||||
|
|
||||||
# Check if the number of mandatory parameters
|
# Check if the number of mandatory parameters provided is as expected
|
||||||
# provided is as expected
|
|
||||||
if [ "$#" -ne "2" ]; then
|
if [ "$#" -ne "2" ]; then
|
||||||
echo "Exactly two mandatory argument shall be provided ($# arguments provided)"
|
echo "Exactly two mandatory argument shall be provided ($# arguments provided)"
|
||||||
usage
|
usage
|
||||||
@@ -129,7 +129,7 @@ FILE_OUTPUT_PDFA="`absolutePath "$2"`"
|
|||||||
|
|
||||||
|
|
||||||
# set script path as working directory
|
# set script path as working directory
|
||||||
cd "`dirname $0`"
|
cd "$BASEPATH"
|
||||||
|
|
||||||
[ $VERBOSITY -ge $LOG_DEBUG ] && echo "$TOOLNAME version: $VERSION"
|
[ $VERBOSITY -ge $LOG_DEBUG ] && echo "$TOOLNAME version: $VERSION"
|
||||||
[ $VERBOSITY -ge $LOG_DEBUG ] && echo "Arguments: $ARGUMENTS"
|
[ $VERBOSITY -ge $LOG_DEBUG ] && echo "Arguments: $ARGUMENTS"
|
||||||
@@ -146,28 +146,33 @@ cd "`dirname $0`"
|
|||||||
! command -v python2 > /dev/null && echo "Please install python v2.x. Exiting..." && exit $EXIT_MISSING_DEPENDENCY
|
! command -v python2 > /dev/null && echo "Please install python v2.x. Exiting..." && exit $EXIT_MISSING_DEPENDENCY
|
||||||
! python2 -c 'import lxml' 2>/dev/null && echo "Please install the python library lxml. Exiting..." && exit $EXIT_MISSING_DEPENDENCY
|
! python2 -c 'import lxml' 2>/dev/null && echo "Please install the python library lxml. Exiting..." && exit $EXIT_MISSING_DEPENDENCY
|
||||||
! python2 -c 'import reportlab' 2>/dev/null && echo "Please install the python library reportlab. Exiting..." && exit $EXIT_MISSING_DEPENDENCY
|
! python2 -c 'import reportlab' 2>/dev/null && echo "Please install the python library reportlab. Exiting..." && exit $EXIT_MISSING_DEPENDENCY
|
||||||
! command -v gs > /dev/null && echo "Please install ghostcript. Exiting..." && exit $EXIT_MISSING_DEPENDENCY
|
! command -v gs > /dev/null && echo "Please install ghostscript. Exiting..." && exit $EXIT_MISSING_DEPENDENCY
|
||||||
! command -v java > /dev/null && echo "Please install java. Exiting..." && exit $EXIT_MISSING_DEPENDENCY
|
! command -v java > /dev/null && echo "Please install java. Exiting..." && exit $EXIT_MISSING_DEPENDENCY
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ensure the right tesseract version is installed
|
# ensure the right tesseract version is installed
|
||||||
# older versions are known to produce malformed hocr output and should not be used
|
# older versions are known to produce malformed hocr output and should not be used
|
||||||
reqtessversion="3.02.02"
|
# Even 3.02.01 fails in few cases (see issue #28). I decided to allow this version anyway because
|
||||||
|
# 3.02.02 is not yet available for some widespread linux distributions
|
||||||
|
reqtessversion="3.02.01"
|
||||||
tessversion=`tesseract -v 2>&1 | grep "tesseract" | sed s/[^0-9.]//g`
|
tessversion=`tesseract -v 2>&1 | grep "tesseract" | sed s/[^0-9.]//g`
|
||||||
! [ $((`echo $tessversion | sed s/[.]//g`-`echo $reqtessversion | sed s/[.]//g`)) -ge 0 ] > /dev/null \
|
tesstooold=$(echo "`echo $tessversion | sed s/[.]//2`-`echo $reqtessversion | sed s/[.]//2` < 0" | bc)
|
||||||
|
[ "$tesstooold" -eq "1" ] \
|
||||||
&& echo "Please install tesseract ${reqtessversion} or newer (currently installed version is ${tessversion})" && exit $EXIT_MISSING_DEPENDENCY
|
&& echo "Please install tesseract ${reqtessversion} or newer (currently installed version is ${tessversion})" && exit $EXIT_MISSING_DEPENDENCY
|
||||||
|
|
||||||
# ensure the right GNU parallel version is installed
|
# ensure the right GNU parallel version is installed
|
||||||
# older version do not support -q flag (required to escape special characters)
|
# older version do not support -q flag (required to escape special characters)
|
||||||
reqparallelversion="20130222"
|
reqparallelversion="20121122"
|
||||||
parallelversion=`parallel --minversion 0`
|
parallelversion=`parallel --minversion 0`
|
||||||
! parallel --minversion "$reqparallelversion" > /dev/null \
|
! parallel --minversion "$reqparallelversion" > /dev/null \
|
||||||
&& echo "Please install GNU parallel ${reqparallelversion} or newer (currently installed version is ${parallelversion})" && exit $EXIT_MISSING_DEPENDENCY
|
&& echo "Please install GNU parallel ${reqparallelversion} or newer (currently installed version is ${parallelversion})" && exit $EXIT_MISSING_DEPENDENCY
|
||||||
|
|
||||||
|
|
||||||
# ensure pdftoppm is provided by poppler-utils, not the older xpdf version
|
# ensure pdftoppm is provided by poppler-utils, not the older xpdf version
|
||||||
! pdftoppm -v 2>&1 | grep -q 'Poppler' && echo "Please remove xpdf and install poppler-utils. Exiting..." && $EXIT_MISSING_DEPENDENCY
|
! pdftoppm -v 2>&1 | grep -q 'Poppler' && echo "Please remove xpdf and install poppler-utils. Exiting..." && $EXIT_MISSING_DEPENDENCY
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Display the version of the tools if log level is LOG_DEBUG
|
# Display the version of the tools if log level is LOG_DEBUG
|
||||||
if [ $VERBOSITY -ge $LOG_DEBUG ]; then
|
if [ $VERBOSITY -ge $LOG_DEBUG ]; then
|
||||||
echo "--------------------------------"
|
echo "--------------------------------"
|
||||||
@@ -201,8 +206,19 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Initialize path to temporary files using mktemp
|
# check if the languages passed to tesseract are all supported
|
||||||
|
for currentlan in `echo "$LAN" | sed 's/+/ /g'`; do
|
||||||
|
if ! tesseract --list-langs 2>&1 | grep "^$currentlan\$" > /dev/null; then
|
||||||
|
echo "The language \"$currentlan\" is not supported by tesseract."
|
||||||
|
tesseract --list-langs 2>&1 | tr '\n' ' '; echo
|
||||||
|
echo "Exiting..."
|
||||||
|
exit $EXIT_BAD_ARGS
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Initialize path to temporary files using mktemp
|
||||||
# Goal: save tmp file in a sub-folder of the $TMPDIR environment variable (or in "/tmp" if unset)
|
# Goal: save tmp file in a sub-folder of the $TMPDIR environment variable (or in "/tmp" if unset)
|
||||||
# Unfortunately, Linux mktemp is not compatible with FreeBSD/OSX mktemp
|
# Unfortunately, Linux mktemp is not compatible with FreeBSD/OSX mktemp
|
||||||
# Linux version requires no arg
|
# Linux version requires no arg
|
||||||
@@ -277,4 +293,4 @@ END=`date +%s`
|
|||||||
[ $VERBOSITY -ge $LOG_DEBUG ] && echo "Script took $(($END-$START)) seconds"
|
[ $VERBOSITY -ge $LOG_DEBUG ] && echo "Script took $(($END-$START)) seconds"
|
||||||
|
|
||||||
|
|
||||||
[ $pdf_valid -ne 1 ] && exit $EXIT_INVALID_OUPUT_PDFA || exit 0
|
[ $pdf_valid -ne 1 ] && exit $EXIT_INVALID_OUTPUT_PDFA || exit 0
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ Main features
|
|||||||
- Generates a searchable PDF/A file from a PDF file containing only images
|
- Generates a searchable PDF/A file from a PDF file containing only images
|
||||||
- Places OCRed text accurately below the image to ease copy / paste
|
- Places OCRed text accurately below the image to ease copy / paste
|
||||||
- Keeps the exact resolution of the original embedded images
|
- Keeps the exact resolution of the original embedded images
|
||||||
- or if requested oversample the images before OCRing so as to get better results
|
- or if requested oversamples the images before OCRing so as to get better results
|
||||||
- If requested deskews and / or clean the image before performing OCR
|
- If requested deskews and / or clean the image before performing OCR
|
||||||
- Validates the generated file against the PDF/A specification using jhove
|
- Validates the generated file against the PDF/A specification using jhove
|
||||||
- Provides debug mode to enable easy verification of the OCR results
|
- Provides debug mode to enable easy verification of the OCR results
|
||||||
|
|||||||
+69
-1
@@ -5,7 +5,7 @@ Please always read this file before installing the package
|
|||||||
|
|
||||||
Download software here: https://github.com/fritz-hh/OCRmyPDF/tags
|
Download software here: https://github.com/fritz-hh/OCRmyPDF/tags
|
||||||
|
|
||||||
v2.0-rc2 (2014-01-16):
|
v2.1-stable (2014-09-20):
|
||||||
=======
|
=======
|
||||||
|
|
||||||
New features
|
New features
|
||||||
@@ -16,6 +16,74 @@ New features
|
|||||||
Changes
|
Changes
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- None
|
||||||
|
|
||||||
|
Fixes
|
||||||
|
-----
|
||||||
|
|
||||||
|
- Allow execution via simlink
|
||||||
|
- Add support for tesseract 3.03
|
||||||
|
- Add support for newer version of reportlab
|
||||||
|
- Lowered minimum version of gnu parallel
|
||||||
|
- Various typo
|
||||||
|
|
||||||
|
Tested with
|
||||||
|
-----------
|
||||||
|
|
||||||
|
- Operating system: FreeBSD 9.1
|
||||||
|
- Dependencies:
|
||||||
|
- parallel 20130222
|
||||||
|
- poppler-utils 0.22.2
|
||||||
|
- ImageMagick 6.8.0-7 2013-03-30
|
||||||
|
- Unpaper 0.3
|
||||||
|
- tesseract 3.02.02
|
||||||
|
- Python 2.7.3
|
||||||
|
- ghoscript (gs): 9.06
|
||||||
|
- java: openjdk version "1.7.0_17"
|
||||||
|
|
||||||
|
v2.0-stable (2014-01-25):
|
||||||
|
=======
|
||||||
|
|
||||||
|
New features
|
||||||
|
------------
|
||||||
|
|
||||||
|
- Check if the language(s) passed using the -l option is supported by tesseract (fixes #60)
|
||||||
|
|
||||||
|
Changes
|
||||||
|
-------
|
||||||
|
|
||||||
|
- Allow OCRmyPDF to be used with tesseract 3.02.01, even though OCR might fail for few PDF file (see issue #28). Rationale: For some linux distribution, no newer version than tesseract 3.02.01 is available
|
||||||
|
|
||||||
|
Fixes
|
||||||
|
-----
|
||||||
|
|
||||||
|
- More robust algorithm for checking the version of the installed tesseract package
|
||||||
|
|
||||||
|
Tested with
|
||||||
|
-----------
|
||||||
|
|
||||||
|
- Operating system: FreeBSD 9.1
|
||||||
|
- Dependencies:
|
||||||
|
- parallel 20130222
|
||||||
|
- poppler-utils 0.22.2
|
||||||
|
- ImageMagick 6.8.0-7 2013-03-30
|
||||||
|
- Unpaper 0.3
|
||||||
|
- tesseract 3.02.02
|
||||||
|
- Python 2.7.3
|
||||||
|
- ghoscript (gs): 9.06
|
||||||
|
- java: openjdk version "1.7.0_17"
|
||||||
|
|
||||||
|
v2.0-rc2 (2014-01-16):
|
||||||
|
=======
|
||||||
|
|
||||||
|
New features
|
||||||
|
------------
|
||||||
|
|
||||||
|
- None
|
||||||
|
|
||||||
|
Changes
|
||||||
|
-------
|
||||||
|
|
||||||
- Size reduction of final PDF file: (fixes #50)
|
- Size reduction of final PDF file: (fixes #50)
|
||||||
- Support for monochrome (Black&White) images (massive size reduction in final PDF: >80%)
|
- Support for monochrome (Black&White) images (massive size reduction in final PDF: >80%)
|
||||||
- Reduced size of grayscale images (by 13% on test PDF file)
|
- Reduced size of grayscale images (by 13% on test PDF file)
|
||||||
|
|||||||
+2
-2
@@ -9,13 +9,13 @@ DEFAULT_DPI=300 # dpi value used as fall back if the page dpi cannot be deter
|
|||||||
#####################################################################################
|
#####################################################################################
|
||||||
|
|
||||||
TOOLNAME="OCRmyPDF"
|
TOOLNAME="OCRmyPDF"
|
||||||
VERSION="v2.0-rc2"
|
VERSION="v2.1-stable"
|
||||||
|
|
||||||
# possible exit codes
|
# possible exit codes
|
||||||
EXIT_BAD_ARGS="1"
|
EXIT_BAD_ARGS="1"
|
||||||
EXIT_BAD_INPUT_FILE="2"
|
EXIT_BAD_INPUT_FILE="2"
|
||||||
EXIT_MISSING_DEPENDENCY="3"
|
EXIT_MISSING_DEPENDENCY="3"
|
||||||
EXIT_INVALID_OUPUT_PDFA="4"
|
EXIT_INVALID_OUTPUT_PDFA="4"
|
||||||
EXIT_FILE_ACCESS_ERROR="5"
|
EXIT_FILE_ACCESS_ERROR="5"
|
||||||
EXIT_OTHER_ERROR="15"
|
EXIT_OTHER_ERROR="15"
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ from PIL import Image
|
|||||||
import re, sys
|
import re, sys
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
|
|
||||||
def monkeypatch_method(cls):
|
def monkeypatch_method(cls):
|
||||||
'''
|
'''
|
||||||
Override a class method at runtime.
|
Override a class method at runtime.
|
||||||
@@ -47,8 +46,13 @@ def PIL_imagedata(self):
|
|||||||
|
|
||||||
from reportlab.lib.utils import import_zlib
|
from reportlab.lib.utils import import_zlib
|
||||||
from reportlab import rl_config
|
from reportlab import rl_config
|
||||||
from reportlab.pdfbase.pdfutils import _AsciiBase85Encode, _chunker
|
from reportlab.pdfbase.pdfutils import _chunker
|
||||||
|
# in order to support both newer and older versions of reportlab
|
||||||
|
try:
|
||||||
|
from reportlab.pdfbase.pdfutils import _AsciiBase85Encode
|
||||||
|
except ImportError:
|
||||||
|
from reportlab.pdfbase.pdfutils import asciiBase85Encode as _AsciiBase85Encode
|
||||||
|
|
||||||
self.source = 'PIL'
|
self.source = 'PIL'
|
||||||
zlib = import_zlib()
|
zlib = import_zlib()
|
||||||
if not zlib:
|
if not zlib:
|
||||||
|
|||||||
+8
-1
@@ -187,7 +187,14 @@ fi
|
|||||||
[ $VERBOSITY -ge $LOG_DEBUG ] && echo "Page $page: Performing OCR"
|
[ $VERBOSITY -ge $LOG_DEBUG ] && echo "Page $page: Performing OCR"
|
||||||
! tesseract -l "$LAN" "$curImgPixmapClean" "$curHocr" hocr $TESS_CFG_FILES 1> /dev/null 2> /dev/null \
|
! tesseract -l "$LAN" "$curImgPixmapClean" "$curHocr" hocr $TESS_CFG_FILES 1> /dev/null 2> /dev/null \
|
||||||
&& echo "Could not OCR file \"$curImgPixmapClean\". Exiting..." && exit $EXIT_OTHER_ERROR
|
&& echo "Could not OCR file \"$curImgPixmapClean\". Exiting..." && exit $EXIT_OTHER_ERROR
|
||||||
mv "$curHocr.html" "$curHocr"
|
# Tesseract names the output files differently in some distributions.
|
||||||
|
if [ -e "$curHocr.html" ]; then
|
||||||
|
mv "$curHocr.html" "$curHocr"
|
||||||
|
elif [ -e "$curHocr.hocr" ]; then
|
||||||
|
mv "$curHocr.hocr" "$curHocr"
|
||||||
|
elif [ ! -e "$curHocr" ]; then
|
||||||
|
echo "\"$curHocr[.html|.hocr]\" not found. Exiting..." && exit $EXIT_OTHER_ERROR
|
||||||
|
fi
|
||||||
|
|
||||||
# embed text and image to new pdf file
|
# embed text and image to new pdf file
|
||||||
if [ "$PREPROCESS_CLEANTOPDF" -eq "1" ]; then
|
if [ "$PREPROCESS_CLEANTOPDF" -eq "1" ]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user