Jim Barlow 62edc15cd7 Implement ctypes wrapper around Leptonica to access its deskew function
A few design notes:
Leptonica's deskew is far superior to ImageMagick's convert -deskew command --
around 30-40x faster.  Subjectively the output appears to this contributor to
be of higher quality as well.  The difference is the algorithm: ImageMagick
uses the complex Hough transform to find the skew angle, while Leptonica uses
the simpler method, Postl's variance of differential line sums -- conceptually, shear the image and check for straight horizontal.  In this case
simplicity wins.  Finding the skew angle is the bulk of the work.

Leptonica's author explains the advantages of his approach here:
http://www.leptonica.com/skew-measurement.html

Leptonica is the low-level library that Tesseract depends on.  Hence, this
project already depends on Leptonica.  Leptonica can read and write most
common image file types on its own.

Unfortunately its error handling is poor: it seldom returns any meaningful
error codes.  The best it manages is writing messages to stderr, which in
the context of a verbose script is just confusing since the error's source
is not indicated.  The problem is compounded by Tesseract's use of Leptonica,
which will produce exactly the same errors in some cases.  So we trap stderr
between calls to Leptonica and parse it for a few different types of error
message.

leptonica.py is Python 2/3 compatible and set up to provide access to other
Leptonica functions as needed.  Of particular interest are its orientation
detection (including flip and rotation errors) which it does by comparing
text ascenders to descenders.

There is a PyPI "pylepthonica" package, however it is out of date by a few
years, and it implements all of Leptonica with Python wrappers -- so it is
massive, with one .py file at 2.5 MB.  This module is loosely inspired by
pyleptonica but more modern, up to date, and contains only limited
functionality.
2014-01-19 14:28:52 -08:00
2013-05-06 23:13:29 +03:00
2014-01-18 22:22:19 +01:00
2014-01-14 23:46:33 +01:00

OCRmyPDF

OCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched

To get the script usage, call: sh ./OCRmyPDF.sh -h

Main features

  • Generates a searchable PDF/A file from a PDF file containing only images
  • Places OCRed text accurately below the image to ease copy / paste
  • Keeps the exact resolution of the original embedded images
    • or if requested oversample the images before OCRing so as to get better results
  • If requested deskews and / or clean the image before performing OCR
  • Validates the generated file against the PDF/A specification using jhove
  • Provides debug mode to enable easy verification of the OCR results
  • Processes several pages in parallel if more than one CPU core is available

For details: please consult the release notes

Motivation

I searched the web for a free command line tool to OCR PDF files on linux/unix: I found many, but none of them were really satisfying.

  • Either they produced PDF files with misplaced text under the image (making copy/paste impossible)
  • Or they did not display correctly some escaped html characters located in the hocr file produced by the OCR engine
  • Or they changed the resolution of the embedded images
  • Or they generated PDF file having a ridiculous big size
  • Or they crashed when trying to OCR some of my PDF files
  • Or they did not produce valid PDF files (even though they were readable with my current PDF reader)
  • On top of that none of them produced PDF/A files (format dedicated for long time storage / archiving)

... so I decided to develop my own tool (using various existing scripts as an inspiration)

Install

Download OCRmyPDF here: https://github.com/fritz-hh/OCRmyPDF/releases

Copy the file in onto your linux/unix machine and extract it.

Run: "sh ./OCRmyPDF.sh -h" to get the script usage

If not yet installed, the script will notify you about dependencies that need to be installed. The script requires specific versions of the dependencies. Older version than the ones mentioned in the release notes are likely not to be compatible to OCRmyPDF.

Support

In case you detect an issue, please:

  • Check if your issue is already known
  • If no problem report exists on github, please create one here: https://github.com/fritz-hh/OCRmyPDF/issues
  • Describe your problem thoroughly
  • Append the console output of the script when running the debug mode (-g option)
  • If possible provide your input PDF file as well as the content of the temporary folder (using a file sharing service like www.file-upload.net)

Press & Media

Disclaimer

The software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

S
Description
OCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched
http://ocrmypdf.readthedocs.io/ Readme MPL-2.0
80 MiB
Languages
Python 97.9%
Shell 1.8%
Dockerfile 0.3%