Come estrarre testo con OCR da un PDF su Linux?


Risposte:


25

Ho avuto successo con la licenza BSD Porta Linux di Cuneiform Sistema OCR.

Nessun pacchetto binario sembra essere disponibile, quindi è necessario crearlo dal sorgente. Assicurarsi di avere le librerie ImageMagick C ++ installate per supportare sostanzialmente qualsiasi formato di immagine di input (altrimenti accetterà solo BMP).

Sebbene sembri essenzialmente non documentato a parte un breve file README, ho trovato i risultati dell'OCR piuttosto buoni. La cosa bella è che può fornire informazioni sulla posizione per il testo OCR in hOCR formato, in modo che sia possibile reinserire il testo nella posizione corretta in un livello nascosto di un file PDF. In questo modo puoi creare PDF "ricercabili" dai quali copiare il testo.

ho usato hocr2pdf per ricreare i PDF con i PDF originali e i risultati OCR originali. Purtroppo, il programma non sembra supportare la creazione di PDF multipagina, quindi potrebbe essere necessario creare uno script per gestirli:

#!/bin/bash
# Run OCR on a multi-page PDF file and create a new pdf with the
# extracted text in hidden layer. Requires cuneiform, hocr2pdf, gs.
# Usage: ./dwim.sh input.pdf output.pdf

set -e

input="$1"
output="$2"

tmpdir="$(mktemp -d)"

# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiffg4 -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"

# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
    base="${page%.tiff}"
    cuneiform -f hocr -o "$base.html" "$page"
    hocr2pdf -i "$page" -o "$base.pdf" < "$base.html"
done

# combine the pages into one PDF
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="$output" "$tmpdir"/page-*.pdf

rm -rf -- "$tmpdir"

Si prega di notare che lo script di cui sopra è molto rudimentale. Ad esempio, non conserva alcun metadato PDF.


Qualche idea per migliorare questo script per aggiungere la fase di controllo ortografico per correggere gli errori nella fase di riconoscimento?
Gökhan Sever

@ Gökhan Sever, intendi aggiungere un controllo ortografico interattivo in cui viene richiesto all'utente la sostituzione di parole errate / sconosciute? Penso che potresti farlo aggiungendo qualcosa come aspell check --mode=html "$base.html" nella scrittura subito dopo l'esecuzione di cuneiforme.
Jukka Matilainen

Questa è una soluzione. Tuttavia senza vedere l'intero contesto del testo è difficile apportare correzioni. Sarebbe più bello vedere un'interfaccia costruita all'interno di ocrfeeder.
Gökhan Sever

1
A proposito, uso tesseract per il riconoscimento dei caratteri: sostituzione della linea cuneiforme con: tesseract "$ page" "$ base" hocr
Gökhan Sever

1
Piccola correzione: la linea per tesseract almeno per altre lingue oltre all'inglese, qui ad es. German (= deu) è: `tesseract" $ page "" $ base "-l deu hocr` (ovviamente devi rimuovere il` `).
Keks Dose

13

Vedi se pdftotext funzionerà per te Se non è sul tuo computer, dovrai installare il pacchetto poppler-utils

sudo apt-get install poppler-utils 

Potresti anche trovare il pdf toolkit d'uso.

Una lista completa di software pdf Qui su wikipedia.

Modificare: Da te ho bisogno Funzionalità OCR, penso che dovrai provare una virata diversa. (Io non sono riuscito a trovare un convertitore linux pdf2text che faccia OCR).

  • Converti il ​​pdf in un'immagine
  • Scansiona l'immagine in testo usando gli strumenti OCR

Converti pdf in immagine

  • gs: The sotto il comando dovrebbe convertire pdf multipagina in singoli file tiff.

    gs -SDEVICE = tiffg4 -r600x600 -sPAPERSIZE = letter -sOutputFile = filename_% 04d.tif -dNOPAUSE -dBATCH - filename

  • Utilità di ImageMagick : Ci sono altre domande sul sito SuperUser sull'uso di ImageMagick che potresti usare per aiutarti a fare la conversione.

    converti foo.pdf foo.png

Converti l'immagine in testo con OCR

Tratto da Wikipedia elenco di software OCR


2
Questo programma funziona anche per i documenti di testo scritti a mano?
Ivo Flipse

1
No, non penso che abbia capacità OCR. Può solo estrarre il testo incorporato nel pdf. Pagina man: linux.die.net/man/1/pdftotext
nagul

Sì, questo funziona per i documenti PDF che sono già dotati del testo incorporato. Il mio caso è esattamente quello in cui non funziona.
hsribei

1
@ obvio171 Aggiunta l'opzione migliore che ho trovato per far funzionare OCR nel tuo caso.
nagul

11

Documenti Google volontà adesso usa OCR per convertire i tuoi documenti immagine / pdf caricati in testo. Ho avuto un buon successo con esso.

Stanno usando il sistema OCR che viene utilizzato per il gigantesco libri di Google progetto.

Tuttavia, si deve notare che solo i PDF fino a una dimensione di 2 MB saranno accettati per l'elaborazione.

