Comment extraire du texte avec OCR à partir d'un PDF sur Linux?


Réponses:


25

J'ai eu du succès avec le port Linux sous licence BSD du système OCR Cuneiform .

Aucun paquet binaire ne semble être disponible, vous devez donc le compiler à partir des sources. Assurez-vous que les bibliothèques ImageMagick C ++ sont installées pour prendre en charge essentiellement tous les formats d'image en entrée (sinon, il n'acceptera que le format BMP).

Bien qu’il semble être essentiellement non documenté, à l’exception d’un bref fichier README, j’ai trouvé les résultats de l’OCR assez bons. L' avantage est qu'il peut générer des informations de position pour le texte OCR au format hOCR , de sorte qu'il devient possible de replacer le texte à la position correcte dans une couche masquée d'un fichier PDF. De cette façon, vous pouvez créer des fichiers PDF "interrogeables" à partir desquels vous pouvez copier du texte.

J'ai utilisé hocr2pdf pour recréer des fichiers PDF à partir des fichiers PDF d'origine avec image uniquement et des résultats OCR. Malheureusement, le programme ne semble pas prendre en charge la création de fichiers PDF de plusieurs pages. Vous devrez donc peut-être créer un script pour les gérer:

#!/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"

Veuillez noter que le script ci-dessus est très rudimentaire. Par exemple, il ne conserve aucune métadonnée PDF.


Toute idée d'améliorer ce script pour ajouter une étape de vérification orthographique pour corriger les erreurs dans l'étape de reconnaissance?
Gökhan Sever

@ Gökhan Sever, entendez-vous ajouter une vérification orthographique interactive dans laquelle l'utilisateur est invité à remplacer les mots mal orthographiés / inconnus? Je pense que vous pourriez le faire en ajoutant quelque chose comme aspell check --mode=html "$base.html"dans le script juste après avoir exécuté cunéiforme.
Jukka Matilainen le

Ceci est une solution. Cependant, sans voir tout le contexte du texte, il est difficile d'apporter des corrections. Il serait plus agréable de voir une interface construite dans l'ocrfeeder.
Gökhan Sever

1
En passant, j'utilise tesseract pour la reconnaissance des caractères: en remplaçant la ligne cunéiforme par: tesseract "$ page" "$ base" hocr
Gökhan Sever

1
Petite correction: la ligne pour tesseract au moins pour les langues autres que l'anglais, ici par exemple l'allemand (= deu) est: `tesseract" $ page "" $ base "-l deu hocr` (bien sûr, vous devez supprimer le ``) .
Keks Dose

14

Voyez si pdftotext fonctionnera pour vous. Si ce n'est pas sur votre ordinateur, vous devrez installer le paquet poppler-utils

sudo apt-get install poppler-utils 

Vous pouvez également trouver la boîte à outils pdf .

Une liste complète des logiciels pdf ici sur wikipedia.

Edit: Puisque vous avez besoin de capacités d’OCR, je pense que vous devrez essayer une tactique différente. (c.-à-d. que je ne pouvais pas trouver un convertisseur linux pdf2text qui fasse de l'OCR).

  • Convertir le pdf en image
  • Numérisez l'image en texte à l'aide des outils de ROC

Convertir le pdf en image

  • gs: La commande ci-dessous devrait convertir un fichier PDF multipage en fichiers tiff individuels.

    gs -SDEVICE = tiffg4 -r600x600 -sPAPERSIZE = lettre -sOutputFile = nom_fichier_% 04d.tif -dNOPAUSE -dBATCH - nom_fichier

  • Utilitaires ImageMagik : Il existe d'autres questions sur le site SuperUser sur l'utilisation d'ImageMagik pour vous aider à effectuer la conversion.

    convertir foo.pdf foo.png

Convertir une image en texte avec OCR

Tiré de la liste de logiciels OCR de Wikipedia


2
Ce programme fonctionne-t-il également pour les documents manuscrits?
Ivo Flipse

1
Non, je ne pense pas qu'il dispose de capacités OCR. Il peut simplement extraire le texte incorporé dans le pdf. Man page: linux.die.net/man/1/pdftotext
nagul

Ouais, cela fonctionne pour les documents pdf qui viennent déjà avec le texte incorporé. Mon cas est exactement celui où il ne le fait pas.
Helder S Ribeiro

1
@ obvio171 Ajout de la meilleure option que j'ai pu trouver pour que l'OCR fonctionne dans votre cas.
Nagul

12

Google docs utilisera désormais l' OCR pour convertir vos documents image / pdf téléchargés en texte. J'ai eu un bon succès avec elle.

Ils utilisent le système OCR utilisé pour le gigantesque projet Google Books .

Toutefois, il convient de noter que seuls les fichiers PDF d’une taille de 2 Mo seront acceptés pour le traitement.

Mise à jour
1. Pour l’essayer, téléchargez un fichier PDF de moins de 2 Mo dans Google Docs à partir d’un navigateur Web.
2. Cliquez avec le bouton droit sur le document téléchargé et cliquez sur "Ouvrir avec Google Documents".
... Google Docs convertira en texte et en sortie dans un nouveau fichier portant le même nom, mais Google Docs sera saisi dans le même dossier.


La réponse n’est pas vraiment spécifique à Ubuntu, mais je tiens à vous remercier: solution BRILLANTE! :)
Pitto

