web-dev-qa-db-fra.com

Comment transformer un pdf en pdf consultable en texte?

J'ai un certain nombre de documents scannés en pdf et je veux pouvoir les chercher. Comment puis je faire ça?

Essentiellement, je dois OCR le pdf, puis fusionner le texte extrait dans un nouveau pdf. J'ai essayé sans succès différentes solutions (y compris celles trouvées dans Ajout d'informations OCR à un fichier PDF ).

  1. pdfocr (qui me donne ce problème: https://github.com/gkovacs/pdfocr/issues/7 )
  2. pdfsandwich (dont le centre de logiciel dit que c'est un mauvais paquet et que je ne devrais pas l'installer)
  3. OCRfeeder (dans le centre du logiciel) exporte régulièrement, mais ne réagit pas lors de l'exportation au format PDF.
  4. Gscan2pdf exporte une image entièrement noire (mais interrogeable) comme indiqué dans cette discussion .
  5. Je ne pense pas que le visualiseur Pdfxchange puisse gérer l'ocr à la volée sur des fichiers de plus de 500 pages.

Existe-t-il un logiciel que je ne connais pas? Ou un script qui fait ça?

17
don.joey

Ubuntu <16.04

Suite au commentaire de Glutanimate, j'ai trouvé une solution efficace. C'est le script OCRmyPDF .

git clone https://github.com/jbarlow83/OCRmyPDF
cd OCRmyPDF
sh ./OCRmyPDF.sh -h  # to see the usage

Si vous recevez un message vous invitant à installer GNU parallèle. Cela peut être fait (après https://askubuntu.com/a/298598/115155 ) avec (la deuxième ligne est facultative et dépend de votre version et de votre version):

Sudo apt-get install parallel
Sudo rm /etc/parallel/config

Enfin, vous pouvez OCR votre pdf avec la commande:

sh ./OCRmyPDF.sh input.pdf output.pdf  # change input and output to the files you want

Si la commande semble ne pas répondre, vous pouvez augmenter la verbosité à l'aide de l'indicateur -v (qui peut être utilisé de manière incrémentielle comme -vv ou -vvv). Il serait peut-être préférable de tester d'abord les résultats sur un fichier PDF plus court. Vous pouvez raccourcir un pdf comme suit:

pdftk A=input.pdf cat A1-5 output output.pdf

Ubuntu> = 16.04

Depuis Ubuntu 16.04, OCRmyPDF est disponible via apt. Il suffit de courir

Sudo apt install ocrmypdf
ocrmypdf -h   # to see the usage

Enfin, vous pouvez OCR votre pdf avec la commande:

ocrmypdf input.pdf output.pdf  # change input and output to the files you want

Si la commande semble ne pas répondre, vous pouvez augmenter la verbosité à l'aide de l'indicateur -v (qui peut être utilisé de manière incrémentielle comme -vv ou -vvv). Il serait peut-être préférable de tester d'abord les résultats sur un fichier PDF plus court. Vous pouvez raccourcir un pdf comme suit:

pdftk A=input.pdf cat A1-5 output output.pdf

Si vous avez des questions, jetez un coup d'oeil au nouveau Github Repo .

11
don.joey

pdfsandwich effectue exactement ce travail. Je ne savais pas qu'il y avait un paquet fourni dans le centre logiciel, mais je fournis les paquetages deb Ubuntu pour cela sur le site Web du projet (voir http://www.tobias-elze.de/pdfsandwich/ pour plus de détails), y compris la version la plus récente (0.1.2), qu’il est peu probable de trouver dans un centre de logiciel pour le moment.

Si vous avez un fichier numérisé scanned_file.pdf, appelez simplement

pdfsandwich scanned_file.pdf

qui génère le fichier scanned_file_ocr.pdf avec le texte reconnu ajouté aux pages numérisées.

Par rapport à la plupart des solutions existantes, il détecte automatiquement la version de tesseract installée et adapte son comportement en conséquence. En outre, il effectue un prétraitement des images numérisées avant le processus d'OCR, tel que le désalignement, l'élimination des bords sombres, etc., ce qui peut améliorer considérablement la reconnaissance optique des caractères.

AVERTISSEMENT: Je suis le développeur de pdfsandwich et donc fortement biaisé.

4
Tobias Elze

@ don.joey a répondu avec le script ocrmypdf. Cependant, il peut être installé directement maintenant (à partir de 16.10).

Sudo apt install ocrmypdf

Ensuite, vous devez installer les tesseract langues dont vous avez besoin.

Pour répertorier les langues déjà présentes dans votre système, tapez:

tesseract --list-langs

Si vous en manquez un, installez-le. Par exemple,

Sudo apt install tesseract-ocr-spa

Vous pouvez maintenant créer un PDF interrogeable (dont la qualité varie en fonction du document numérisé) à l'aide de la commande suivante

ocrmypdf -l 'spa' old.pdf new.pdf

Vous pouvez bien sûr consulter sa page de manuel pour des options supplémentaires.

4
Ludenticus

OS: Ubuntu 18.04

Commencez par installer tesseract-ocr avec:

apt-cache show tesseract-ocr
Sudo apt-get update && Sudo apt-get upgrade
apt-get install tesseract-ocr --print-uris
apt-get install tesseract-ocr
Sudo !!

Si vous utilisez une langue autre que l'anglais avec tesseract, vous devrez installer le package correspondant de laguage. Par exemple pour le portugais, vous devrez faire:

Sudo apt-get install tesseract-ocr-por

Sinon, vous aurez l'erreur:

Error opening data file /usr/share/tesseract-ocr/4.00/tessdata/por.traineddata
Please make sure the TESSDATA_PREFIX environment variable is set to your 
"tessdata" directory.
Failed loading language 'por'
Tesseract couldn't load any languages!
Could not initialize tesseract.

Si vous "tesseract PDF" sur Google, vous trouverez probablement ceci message quelque peu obsolète . Cependant, cela vous donne des indications utiles. Vous devrez d’abord convertir votre fichier .pdf en un .tiff. Courir:

convert -density 125 originalfile.pdf -depth 8 -alpha Off newfile.tiff

Si, comme dans le message obsolète, vous oubliez d'ajouter alpha -Off, vous obtiendrez l'erreur suivante:

Tesseract Open Source OCR Engine v4.0.0-beta.1 with Leptonica
Error in pixReadFromTiffStream: spp not in set {1,3,4}

Maintenant, vous pouvez exécuter la commande finale. Dans le cas particulier où votre PDF d'origine est en portugais, vous aurez besoin de cette commande:

tesseract -l por newfile.tiff output pdf 

Le fichier généré s'appellera output.pdf. Si, par exemple, votre PDF est en français, après avoir installé le tesseract-ocr-fra correspondant, vous exécuterez:

tesseract -l fra newfile.tiff output pdf 

Et le fichier désiré sera, encore une fois, output.pdf.

0
evaristegd

OCRfeeder a un bogue dans

/usr/lib/python2.7/dist-packages/reportlab/pdfgen/textobject.py

la ligne 436 devrait se lire comme suit:

            lines = asUnicode(stuff).strip().split('\n')
# bug here, was:
#            lines = '\n'.split(asUnicode(stuff).strip())

cela a changé et cela a fonctionné pour moi

0
AndreR