Aggiornare
1. Per provarlo, carica un pdf di & lt; 2MB in google docs da un browser web.
2. Fai clic con il pulsante destro del mouse sul documento caricato e fai clic su "Apri con Google Documenti".
... Google Docs verrà convertito in testo e prodotto in un nuovo file con lo stesso nome, ma Google Documenti nella stessa cartella.


La risposta non è propriamente specifica per Ubuntu, ma voglio davvero ringraziarvi: la soluzione BRILLANTE! :)
Pitto

wow, grazie per l'hack. molto utile
Jossef Harush

Questo è stato davvero utile :) Ho caricato ieri un file da 50 MB e ha funzionato. Sembra che abbiano aumentato il limite di dimensioni.
Gaurav

2

Geza Kovacs ha creato un pacchetto di Ubuntu che è fondamentalmente uno script che usa hocr2pdf come suggerito da Jukka, ma rende le cose un po 'più veloci da configurare.

Da Geza's Ubuntu post sul forum con dettagli sul pacchetto ...

Aggiunta del repository e installazione in Ubuntu

sudo add-apt-repository ppa:gezakovacs/pdfocr
sudo apt-get update
sudo apt-get install pdfocr

Eseguire ocr su un file

pdfocr -i input.pdf -o output.pdf

Repository GitHub per il codice https://github.com/gkovacs/pdfocr/


1

PDFBeads funziona bene per me. Questo thread " Converti le immagini scansionate in un singolo file PDF "Mi ha preso e funzionante. Per una scansione di libri b & amp; w, è necessario:

  1. Crea un'immagine per ogni pagina del PDF; uno degli esempi gs sopra dovrebbe funzionare
  2. Genera output hOCR per ogni pagina; Ho usato tesseract (ma nota che Cuneiform sembra funzionare meglio).
  3. Spostare le immagini e i file hOCR in una nuova cartella; i nomi dei file devono corrispondere, quindi file001.tif richiede file001.html, file002.tif file002.html, ecc.
  4. Nella nuova cartella, esegui

    pdfbeads * > ../Output.pdf
    

Ciò inserirà il PDF OCR collated nella directory principale.


1

un altro script usando tesseract:

#!/bin/bash
# Run OCR on a multi-page PDF file and create a txt with the
# extracted text in hidden layer. Requires tesseract, gs.
# Usage: ./pdf2ocr.sh input.pdf output.txt

set -e

input="$1"
output="$2"

tmpdir="$(mktemp -d)"

# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiff24nc -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"

# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
    base="${page%.tiff}"
    tesseract "$base.tiff" $base
done

# combine the pages into one txt
cat "$tmpdir"/page-*.txt > $output

rm -rf -- "$tmpdir"

1

Biblioteca OCR di Asprise funziona sulla maggior parte delle versioni di Linux. Può richiedere l'input e l'output PDF come PDF di ricerca.

È un pacchetto commerciale. Scarica una copia gratuita di Asprise OCR SDK per Linux qui ed eseguilo in questo modo:

aocr.sh input.pdf pdf

Nota: il 'pdf' standalone specifica il formato di output.

Disclaimer: sono un dipendente dell'azienda che produce il prodotto sopra.


Questo post afferma che il prodotto può farlo, che è un suggerimento utile che dovrebbe essere pubblicato come commento. Non spiega come risolvere realmente il problema, che è ciò che le risposte dovrebbero fare. Puoi espandere la tua risposta in modo che qualcuno possa vedere come fare la soluzione?
fixer1234

Grazie a @ fixer1234, l'ho modificato per includere il comando.
Asprise Support

1

L'uscita migliore e più semplice è da utilizzare pypdfocr non cambia il pdf

pypdfocr your_document.pdf

Alla fine ne avrai un altro your_document_ocr.pdf nel modo in cui lo vuoi con testo ricercabile. L'app non cambia la qualità dell'immagine. Aumenta leggermente la dimensione del file aggiungendo il testo di sovrapposizione.

Aggiornamento 3 novembre 2018:

pypdfocr non è più supportato dal 2016 e ho notato alcuni problemi a causa del mancato mentoring. ocrmypdf ( modulo ) fa un lavoro simile e può essere usato in questo modo:

ocrmypdf in.pdf out.pdf

Installare:

pip install ocrmypdf

o

apt install ocrmypdf

0

Provare Apache PDFBox per estrarre il contenuto di testo dal file PDF. In caso di utilizzo di immagini incorporate in file PDF ABBYY FineReader Engine CLI per Linux estrarre il testo.


Ho trovato ABBYY OCR molto carino, uno dei programmi meno efficaci che ho provato. Potrebbe essere adeguato con un'immagine veramente pulita del testo standard dei caratteri delle dimensioni tipiche del testo del corpo, senza caratteri misti, formati misti, layout complesso, grafica, linee, ecc.
fixer1234

Anche io ho provato, funziona bene. Ho dei dubbi, puoi aiutarmi?
Praveen Kumar K R

Se ciò di cui hai bisogno non è coperto in altre risposte qui, la cosa migliore da fare è porre la tua domanda. Ciò renderà l'esposizione a molti occhi.
fixer1234
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.