Un PDF regorge d'images inutiles : logos, bordures, décorations. Les rendre lisibles coûte cher si on s'y prend mal. Voici la méthode pour ne payer que pour ce qui compte vraiment.
UN PDF, C'EST COMME UN LIVRE : IL Y A DES IMAGES PARTOUT
Quand on ouvre un PDF, on voit des pages remplies de texte et d'images. Certaines sont essentielles : un graphique qui montre l'évolution des ventes, un schéma qui explique une technique, une photo qui illustre un concept. D'autres sont juste du chrome : le logo de l'entreprise en haut de chaque page, une barre horizontale de 2 pixels, une puce décorative. Le problème ? Si on utilise un modèle d'IA pour lire toutes ces images, on va payer des dizaines de fois pour décrire la même chose.
Imaginez un rapport de 50 pages avec 1 logo par page. En utilisant un modèle de vision par IA pour chaque image, vous paierez 50 fois pour décrire. un logo. Alors que le vrai contenu utile se cache dans les 2 ou 3 graphiques du document. La solution ? Ne pas traiter toutes les images de la même façon.
LE FILTRE GRATUIT QUI ÉLIMINE 90% DES IMAGES INUTILES
Avant même de toucher à une image, il existe un filtre économique qui coûte presque rien. Ce filtre regarde plusieurs choses :
- • La taille de l'image : trop petite ? Trop grande ? On la saute.
- • La forme : si c'est une barre de 2 pixels de haut, c'est probablement juste une ligne décorative.
- • La répétition : si la même image apparaît sur 300 pages (comme un logo), on ne la lit qu'une fois.
Ce filtre ajoute une colonne worth_analyzing à la liste des images du PDF. Si la valeur est False, l'image est ignorée. Sinon, on passe à l'étape suivante. Cette étape seule supprime la majorité des images avant même d'utiliser un modèle d'IA.
CLASSER LES IMAGES : TEXTES, GRAPHIQUES OU PHOTOS ?
Une fois les images inutiles éliminées, il faut comprendre ce que contiennent les autres. Un screenshot d'un tableau est en fait du texte. Un graphique en courbes n'est pas du texte, mais ses axes et ses tendances le sont. Une photo de paysage n'est ni l'un ni l'autre.
Pour faire cette distinction, on utilise un classificateur qui analyse les pixels de l'image sans avoir besoin d'IA coûteuse. Il regarde :
- • La variation des couleurs : un logo en deux couleurs a peu de variations.
- • La saturation : une photo est souvent très colorée, un texte est moins saturé.
- • La densité des bords : un graphique a des lignes nettes, un fond blanc uniforme n'en a pas.
- • La dispersion des valeurs de pixels : un panneau vide a une dispersion quasi nulle, même avec du bruit numérique.
Le classificateur attribue un type à chaque image : decorative, text, chart, diagram, photo, ou None. Ce type va déterminer comment on va lire l'image ensuite.
POUR LES IMAGES DE TEXTES : L'OCR, LA SOLUTION GRATUITE ET RAPIDE
Si l'image est classée comme text, c'est qu'elle contient du texte imprimé : un tableau scanné, un screenshot de texte, une légende. Dans ce cas, pas besoin d'IA coûteuse : on utilise un OCR (Optical Character Recognition). L'OCR lit le texte pixel par pixel et le transforme en texte lisible par une machine.
Deux Outils populaires existent : EasyOCR (utilisé ici) et Tesseract. L'OCR est gratuit, rapide (quelques millisecondes) et surtout, il ne invente pas de mots. C'est parfait pour les textes imprimés.
Le piège ? L'écriture manuscrite. Un OCR classique est formé pour lire du texte imprimé, pas de l'écriture à la main. La solution ? Vérifier la confiance de l'OCR. Si l'OCR n'est pas sûr à 100%, on passe à l'étape suivante : un modèle de vision.
Exemple de code pour l'OCR :
from docintel.parsing.pdf.easyocr import easyocr_read
texteocr = easyocrread(image_path)
confiancemoyenne = texteocr['confiance_moyenne']
if confiance_moyenne > 0.9:
return texte_ocr['texte']
else:
# Passer au modèle de vision
return None
POUR LES GRAPHIQUES, DIAGRAMMES ET PHOTOS : L'IA QUI DÉCRIT CE QU'ELLE VOIT
Si l'image est classée comme chart, diagram ou photo, c'est qu'elle contient une information visuelle importante. Un graphique en courbes montre une tendance. Un schéma explique une architecture. Une photo illustre un concept. Dans ces cas-là, aucun OCR ne peut lire l'information : il faut un modèle de vision par IA.
Le modèle va décrire l'image en une phrase claire. Par exemple :
- • « Un graphique en courbes montrant l'évolution des prix des matières premières depuis 2022, avec une hausse puis une stabilisation après le 3ème trimestre »
- • « Le schéma de l'architecture Transformer, composé d'un encodeur de N couches empilées alimentant un décodeur »
Cette phrase devient du texte lisible, que l'on peut rechercher ou utiliser dans un système de questions-réponses. C'est le seul cas où l'IA est vraiment indispensable.
Le modèle utilisé ici s'appelle docintel.core.analyze_image. Il prend en entrée l'image et un prompt adapté au type d'image :
- • Pour un graphique : « Décris les axes, les unités et la tendance »
- • Pour un schéma : « Décris les composants et leurs connexions, en transcrivant chaque étiquette »
- • Pour un tableau en image : « Retourne les lignes sous forme de tableau markdown »
- • Pour une photo : « Décris ce que tu vois »
Le coût de ce modèle est élevé, c'est pourquoi on ne l'utilise que pour les images vraiment utiles.
LES IMAGES À L'HORIZONTALE : LE PIÈGE QUI FAIT ÉCHOUER L'OCR ET L'IA
Un détail technique important : parfois, une image est tournée de 90 degrés pour s'adapter à la page. Par exemple, un tableau large posé en paysage sur une page en portrait. Dans ce cas, la page indique que l'image est droite (rotation à 0°), mais l'image elle-même est inclinée.
Si on ne corrige pas cette rotation, l'OCR va lire du bruit et le modèle de vision va interpréter l'image de travers. La solution ? Avant de lire l'image, on vérifie son angle de placement et on la remet à l'endroit. Pour les scans où la rotation est déjà dans les pixels, on essaie les quatre rotations possibles (0°, 90°, 180°, 270°) et on garde celle qui donne le meilleur résultat.
LE CAS DES IMAGES DÉCORATIVES : RIEN À FAIRE, RIEN À PAYER
Les images classées comme decorative sont des panneaux vides, des fonds uniformes, ou des éléments graphiques sans contenu informatif. Elles gardent leur slot de texte vide : elles ne seront jamais lues, jamais décrites, et ne coûteront rien. C'est là que finissent la plupart des images d'un document propre.
Exemple : un panneau noir uni en haut de page, une barre de séparation, une puce décorative. Aucune de ces images ne contient d'information utile à extraire.
LA CASCADE EN UNE SEULE TABLE : COMMENT ÇA MARCHE EN PRATIQUE
Toutes ces étapes forment une cascade de traitement : une série d'étapes où chaque image passe par un filtre, puis un classificateur, puis soit l'OCR, soit le modèle de vision. Voici comment ça s'organise :
Voici la table qui résume la cascade :
| Type d'image | Méthode | Coût | Résultat |
|---|---|---|---|
| Trop petite / mal formée / répétée | Filtre initial (taille, forme, répétition) | Gratuit | Image ignorée |
| Panneau vide / uniforme | Classificateur (dispersion des pixels) | Gratuit | Image ignorée |
| Texte imprimé (tableau, screenshot) | OCR (EasyOCR ou Tesseract) | Gratuit | Texte exact extrait |
| Graphique / Diagramme / Photo | Modèle de vision (docintel.core.analyze_image) | Payant | Description textuelle de l'image |
Seules les images du dernier type coûtent de l'argent. Tout le reste est traité gratuitement ou ignoré.
LE CODE QUI FAIT TOUT ÇA : UNE SEULE LIGNE POUR TRAITER UN PDF
En pratique, le traitement se fait en deux étapes :
- Étape 1 : Localiser les images
On utiliseparse_pdfpour obtenir une liste de toutes les images du PDF, avec leur position, leur taille et un hash de leur contenu. Cette liste s'appelleimage_df.parsed = parse_pdf("data/paper/1706.03762v7.pdf") # parsed['image_df'] contient la liste des images - Étape 2 : Les rendre lisibles
On utilisedescribeimagedfpour appliquer la cascade à chaque image. Cette fonction ajoute trois colonnes àimage_df:worth_analyzing: Vrai si l'image vaut le coup d'être lueimage_type: Le type de l'image (text, chart, etc.)description: Le texte extrait, soit par OCR, soit par le modèle de visionprompt: Le prompt envoyé au modèle (None pour OCR ou skip)
enriched = describeimagedf(parsed["imagedf"], pdfpath="data/paper/1706.03762v7.pdf") # Afficher les 5 premières lignes enrichies enriched[["pagenum", "worthanalyzing", "image_type", "description", "prompt"]].head()
UN EXEMPLE CONCRET : CE QUE DONNE LA CASCADE SUR UN VRAI DOCUMENT
Prenons le NIST AI 100-1, un document public du gouvernement américain sur la gestion des risques liés à l'IA. Dans une application de bureau qui utilise cette cascade, l'onglet « Images » montre :
- • Toutes les images localisées dans le document
- • Les images sélectionnées (celles marquées
worth_analyzing=True) - • Pour chaque image sélectionnée, la description générée par le modèle de vision (ex : « Diagramme de l'architecture Transformer »)
- • La possibilité de modifier manuellement la description si le modèle s'est trompé
Cette interface permet de voir exactement ce qui a été extrait, et de corriger les erreurs. Par exemple, si l'OCR a mal lu un tableau, on peut relancer l'OCR ou forcer l'utilisation du modèle de vision.
POURQUOI CETTE MÉTHODE ÉCONOMISE DES CENTAINES D'EUROS
Imaginons un rapport de 100 pages avec :
- • 1 logo par page (100 logos)
- • 5 graphiques ou diagrammes utiles
Avec une méthode naïve qui lit toutes les images avec un modèle de vision :
- • Coût : 105 appels au modèle de vision (100 logos + 5 graphiques)
- • Temps : 105 × temps par appel
- • Résultat : 100 descriptions de logos inutiles
Avec la cascade proposée ici :
- • Coût : 5 appels au modèle de vision (seulement les graphiques)
- • Temps : 5 × temps par appel
- • Résultat : 5 descriptions utiles
UNE IMAGE, UN SEUL MODÈLE : LA RÉUTILISATION INTELLIGENTE
Autre économie majeure : si une image apparaît plusieurs fois dans le document (par exemple, un schéma de référence répété dans plusieurs sections), la cascade ne lit l'image qu'une seule fois. Le hash du contenu permet de détecter les doublons. La description générée est ensuite réutilisée pour toutes les occurrences de l'image.
Exemple : un schéma d'architecture apparaît sur 10 pages. La cascade lit l'image une fois, génère une description, et cette description est attribuée aux 9 autres occurrences. Résultat : 1 appel au modèle au lieu de 10.
LA CASCADE EST MODULAIRE : ON PEUT L'EXÉCUTER À LA DEMANDE
La cascade n'est pas obligatoire au moment de la lecture du PDF. On peut choisir de l'exécuter :
- • Au moment de la lecture (pour un petit corpus)
- • Plus tard, uniquement sur les images nécessaires pour une requête spécifique
Cette flexibilité est cruciale. Pourquoi lire toutes les images d'un PDF de 500 pages si on ne cherche que l'information sur les « résultats financiers de 2023 » ? La cascade permet de ne traiter que les images liées à cette requête.
CE QUE LA CASCADE NE FAIT PAS (ET CE QU'IL FAUDRA LIRE ENSUITE)
Cette cascade résout le problème de comment lire les images de manière économique. Mais elle ne répond pas à la question de quand les lire. Deux cas de figure :
- • Lecture immédiate : on lit toutes les images utiles dès le chargement du PDF. C'est simple, mais coûteux si le document est gros.
- • Lecture à la demande : on lit d'abord le texte simple du PDF. Quand on tombe sur une référence comme « Voir la Figure 3 », on lit alors la Figure 3. Cette méthode s'appelle parsing adaptatif et fera l'objet d'un prochain article.
La cascade présentée ici est l'outil. Le choix de la politique d'exécution (quand lire quoi) est un autre sujet, traité dans l'Article 10.
UN PETIT MODÈLE D'IA QUI CHANGE LA DONNE : TINYGPT-V
Pour les projets qui veulent éviter les coûts élevés des gros modèles de vision, il existe des alternatives comme TinyGPT-V. Ce modèle est conçu pour tourner sur une seule carte GPU, ce qui réduit considérablement les coûts. Il est moins puissant que les géants comme GPT-4 Vision, mais il peut suffire pour des tâches simples de description d'images.
AU-DELÀ DES PDF : LES MÊMES PRINCIPES S'APPLIQUENT À TOUT DOCUMENT SEMI-STRUCTURÉ
Cette méthode n'est pas limitée aux PDF. Elle s'applique à tous les documents semi-structurés ou non structurés où l'information utile se cache dans des images :
- • Factures scannées avec des logos et des tableaux
- • Articles scientifiques avec des graphiques et des schémas
- • Présentations PowerPoint avec des images et des diagrammes
Le principe reste le même : filtrer ce qui ne sert à rien, classer ce qui reste, et utiliser l'outil adapté (OCR ou modèle de vision) uniquement pour ce qui en vaut la peine.
STRUCTURER LES DOCUMENTS LÉGAUX : LES GRAPHES DE CONNAISSANCE POUR MIEUX RÉPONDRE
Une autre approche pour améliorer la précision des réponses automatiques est de structurer les documents légaux sous forme de graphes de connaissance. Un graphe de connaissance est comme une carte mentale où chaque concept est un nœud, et les relations entre concepts sont des arêtes. Par exemple :
- • « Article 42 » → « concerne » → « responsabilité civile »
- • « Responsabilité civile » → « implique » → « dommage matériel »
En transformant un document en graphe, un système de questions-réponses peut naviguer entre les concepts et donner des réponses plus précises. Cette méthode est particulièrement utile pour les contrats, les lois et les règlements.
AGENTS, LLMS, RAG : LE GUIDE POUR DÉBUTER
Pour ceux qui veulent aller plus loin, il existe des guides pratiques pour comprendre et utiliser :
- • Les agents : des programmes autonomes qui effectuent des tâches
- • Les LLM (Large Language Models) : les modèles de langage comme moi
- • Le RAG (Retrieval-Augmented Generation) : un système qui combine recherche et génération de texte
- • Le fine-tuning : l'adaptation d'un modèle à une tâche spécifique
- • LangChain : une bibliothèque pour construire des applications avec des LLM
Ces outils permettent de créer des systèmes intelligents capables de comprendre et de répondre à des questions complexes, en s'appuyant sur des documents ou des bases de connaissances.
LE CONTEXT ENGINEERING : BOOSTER VOS SYSTÈMES DE QUESTIONS-RÉPONSES
Une technique récente pour améliorer les systèmes de questions-réponses est le context engineering. L'idée est de fournir au modèle non pas le document brut, mais une version enrichie et structurée de ce document. Par exemple :
- • Extraire les titres et sous-titres pour créer une hiérarchie claire
- • Identifier les entités (noms, dates, lieux) et les marquer
- • Ajouter des résumés aux paragraphes longs
En donnant au modèle un contexte mieux organisé, on améliore la qualité des réponses sans avoir à entraîner un nouveau modèle.
LE VERDICT : UNE MÉTHODE QUI FAIT ÉCONOMISER TEMPS ET ARGENT
Cette cascade de traitement des images dans les PDF est une solution efficace, économique et modulaire. Elle permet de :
- • Éliminer 90% des images inutiles avant même d'utiliser de l'IA
- • Utiliser l'OCR gratuit pour les textes imprimés
- • Réserver les modèles de vision coûteux uniquement pour les graphiques et photos
- • Réutiliser les descriptions pour les images répétées
- • Adapter le traitement au besoin (immédiat ou à la demande)
La prochaine étape ? Décider quand appliquer cette cascade. Faut-il tout lire dès le début, ou attendre qu'une question précise nous guide ? C'est le sujet de l'Article 10, qui abordera le parsing adaptatif.
- Towards Data Science
L'indépendance de CLODCO est votre garantie.
Pour que l'actualité de l'IA reste sans filtre et sans concession, votre soutien est indispensable. Votre contribution est le seul moteur de notre liberté éditoriale.
Soutenir CLODCO


