Ich wollte OCR auf die PDF-Datei in der Befehlszeile anwenden, also schrieb ich ein Bash-Skript für OCR mit dem Dateinamen ocrize.
Wenn Sie ocrize verwenden, führen Sie bitte vorab den folgenden Befehl aus, um die erforderlichen Pakete zu installieren.
$ sudo apt install tesseract-ocr-jpn imagemagick
#Tesseract zum Multiplizieren vertikaler japanischer PDF-Dateien mit OCR-ocr-jpn-Brauchen vert.
Führen Sie ocrize wie folgt aus (machen Sie es im Voraus mit chmod ausführbar).
$ ./ocrize input.pdf
# or
$ ocrize input.pdf #Zum Beispiel/usr/local/Wenn ocrize an einer Stelle platziert wird, an der der Pfad verläuft, z. B. bin.
Das Verfahren zum Anwenden von OCR auf die PDF-Datei input.pdf in der Befehlszeile wird unten erläutert.
Speichern Sie den Dateinamen in einer Variablen und erstellen Sie ein primäres Speicherverzeichnis, bevor Sie OCR auf input.pdf anwenden.
$ stem="input" #Dateiname ohne Erweiterung.
$ dir="${file}.temp"
$ mkdir ${dir} # input.Ein temporäres Verzeichnis wird erstellt.
Verwenden Sie den Konvertierungsbefehl von ImageMagick, um input.pdf in Bilddateien aufzuteilen.
$ convert -density 300 -geometry 1000 ${stem}.pdf ${dir}/${stem}.png
Je höher der Wert der Option "-density" ist, desto besser ist die Bildqualität. Wenn Sie jedoch einen großen Wert angeben, müssen Sie die Ressource von ImageMagick ändern.
Wenn der obige Befehl ausgeführt wird, wird die Datei, in der input.pdf in Seiten unterteilt und in PNG konvertiert ist, wie unten gezeigt im Verzeichnis input.temp ausgegeben.
$ ls ${dir}
input-0.png input-1.png input-2.png input-3.png
Wenn Sie mit dem Befehl convert
den folgenden Fehler erhalten, ändern Sie die policy.xml von ImageMagick (in meiner Umgebung befand sich policy.xml direkt unter / etc / ImageMagick-6).
Error.1 convert: not authorized
Ändern Sie das Recht des Richtlinien-Tags, dessen Domäne Codierer und Muster PDF ist, wie folgt, damit PDF gelesen und geschrieben werden kann.
<policy domain="coder" rights="read|write" pattern="PDF" />
Error.2 convert-im6.q16: cache resources exhausted
Wir haben nicht genügend Speicher, also korrigieren wir das Richtlinien-Tag mit der Domänenressource. In meinem Fall habe ich den Ort festgelegt, an dem der Name Speicher und Festplatte ist.
<policy domain="resource" name="memory" value="1GiB"/>
<policy domain="resource" name="disk" value="2GiB"/>
Sie können die Ressource mit dem folgenden Befehl überprüfen.
$ identify -list resource
# or
$ identify -list Resource
OCR wird auf jede Bilddatei im Verzeichnis input.temp angewendet.
$ N=$(ls ${dir} | grep -c '' | awk '{printf "%d", $1-1}')
$ for n in $(seq 0 ${N}); do tesseract -l jpn+eng ${dir}/${stem}-${n}.png ${dir}/${stem}-${n} pdf; done
Die Erkennungssprache wird durch die Option -l
angegeben. Wenn Sie zuerst auf Japanisch und dann auf Englisch erkennen möchten, geben Sie "jpn + eng" an.
Verwenden Sie den Befehl pdfunite
, um mehrere PDF-Dateien zu einer zu kombinieren.
$ pdfunite $(for n in $(seq 0 ${N}); do echo ${dir}/${stem}-${n}.pdf; done) ocrized-${stem}.pdf
PDF-Dateien werden in Seitenreihenfolge mit "für" ausgegeben, damit die Seitenreihenfolge nicht unterbrochen wird. Nach der Ausführung wird ocrized-input.pdf, also input.pdf multipliziert mit OCR, direkt unter dem aktuellen Verzeichnis erstellt.
Löschen Sie zum Schluss das Verzeichnis input.temp und Sie sind fertig!
$ rm -r ${dir}
ocrize
Das folgende Bash-Skript fasst die oben genannten Inhalte zusammen. Speichern Sie es unter dem Dateinamen "ocrize" und verwenden Sie es.
#! /bin/bash
if [ $# -eq 1 ]; then
file=$1
ext=$(echo ${file} | rev | cut -d '.' -f 1 | rev)
dir=${file}.temp
if [ -d ${dir} ]; then
echo "${dir} allready exists. Please remove this directory."
exit 1
fi
if [ ${ext} = "pdf" -o ${ext} = "PDF" ]; then
if [ ! -f ${file} ]; then
echo "${file} dose not exist."
exit 1
fi
stem=$(echo ${file} | rev | cut -c 5- | rev)
mkdir ${dir}
echo "1: Converting PDF to PNG."
convert -density 300 -geometry 1000 ${file} ${dir}/${stem}.png
echo "1: Finished."
N=$(ls ${dir} | grep -c '' | awk '{printf "%d", $1-1}')
echo "2: OCRizing."
for n in $(seq 0 ${N}); do
p=$(echo "${n} ${N}" | awk '{printf "%5.1f", ($1+1)/($2+1)*100}')
echo -ne "Progress: [${p} %]\r"
tesseract -l jpn+eng ${dir}/${stem}-${n}.png ${dir}/${stem}-${n} pdf >& /dev/null
rm ${dir}/${stem}-${n}.png
done
echo "2: Finished. "
echo "3: Merging PDF files."
#pdftk $(for n in $(seq 0 ${N}); do echo ${dir}/${stem}-${n}.pdf; done) output ocrized-${pdffile}
pdfunite $(for n in $(seq 0 ${N}); do echo ${dir}/${stem}-${n}.pdf; done) ocrized-${file}
echo "3: Finished."
rm -r ${dir}
else
echo "Extension must be pdf or PDF."
exit 1
fi
else
echo "Usage: $ ocrize input.pdf"
exit 1
fi
Wenn Sie "ocrize" ausführen, wird das Skript wie folgt ausgeführt.
$ ./ocrize input.pdf
1: Converting PDF to PNG.
convert-im6.q16: profile 'icc': 'RGB ': RGB color space not permitted on grayscale PNG `input.pdf.temp/input.png' @ warning/png.c/MagickPNGWarningHandler/1654.
1: Finished.
2: OCRizing.
Progress: [ 84.4 %]
Ein paar Sekunden später
1: Converting PDF to PNG.
convert-im6.q16: profile 'icc': 'RGB ': RGB color space not permitted on grayscale PNG `input.pdf.temp/input.png' @ warning/png.c/MagickPNGWarningHandler/1654.
1: Finished.
2: OCRizing.
2: Finished.
3: Merging PDF files.
3: Finished.
Recommended Posts