Beaucoup d’archives municipales, de délibérations et de dossiers associatifs en Hauts-de-France existent surtout en PDF scannés. Sans OCR, votre RAG indexe du vide : l’assistant répond à côté ou invente. Ce tutoriel suit le chemin complet — détecter le scan, extraire le texte, contrôler la qualité, puis brancher le résultat sur votre pipeline d’indexation — avec des commandes de principe et des gestes de vérification que vous pourrez refaire sur un lot réel.
Plan du tutoriel
Huit repères : (1) pourquoi le scan casse le RAG, (2) détecter l’absence de texte, (3) choisir un outil d’OCR, (4) pipeline de principe, (5) qualité et pièges français, (6) intégration vers Open WebUI ou un index vectoriel, (7) scène archives à Arras, (8) checklist avant production. Pour les réglages RAG une fois le texte propre, croisez RAG dans Open WebUI. Pour savoir si les réponses tiennent, évaluer la qualité du RAG. Le glossaire RAG rappelle le principe recherche puis rédaction.
Le problème : le RAG ne « voit » pas l’image
Un système RAG classique découpe du texte, calcule des embeddings, récupère des passages, puis demande à un modèle de rédiger. Si votre fichier est un scan sans couche texte, l’extracteur renvoie une chaîne vide ou des caractères parasites. L’index est creux. La question d’un agent municipal (« Quelle était la décision sur le stationnement rue X ? ») tombe dans le vide : le modèle invente, ou répond qu’il ne sait pas, sans que vous ayez compris que le document n’a jamais été lu.
En Hauts-de-France, le cas est fréquent : délibérations scannées des années 1990-2010, dossiers d’urbanisme photographiés, PV d’associations numérisés à la va-vite. Le geste utile n’est pas « ajouter plus de GPU ». C’est d’abord de produire un texte fidèle, page par page, avant toute indexation. Sans cette étape, vous optimisez un moteur qui cherche dans du silence.
Détecter les scans dans un lot
Avant d’OCRiser tout un serveur, classez. Un script ou un outil d’extraction (pdftotext, une bibliothèque Python de lecture PDF) vous dit si une page renvoie du texte utile. Fixez un seuil pragmatique : peu de caractères alphabétiques par page, ou ratio image/texte élevé, et la page part en file OCR. Gardez une liste des fichiers traités, des refus, et des pages douteuses. Ce journal évite de relancer dix fois le même lot.
Côté matériel, l’OCR classique (Tesseract) tourne souvent correctement sur CPU pour des volumes modestes. Les approches plus lourdes (Docling, modèles de vision) demandent davantage de ressources : parlez en ordre de grandeur et testez sur dix pages avant de lancer une nuit complète. IAHDF ne publie pas de mesure VRAM de laboratoire : lisez la fiche de l’outil le jour J.
Choisir l’outil d’OCR
Tesseract / ocrmypdf
Piste stable pour produire un PDF avec couche texte, surtout en français avec le paquet de langue adapté.
- Commandes de principe documentées depuis longtemps ; vérifiez la version installée.
- Bon réflexe pour archives administratives et scans propres.
- Limites sur mises en page très complexes ou écriture manuscrite.
Docling et pipelines structurés
Utile quand vous voulez plus qu’une couche texte : structure, tableaux, enchaînement vers un index.
- Lisez la doc officielle pour l’installation et les options du jour.
- Testez sur un échantillon représentatif de vos archives HdF.
- Ne supposez pas une qualité magique sur tout type de scan.
OCR par modèle de vision
Parfois pertinent pour pages difficiles, mais plus coûteux en machine et plus délicat à auditer.
- Copiez le tag du modèle depuis la doc officielle (Ollama, Hugging Face…) le jour J.
- Comparez toujours avec un OCR classique sur les mêmes pages.
- Gardez une relecture humaine sur les passages sensibles.
Pipeline : de l’image au texte indexable
Six étapes du scan à l’index
Inventorier et copier hors production
Réunissez un lot représentatif : quelques délibérations, un règlement scanné, un courrier administratif. Travaillez sur des copies, jamais sur l’unique original numérique. Retirez les pages qui contiennent des données personnelles inutiles au test. Notez provenance, date approximative et qualité visuelle (contraste, biais, tampon). Ce dossier d’essai servira aussi pour l’évaluation du RAG plus tard. Sans inventaire, vous ne saurez pas pourquoi une réponse a échoué. Classez aussi les fichiers refusés pour OCR dans un sous-dossier dédié, afin de ne pas les réinjecter par erreur lors d’un prochain lot nocturne sur les archives municipales.
Mesurer l’extractibilité avant OCR
Passez un extracteur de texte naïf sur chaque fichier. Classez « déjà texte », « mixte », « image pure ». Pour les mixtes, décidez page par page : inutile d’OCRiser une page déjà textuelle si cela dégrade la couche existante. Documentez la règle dans un fichier README d’équipe. Ce geste simple évite les doubles couches illisibles et les doublons dans l’index vectoriel. Notez le logiciel d’extraction et sa version dans le README du lot : sans cela, deux agents d’Arras compareront des résultats incomparables trois mois plus tard.
Lancer l’OCR avec la langue française
Installez le paquet de langue français pour Tesseract, ou activez l’équivalent dans votre outil. Lancez d’abord sur trois pages. Relisez à voix haute les noms propres locaux (rues, communes, sigles d’intercommunalité). Si les accents sautent ou si les « l » deviennent des « 1 », ajustez le prétraitement (contraste, deskew) avant de tout lancer. Les versions d’outils bougent : notez celle que vous utilisez. Si un toponyme local revient systématiquement déformé, ajoutez-le à un lexique de post-correction plutôt que d’accepter une base knowledge illisible pour les élus.
Nettoyer sans réécrire le fond
Corrigez les artefacts évidents (traits de scan, en-têtes répétés, coupures de mots en fin de ligne) avec des règles reproductibles. N’inventez pas une phrase manquante « pour faire joli ». Si un tampon masque une date, marquez [illisible] plutôt que de deviner. Le RAG amplifie ce que vous mettez dans l’index : une date inventée aujourd’hui devient une hallucination officielle demain. Toute date incertaine doit rester marquée comme telle : mieux vaut un trou signalé qu’une fausse décision de conseil municipal qui circulera dans le chat interne.
Exporter un livrable stable
Générez un PDF avec couche texte sélectionnable, ou un fichier texte/markdown par document, selon ce que votre pipeline d’ingestion attend. Conservez le scan d’origine à côté pour audit. Nommez les fichiers de façon stable (année-organe-sujet). Ce livrable alimentera Open WebUI, LlamaIndex ou Qdrant sans surprise. Voir aussi RAG Python + Qdrant pour l’indexation code. Conservez le couple scan brut + PDF OCRisé sous le même identifiant stable ; l’audit d’une association de Valenciennes commence souvent par retrouver l’original. Documentez le résultat et passez à l’étape suivante sans empiler d’autres changements le même jour.
Tester une question réelle avant le big bang
Posez trois questions dont vous connaissez la réponse dans le document. Vérifiez que le passage revient et que la rédaction reste fidèle. Si le chunking coupe une décision en deux, ajustez la taille des segments après, pas avant d’avoir un texte propre. Une mairie d’Arras ou une asso de Valenciennes gagne plus à dix documents fiables qu’à mille scans muets indexés trop tôt. Archivez les trois questions et les réponses attendues dans le même dépôt que le corpus : elles serviront de non-régression après chaque ré-OCR.
Commandes de principe (à adapter)
Les commandes ci-dessous illustrent un geste courant avec ocrmypdf / Tesseract. La syntaxe exacte dépend de votre version et de votre système. Lisez la page man ou la documentation officielle avant de lancer un lot nocturne. IAHDF n’est affilié à aucun éditeur.
# Vérifier si un PDF a déjà du texte (principe) pdftotext -layout deliberation-scan.pdf - | head # OCR français vers PDF avec couche texte (principe — lisez la doc de votre version) ocrmypdf -l fra --deskew --clean deliberation-scan.pdf deliberation-ocr.pdf # Alternative Tesseract sur image page (principe) tesseract page-003.png page-003 -l fra pdf # Ensuite seulement : ingestion dans votre RAG (Open WebUI, script, Qdrant…)
Contrôler la qualité du texte français
L’OCR administratif français casse souvent sur les accents, les cédilles, les sigles (EPCI, PLU, CCAS) et les noms de lieux. Constituez une mini-liste de contrôle : trois toponymes de votre territoire, deux sigles métier, une phrase juridique typique (« vu l’avis », « après en avoir délibéré »). Si ces ancres passent, vous pouvez élargir. Si elles cassent, corrigez le prétraitement ou changez d’outil avant d’indexer.
Méfiez-vous des tableaux scannés : une colonne décalée transforme un montant ou une date. Pour un budget communal ou un devis d’association, gardez le tableau sous les yeux humains. L’IA peut reformuler ; elle ne doit pas devenir la source des chiffres. Quand le manuscrit domine (notes manuscrites en marge), l’OCR imprimé échoue : isolez ces pages ou passez par une relecture humaine ciblée.
| Signal | Lecture | Geste |
|---|---|---|
| Texte sélectionnable dans le PDF | Couche OCR présente | Passer à l’échantillonnage sémantique |
| Accents et noms locaux corrects | Langue et dictionnaire OK | Garder la config ; documenter la version |
| Tableaux alignés absurdes | Structure mal lue | Extraire à part ou saisir à la main les cellules critiques |
| Pages quasi vides après OCR | Scan trop sombre / biais | Ré-scanner ou prétraiter avant de relancer |
| Doublons de paragraphes | Double couche ou mauvais merge | Nettoyer avant embedding |
Brancher le texte sur Open WebUI ou un index
Une fois le texte fiable, le reste ressemble à un RAG classique : découpage, embeddings, retrieval, génération. Dans Open WebUI, chargez les PDF OCRisés dans la base de connaissances selon les menus du jour (les libellés changent : cherchez l’équivalent « documents / knowledge » dans la doc). Pour un réglage fin des chunks, les réglages RAG Open WebUI détaillent les leviers. Pour un embedding adapté au français, voyez embeddings pour RAG français.
Si vous codez, LlamaIndex ou LangChain peuvent ingérer le dossier de textes nettoyés puis pousser vers Qdrant : le tutoriel RAG Python + Qdrant reprend ce fil. Dans tous les cas, séparez clairement « corpus brut scanné », « corpus OCRisé validé » et « corpus indexé ». Cette séparation permet un rollback si une mauvaise session OCR pollue l’index.
Scène Hauts-de-France : archives à Arras
Imaginez le service archives d’une commune près d’Arras. Vingt ans de délibérations scannées occupent un partage réseau. Un élu demande un chatbot interne pour retrouver « la délibération sur la salle des fêtes ». Sans OCR, le prototype répond n’importe quoi. L’équipe commence par vingt PDF représentatifs, OCRise, fait vérifier trois décisions par la secrétaire de séance, puis indexe. Le gain n’est pas magique : c’est la confiance dans le texte sous-jacent. Les données personnelles hors sujet (coordonnées de particuliers dans des annexes) restent hors corpus.
Même logique pour une association de quartier à Lens qui a numérisé ses AG en photo, ou un cabinet d’architecte à Lille qui archive des notices scannées. Le protocole est le même : échantillon, OCR, contrôle humain, indexation, questions de régression. IAHDF peut accompagner la méthode en atelier ; les dates figurent sur l’agenda, sans promesse d’outil unique.
Checklist avant de généraliser
- Échantillon validé par quelqu’un qui connaît les documents.
- Version d’outil OCR notée ; commande exacte archivée.
- Séparation brut / OCRisé / indexé.
- Trois questions de régression documentées avec la page source.
- Pas de données personnelles inutiles dans le corpus.
- Plan de ré-OCR si un lot est mauvais (sans écraser les originaux).
Quand la checklist est verte, élargissez par lots. Surveillez les nouveaux scans entrants : un multifonction mal réglé peut réintroduire des images pures. Automatisez la détection d’extractibilité dans le dossier d’arrivée. Ainsi, le RAG reste alimenté par du texte, pas par des illusions de PDF. Pour un assistant grand public sur site, croisez aussi chatbot RAG sur site.
Dépannage OCR et index
Si l’OCR « réussit » mais le RAG reste sourd, vérifiez que vous indexez bien le fichier OCRisé et non le scan d’origine. Un lien symbolique mal pointé, un dossier monté en lecture seule, ou un cache d’ingestion qui ignore les nouveaux PDF suffisent à expliquer le mystère. Effacez explicitement la collection ou la base knowledge de test, puis ré-ingérez uniquement le lot validé. Conservez une capture de l’inventaire de fichiers hashés pour prouver quelle version est entrée.
Quand Tesseract produit un français « cassé » sur un lot entier, regardez d’abord la résolution et l’orientation des pages. Un lot scanné à l’envers ou en double page (livre ouvert) trompe l’OCR. Séparez les pages, redressez, puis relancez sur trois échantillons. Docling ou une piste vision peuvent sauver une page, mais généralisées trop tôt elles coûtent du temps machine sans garantie. La règle IAHDF : échantillon, décision, lots.
Pour les archives municipales, impliquez quelqu’un qui lit les délibérations au quotidien. Cette personne repère en trente secondes un sigle local mal lu qu’aucun script ne verra. Notez ses corrections dans un mini lexique (formes fausses → formes justes) réutilisable au nettoyage. Ce lexique devient un actif de la collectivité, au même titre que le plan de classement.
Questions fréquentes
Pourquoi mon RAG ignore-t-il un PDF que je vois très bien à l’écran ?
Parce que vous voyez une image, tandis que le pipeline lit une couche texte. Sans OCR, l’extracteur renvoie peu ou rien. Faites le test de sélection de texte dans le lecteur PDF. Si rien ne se sélectionne, lancez un OCR et contrôlez le résultat avant toute indexation. Ensuite seulement, reparlez de chunks ou d’embeddings. Le glossaire RAG rappelle pourquoi la recherche précède la rédaction. Tant que la sélection de texte échoue, aucune discussion sur les embeddings n’est pertinente : vous optimisez encore du vide documentaire.
Tesseract suffit-il pour des délibérations scannées ?
Souvent pour des scans propres en français, oui comme premier geste, à condition d’installer la langue fra et de vérifier accents et noms locaux. Sur des pages très dégradées, des tableaux denses ou du manuscrit, testez une autre piste (Docling, vision) sur le même échantillon. Comparez la fidélité, pas un score inventé. Documentez ce qui marche sur votre lot HdF et gardez les originaux. Documentez le choix d’outil dans une note d’une demi-page : critères, pages testées, défauts acceptés, afin d’éviter le débat perpétuel en comité de pilotage.
Puis-je OCRiser directement dans Open WebUI ?
Selon les versions et extensions, des aides existent, mais le réflexe robuste reste : produire un PDF texte fiable hors chat, puis l’ingérer. Vous gardez un artefact auditable. Vérifiez les menus du jour dans la documentation Open WebUI. Ne supposez pas qu’un bouton « upload » déclenche un OCR parfait sur tous vos scans municipaux. En cas de doute, externalisez l’OCR puis rechargez. L’upload dans le chat ne remplace pas un artefact versionné ; gardez le PDF texte hors de l’interface pour pouvoir le rejouer hors ligne.
Faut-il un GPU pour l’OCR ?
Pas forcément. Tesseract et ocrmypdf tournent fréquemment sur CPU pour des volumes modestes. Les approches modèle de vision peuvent demander davantage de ressources : parlez en ordre de grandeur, testez dix pages, lisez la fiche outil. IAHDF ne publie pas de mesure VRAM de labo. Choisissez selon volume, délai et qualité constatée sur votre échantillon local. Un ordre de grandeur machine se valide sur votre échantillon, pas sur une rumeur de forum : chronométrez uniquement pour décider, sans publier de benchmark.
Comment savoir si la qualité OCR est « assez bonne » pour le RAG ?
Par des questions dont vous connaissez la réponse exacte dans le document, et par une relecture de passages sensibles (dates, noms, dispositifs). Si le bon paragraphe revient et que la rédaction ne déforme pas la décision, vous pouvez élargir. Complétez avec l’évaluation RAG. Une belle prose qui cite une mauvaise page reste un échec métier, même si le chat « sonne » bien. Si la citation pointe la mauvaise page, traitez d’abord le retrieval et l’OCR avant d’accuser le modèle de chat d’être « trop créatif ».
