Multiplizieren Sie PDF mit OCR in der Befehlszeile unter Linux (Ubuntu).

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.

Schritt.0 Vorbereitung

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.

Schritt 1 Teilen Sie die PDF-Datei in Bilddateien

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

Schritt 2 Erstellen Sie eine PDF-Datei mit OCR aus der Bilddatei

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.

Schritt 3 Kombinieren Sie PDF-Dateien mit OCR zu einer

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.

Referenz-URL

Recommended Posts

Multiplizieren Sie PDF mit OCR in der Befehlszeile unter Linux (Ubuntu).
Einfacher Befehl df unter Linux
Suchen Sie unter Linux über die Befehlszeile nach großen Dateien
Abschluss des Docker-Befehls unter Linux
Konvertierung von GSI_DEM in Geotiff → UTM-Konvertierung → ASCII-Konvertierung nur in der Ubuntu-Befehlszeile
Erhalten Sie weiterhin RSS in der Befehlszeile
Statusüberprüfungsbefehl, der (manchmal) unter Linux verwendet wird
Führen Sie bootgen unter Debian GNU / Linux, Ubuntu aus
Wie installiere ich php7.4 unter Linux (Ubuntu)
Setzen Sie unter Ubuntu Linux Tab auf q
Sie suchen in der Befehlszeile nach commandlinefu
Kompilieren des Linux-Kernels (Linux 5.x unter Ubuntu 20.04)
Linux-Befehl Nr. 4
Linux-Befehl Nr. 3
Ubuntu Linux 20.04
Linux-Befehl Nr. 5
Zeigen Sie den QR-Code schnell in der Befehlszeile an
[Hinweis] Installieren Sie wxPython 3.x unter Linux Mint (Ubuntu)
Linux: Benennen Sie den vom Befehl ps angezeigten Prozess um
Syntaxhervorhebung in der Befehlszeile mithilfe von Pylements
Meine Gedanken zur Python2.6-Befehlszeilen-App-Vorlage
Linux: Verstehen Sie die Informationen, die vom Befehl top angezeigt werden
Versuchen Sie, einen neuen Befehl unter Linux zu erstellen
Konvertieren Sie XLSX in CSV in der Befehlszeile
Führen Sie Route53 in der Befehlszeile mit AWS-CLI aus.
Denken Sie an selektive Schnittstellen in der Befehlszeile
So stellen Sie pyenv unter Amazon Linux und Ubuntu ein, um eine Python 3.6.0-Umgebung zu erstellen