C'était vraiment utile :) J'ai téléchargé un fichier de 50 Mo hier et cela a fonctionné. On dirait qu'ils ont augmenté la taille limite.
Gaurav

2

Geza Kovacs a créé un paquet Ubuntu qui est essentiellement un script utilisant hocr2pdfles suggestions de Jukka, mais qui accélère l’installation.

Extrait du message de Geza sur le forum Ubuntu avec des détails sur le paquet ...

Ajout du référentiel et installation dans Ubuntu

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

Exécuter ocr sur un fichier

pdfocr -i input.pdf -o output.pdf

Dépôt GitHub pour le code https://github.com/gkovacs/pdfocr/


2

Le meilleur et le plus simple moyen de l'utiliser pypdfocrest de ne pas changer le pdf

pypdfocr your_document.pdf

À la fin, vous en aurez une autre your_document_ocr.pdfcomme vous le souhaitez avec un texte interrogeable. L'application ne change pas la qualité de l'image. Augmente un peu la taille du fichier en ajoutant le texte de surimpression.

Mise à jour du 3 novembre 2018:

pypdfocrn'est plus pris en charge depuis 2016 et j'ai remarqué quelques problèmes dus au fait que je n'étais pas mentalisée. ocrmypdf( module ) fait un travail symiliaire et peut être utilisé comme ceci:

ocrmypdf in.pdf out.pdf

À installer:

pip install ocrmypdf

ou

apt install ocrmypdf

1

PDFBeads fonctionne bien pour moi. Ce fil de discussion " Convertir des images numérisées en un seul fichier PDF " m'a permis de démarrer rapidement. Pour numériser un livre noir et blanc, vous devez:

  1. Créez une image pour chaque page du PDF; l'un des exemples ci-dessus devrait fonctionner
  2. Génère une sortie hOCR pour chaque page; J'ai utilisé tesseract (mais notez que cunéiforme semble mieux fonctionner).
  3. Déplacez les images et les fichiers hOCR dans un nouveau dossier. les noms de fichiers doivent correspondre, donc fichier001.tif a besoin de fichier001.html, fichier002.tif fichier002.html, etc.
  4. Dans le nouveau dossier, exécutez

    pdfbeads * > ../Output.pdf
    

Cela placera le PDF assemblé, en mode OCR dans le répertoire parent.


1

un autre script utilisant 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

Asprise OCR Library fonctionne sur la plupart des versions de Linux. Il peut prendre une entrée et une sortie PDF en tant que recherche PDF.

C'est un paquet commercial. Téléchargez un exemplaire gratuit du logiciel Asprise OCR SDK pour Linux ici et lancez-le ainsi:

aocr.sh input.pdf pdf

Remarque: le «pdf» autonome spécifie le format de sortie.

Déni de responsabilité: Je suis un employé de la société produisant le produit ci-dessus.


Cet article indique que le produit peut le faire, ce qui est un indice utile qui devrait être publié en tant que commentaire. Cela n'explique pas comment résoudre le problème, c'est ce que les réponses devraient faire. Pouvez-vous développer votre réponse afin que quelqu'un puisse voir comment faire la solution?
Fix1234

Merci @ fix1234, je l'ai modifié pour inclure la commande.
Soutien aux entreprises

0

Essayez Apache PDFBox pour extraire le contenu textuel d'un fichier PDF. Dans le cas d'images incorporées dans des fichiers PDF, utilisez CLI d'AbBYY FineReader Engine pour Linux pour extraire du texte.


J'ai trouvé ABBYY OCR assez pitoyable, l'un des programmes les moins performants que j'ai essayés. Cela pourrait être suffisant avec une image très nette du texte de police standard de la taille du corps du texte, sans polices mélangées, tailles mixtes, présentation complexe, graphiques, lignes, etc.
fix1234

Ya j'ai aussi essayé, ça marche bien. J'ai un doute, pouvez-vous m'aider?
Praveen Kumar KR

Si ce dont vous avez besoin n’est pas couvert par d’autres réponses ici, la meilleure chose à faire est de poser votre propre question. Cela le rendra exposé à beaucoup d'yeux.
fix1234
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.