Ücretsiz, açık kaynak araçlarla OS X'teki PDF'lerde OCR


16

Bu blog gönderilerini okuduktan sonra:

ve Linux için aşağıdaki kod parçasından ( bu özgeçmişten) geçerek, çok sayfalı bir PDF OCR için bir yöntem buldum ve çıktıda OS X'te de çalışabilecek bir PDF aldım. Bağımlılıkların çoğu homebrew'da mevcuttur. ( brew install tesseractve brew install imagemagick), biri hariç hocr2pdf.

OS X için bir portu bulamadım. Kullanılabilir bir tane var mı? Değilse, bir OCR çok sayfalı PDF'yi nasıl ekleyebilir ve sonuçları ücretsiz, açık kaynak araçlarını kullanarak OS X'te çok sayfalı bir PDF'de tekrar geri alabilir mi?

#!/bin/bash

# This is a script to transform a PDF containing a scanned book into a searchable PDF.
# Based on previous script and many good tips by Konrad Voelkel:
# http://blog.konradvoelkel.de/2010/01/linux-ocr-and-pdf-problem-solved/
# http://blog.konradvoelkel.de/2013/03/scan-to-pdfa/
# Depends on convert (ImageMagick), pdftk and hocr2pdf (ExactImage).
# $ sudo apt-get install imagemagick pdftk exactimage
# You also need at least one OCR software which can be either tesseract or cuneiform.
# $ sudo apt-get install tesseract-ocr
# $ sudo apt-get install cuneiform
# To install languages into tesseract do (e.g. for Portuguese):
# $ sudo apt-get install tesseract-ocr-por

echo "usage: ./pdfocr.sh document.pdf ocr-sfw split lang author title"
# where ocr-sfw is either tesseract or cuneiform
# split is either 0 (already single-paged) or 1 (2 book-pages per pdf-page)
# lang is a language as in "tesseract --list-langs" or "cuneiform -l".
# and author, title are used for the PDF metadata.
#
# usage example:
# ./pdfocr.sh SomeFile.pdf tesseract 1 por "Some Author" "Some Title"
pdftk "$1" burst dont_ask
for f in pg_*.pdf
do
if [ "1" == "$3" ]; then
convert -normalize -density 300 -depth 8 -crop 50%x100% +repage $f "$f.png"
else
convert -normalize -density 300 -depth 8 $f "$f.png"
fi
done
rm pg_*.pdf

for f in pg_*.png
do
if [ "tesseract" == "$2" ]; then
tesseract -l $4 -psm 1 $f $f hocr
elif [ "cuneiform" == "$2" ]; then
cuneiform -l $4 -f hocr -o "$f.html" $f
else
echo "$2 is not a valid OCR software."
fi
hocr2pdf -i $f -r 300 -s -o "$f.pdf" < "$f.html"
done

pdftk pg_*.pdf cat output merged.pdf

pdftk merged.pdf update_info_utf8 doc_data.txt output merged+data.pdf
echo "InfoBegin" > in.info
echo "InfoKey: Author" >> in.info
echo "InfoValue: $5" >> in.info
echo "InfoBegin" >> in.info
echo "InfoKey: Title" >> in.info
echo "InfoValue: $6" >> in.info
echo "InfoBegin" >> in.info
echo "InfoKey: Creator" >> in.info
echo "InfoValue: PDF OCR scan script" >> in.info
in_filename="${1%.*}"
pdftk merged+data.pdf update_info_utf8 in.info output "$in_filename-ocr.pdf"

rm -r doc_data.txt in.info merged* pg_*

Yanıtlar:


14

Tesseract 3.03+ PDF çıktısı için yerleşik destek sunar. Bu da leptonica kurulmasını gerektirir. brew install tesseract --HEADTesseract'ın en son sürümünü almak için : tuşunu kullanabilirsiniz . Ayrıca ghostscript'in yüklü olması gerekir, ancak hocr2pdf'ye gerek yoktur.

Aşağıdaki komut dosyası, PDF'yi JPEG'lere bölmek için ghostscript'i kullanır, JPEG'leri OCR'ye tesseract ve tek bir PDF sayfası çıkarır ve son olarak sayfaları tekrar bir PDF'de birleştirmek için tekrar ghostscript'i kullanır.

#!/bin/sh

y="`pwd`/$1"
echo Will create a searchable PDF for $y

x=`basename "$y"`
name=${x%.*}

mkdir "$name"
cd "$name"

# splitting to individual pages
gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -r300 -dTextAlphaBits=4 -o out_%04d.jpg -f "$y"

# process each page
for f in $( ls *.jpg ); do
  # extract text
  tesseract -l eng -psm 3 $f ${f%.*} pdf
  rm $f
done

# combine all pages back to a single file
gs -dCompatibilityLevel=1.4 -dNOPAUSE -dQUIET -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile="../${name}_searchable.pdf" *.pdf

cd ..
rm -rf "${name}"

# Adapted from: http://www.morethantechnical.com/2013/11/21/creating-a-searchable-pdf-with-opensource-tools-ghostscript-hocr2pdf-and-tesseract-ocr/
# from http://www.ehow.com/how_6874571_merge-pdf-files-ghostscript.html
# bash tut: http://linuxconfig.org/bash-scripting-tutorial
# Linux PDF,OCR: http://blog.konradvoelkel.de/2013/03/scan-to-pdfa/

1
Tesseract 4'te bunun olması gerekiyor tesseract $f ${f%.*} -l eng --psm 3 pdf.
Robin Dinse

1

Ben tesseractde os x üzerinde kullanıyorum . Burada kısaca otomasyon hakkında yazdı .


5
Bu bağlantı soruyu cevaplayabilirken, cevabın önemli kısımlarını buraya eklemek ve bağlantıyı referans olarak sağlamak daha iyidir. Bağlantı verilen sayfa değişirse, yalnızca bağlantı yanıtları geçersiz olabilir. Lütfen buraya da bir göz atın: apple.stackexchange.com/help/deleted-answers
bummi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.