Comment puis-je convertir un file PDF scanné avec du text OCR à un text sans text OCR?

J'ai un file PDF scanné , avec du text OCR de faible qualité.

Je voudrais avoir un file PDF sans le text OCRed.

Comment puis-je convertir un PDF numérisé avec du text OCRed sans text OCRed?

Je réfléchis aux moyens de récupérer le file PDF numérisé original avant la reconnaissance OCR autant que possible sans modifier la largeur et la hauteur de chaque page en pixels et sans changer les pixels par pouce de chaque page?

Est-ce qu'une sorte de rastérisation aide encore? La rastérisation perd-elle encore la qualité de l'image?

Plusieurs attmepts:

  1. J'utilise l'printing pour classr dans Evince, qui je pense utilise cups-pdf , il ne supprime pas le text OCRed.
  2. La command suivante utilisant gs ne supprime pas non plus le text OCRed (je pense que je n'ai pas trouvé comment utiliser correctement gs ):

     gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 \ -dNOPAUSE -dQUIET -dBATCH -sOutputFile=out.pdf toc.pdf 

    Voici comment je supprimerais le text OCR-ed si je devais …

    Tout d'abord, vous devez savoir que le text OCR-ed dans un file PDF n'est pas une couche , mais un mode de rendu de text spécial. La capture d' écran suivante de la spécification PDF officielle répertorie tous les modes de rendu de text disponibles:

    Pour plus d'informations, s'il vous plaît voir ces réponses de la mine sur StackOverflow:

    • "Comment pouvons-nous rendre visible le text invisible?"
    • "Création de" text "dans OCR-ed PDF"

    Maintenant pour la procédure j'imagine:

    0. Effectuez une sauvegarde de votre file PDF d'origine

    'nuff a dit …

    1. Utilisez qpdf pour décompresser la plupart des objects PDF

    qpdf est un outil de command line magnifique pour transformer la plupart des files PDF en une forme qui facilite la manipulation à travers un éditeur de text (ou via sed ):

     qpdf \ --qdf \ --object-streams=disable \ input.pdf \ editable.pdf 

    2. Rechercher des spots où le code PDF contient 3 Tr

    Tous les points dans le editable.pdf où il y a du text "invisible" (aka ni rempli ni caressé ) est marqué par une définition initiale de

     3 Tr 

    Changez-les pour lire maintenant

     1 Tr 

    Cela devrait rendre le text précédemment masqué visible. Les glyphes apparaissent dans des contours épais, superposant les images de la page numérisée originale.

    Ça aura l'air très laide.

    Sauvegardez le PDF édité.

    3. Changez les opérateurs de caracteres text Tj et TJ en 'no-ops'

    Chaque fois qu'une string de text est préparée pour être rendue, l'opérateur réel qui est responsable de le faire est nommé Tj ou TJ .

    Attention à tous ceux-ci. Remplacez-les par tJ et tj . Cela va les transformer en «no-ops»: ils n'ont aucune signification dans le code source PDF; aucune visionneuse PDF ou processeur ne les "comprendra". (Veillez à ne pas modifier le nombre d'octets lors du rlocation de contenu dans le code source PDF, sinon vous risquez de le "corrompre".)

    Sauvegardez le file PDF.

    4. Vérifiez l'apparence du file PDF

    Le file PDF devrait maintenant ressembler à "nettoyer". Les opérateurs de text renommés n'ont plus aucune signification pour le visualiseur PDF, ni pour un interpréteur PDF.

    5. Utilisez Ghostscript pour créer le file PDF final

    Cette command devrait réaliser ce que vous voulez:

     gs \ -o final.pdf \ -sDEVICE=pdfwrite \ -dPDFSETTINGS=/prepress \ editable.pdf 

    Cette dernière étape utilise editable.pdf comme input. Il produit final.pdf . La sortie aura supprimé toutes les traces de text. L'input contenait toujours le text, bien que sous une forme "inutilisable", car l'opérateur renommait. Comme Ghostscript ne comprend pas les opérateurs renommés, il les saute simplement par défaut.

    Il existe plusieurs façons de se débarrasser du text OCRed dans le file.

    1. Exporter les images numérisées à partir du PDF et les recombiner. Vous pouvez utiliser pdfimages pour l'extraction (à partir du poppler-utils ) et convert (à partir d' imagemagick ) pour les reconvertir:

       pdfimages toc.pdf toctmp convert toctmp*.pbm newtoc.pdf 
    2. Imprimer au format PDF (avec support PDF de cups-pdf )

    PDF est un format horrible pour les images numérisées, mais assez souvent utilisé parce qu'il peut inclure plusieurs pages dans un file. Le format de stockage est cependant souvent inapproprié (pour les scans) au format JPEG. La récupération des images d'origine (il n'y a pas de file PDF numérisé original) à partir du PDF ne peut probablement pas être effectuée, car le PDF à partir des images numérisées est le plus souvent l'étape de réduction de la qualité après la numérisation. Vous pouvez essayer de récupérer les images du PDF avec pdfimage (ou pdftoppm ), mais le logiciel de reconnaissance pdftoppm qui fonctionne sur les images au format PDF sait déjà comment get les meilleures images (uniquement de qualité) de ces PDF, il est peu probable que vous puissiez le faire pour améliorer cela.

    Le problème réside probablement dans votre logiciel de numérisation, et non dans le logiciel OCR. Si vous avez toujours le matériel original, scannez celui-ci en TIFF multipage (lzw compressé) qui donne beaucoup mieux OCR que tout ce qui a été converti en PDF quand cela inclut JPEG.

    Lorsque j'ai essayé d'accéder plus tôt au lien vers votre file scanné , cela n'a pas fonctionné pour moi. Cependant, pendant ce time, je l'ai téléchargé et regardé de plus près.

    1. Utilisation de pdfimages -list pour étudier les images incorporées

    Si vous exécutez une version récente (!) De la variante pdfimages de pdfimages , le paramètre -list disponible. Ce paramètre imprime une list utile d'images contenues dans votre file PDF. Les versions les plus récentes vous diront également des informations supplémentaires (comme la résolution d'image et le taux de compression), qui n'étaient pas si facilement disponibles auparavant.

    Malheureusement, votre file PDF contient des erreurs de syntaxe, qui donnent cette sortie brouillée:

     kp@mbp:#175536> pdfimages -l 1 -list toc.pdf Syntax Warning: Couldn't link the profiles Syntax Warning: Can't create transform Syntax Warning: Couldn't link the profiles Syntax Warning: Can't create transform Syntax Warning: Couldn't link the profiles Syntax Warning: Can't create transform Syntax Warning: Couldn't link the profiles Syntax Warning: Can't create transform page num type width height color comp bpc enc interp objectID x-ppi y-ppi size ratio -------------------------------------------------------------------------------------- 1 0 image 2000 2650 icc 1 1 jbig2 no 51 0 300 300 12.4K 1.9% 

    <stderr> sortie <stderr> vers /dev/null et réessayons:

     kp@mbp:#175536> pdfimages -list toc.pdf 2>/dev/null page num type width height color comp bpc enc interp objectID x-ppi y-ppi size ratio -------------------------------------------------------------------------------------- 1 0 image 2000 2650 icc 1 1 jbig2 no 51 0 300 300 12.4K 1.9% 2 1 image 2012 2659 icc 1 1 jbig2 no 616 0 300 301 16.1K 2.5% 3 2 image 2014 2661 icc 1 1 jbig2 no 696 0 301 300 16.0K 2.4% 4 3 image 2000 2650 icc 1 1 jbig2 no 778 0 300 300 16.2K 2.5% 5 4 image 2000 2650 icc 1 1 jbig2 no 855 0 300 300 16.2K 2.5% 6 5 image 2000 2650 icc 1 1 jbig2 no 938 0 300 300 15.7K 2.4% 7 6 image 2000 2650 icc 1 1 jbig2 no 1026 0 300 300 15.5K 2.4% 8 7 image 2022 2667 icc 1 1 jbig2 no 1103 0 300 300 15.7K 2.4% 9 8 image 2000 2650 icc 1 1 jbig2 no 1190 0 300 300 15.5K 2.4% 10 9 image 2011 2658 icc 1 1 jbig2 no 1271 0 300 301 15.7K 2.4% 11 10 image 2000 2650 icc 1 1 jbig2 no 1347 0 300 300 15.7K 2.4% 12 11 image 2010 2657 icc 1 1 jbig2 no 1429 0 300 300 15.5K 2.4% 13 12 image 2000 2650 icc 1 1 jbig2 no 1504 0 300 300 16.8K 2.6% 14 13 image 2000 2650 icc 1 1 jbig2 no 1589 0 300 300 15.4K 2.4% 15 14 image 2000 2650 icc 1 1 jbig2 no 1666 0 300 300 17.6K 2.7% 16 15 image 2010 2657 icc 1 1 jbig2 no 1740 0 300 300 18.7K 2.9% 17 16 image 2006 2654 icc 1 1 jbig2 no 1823 0 300 301 17.7K 2.7% 18 17 image 2007 2656 icc 1 1 jbig2 no 1905 0 300 300 16.9K 2.6% 19 18 image 2000 2650 icc 1 1 jbig2 no 1983 0 300 300 16.7K 2.6% 20 19 image 2000 2650 icc 1 1 jbig2 no 2065 0 300 300 17.4K 2.7% 21 20 image 2000 2650 icc 1 1 jbig2 no 2148 0 300 300 17.4K 2.7% 22 21 image 2011 2658 icc 1 1 jbig2 no 2229 0 300 301 17.2K 2.6% 23 22 image 2006 2654 icc 1 1 jbig2 no 2305 0 300 301 17.5K 2.7% 24 23 image 2000 2650 icc 1 1 jbig2 no 2377 0 300 300 14.5K 2.2% 

    Cette sortie signifie:

    • 24 images (numérotées de 0 à 23) sur 24 pages (chaque page 1 image).
    • Toutes les images ont des dimensions très similaires (largeur / hauteur) et une résolution de 300 PPI.
    • Toutes les images utilisent la même méthode de compression, JBIG2 .

    Ces résultats me donnent confiance pour suggérer une méthode différente pour supprimer le text OCR-ed de votre PDF:

    1. Extraire toutes les images.
    2. Créez un nouveau PDF à partir de ces images.

    2. Extrayez toutes les images du PDF

    Si vous disposez de l'une des versions pdfimages les plus récentes de pdfimages , vous pouvez extraire les images dans la compression JBIG2:

     pdfimages -jbig2 toc.pdf toc-- 

    Les files image résultants porteront les noms de file toc---000.jb2e , toc---000.jb2e , … (suffixe .jb2e ). Chacun de ces files devrait en avoir un autre, nommé toc---000.jb2g , toc---000.jb2g , … (suffixe .jb2g ).

    Si vous n'obtenez pas les images .jb2e , mais plutôt .pbm , vous devrez utiliser le converti d'ImageMagick pour créer des files JPEG:

     for i in toc--*.pbm; do convert $i ${i/.pbm/.jpg} done 

    Cependant, les images JPEG seront beaucoup plus grandes que celles de JBIG2. (Je l'ai essayé: les JPEG sont au total 15 MByte, les PBM sont au total 15 MBytes, JBIG2 sont au total 436 kBytes pour les 24 images!)

    3. Créez un nouveau PDF à partir des images extraites

    Si vous avez été malchanceux et avez dû convertir en JPEG, vous pouvez maintenant les convertir en un file PDF:

     convert toc--*.jpg -density out.pdf 

    Voila!, Vous avez maintenant un file PDF de 15 MByte sans le text OCR-ed, où vous aviez auparavant un file PDF de 1,6 MByte avec text OCR-ed! (Mais vous n'aurez pas perdu beaucoup de la qualité précédente …)


    Depuis mes propres pdfimages est compilé à partir de sources, je de time en time souffre d'un bug avec elle. En ce moment, il ne extrait pas correctement les images en tant que files JBIG2. C'est pourquoi je ne peux pas créer un PDF d'eux non plus. Mais la taille de ce PDF serait similaire à la toc.pdf originale de toc.pdf ….