@mostajs/ocr-img2md
v0.2.0
Published
Scanner une image/photo/infographie (ou un PDF scanné) en Markdown ÉDITABLE : compose @mostajs/ocr (image → texte), @mostajs/image (pré-traitement + rendu PDF, optionnel), @mostajs/markdown-html et @mostajs/markdown-editor (relecture). fs-free, ESM sans b
Maintainers
Readme
@mostajs/ocr-img2md
Auteur : Dr Hamid MADANI [email protected] Licence : AGPL-3.0-or-later
Scanner une image (photo, capture, infographie) ou un PDF scanné en Markdown éditable. Composition pure de l'écosystème — le module manipule, l'application décide quoi en faire (article, note, fiche…) :
@mostajs/ocr— reconnaissance du texte (image → texte, driver tesseract.js optionnel) ;@mostajs/image(optionnel) — pré-traitement (agrandir une image trop petite) et rendu des pages d'un PDF ;@mostajs/markdown-html— le Markdown produit est rendu côté consommateur ;@mostajs/markdown-editor— étage de relecture/correction (l'OCR est imparfaite).
fs-free : octets in → { markdown, text, confidence } out. ESM sans build (src/index.js).
API
import { scanToMarkdown, scanPdfToMarkdown, textToMarkdown, scanEditor, capabilities } from '@mostajs/ocr-img2md';
const caps = await capabilities(); // { ocr, engines, image, pdf }
// Image → Markdown
const { markdown, text, confidence } = await scanToMarkdown(pngBytes, { langs: ['fra', 'eng'] });
// PDF scanné → Markdown (compose @mostajs/image)
const r = await scanPdfToMarkdown(pdfBytes, { langs: ['fra'], scale: 2 });
// Structuration seule (pure, sans OCR — testable) : texte brut → Markdown
const md = textToMarkdown('INTERPRÉTATION DE L’ECG\n1. Fréquence\n2. Rythme');
// Étage relecture (HTML) : pré-remplit @mostajs/markdown-editor avec un bandeau de confiance
const html = scanEditor(markdown, { previewUrl: '/admin/preview', previewClass: 'article__body', confidence });Structuration (textToMarkdown)
Best-effort et déterministe : 1re ligne forte → # Titre ; lignes EN MAJUSCULES → ## Sous-titre ;
1. … / - … → listes ; le reste → paragraphes. La sortie est faite pour être corrigée avant publication.
Dépendances (optionnelles)
| Capacité | Paquet | Sans lui |
|---|---|---|
| OCR | tesseract.js (via @mostajs/ocr) | capabilities().ocr = false ; scanToMarkdown lève une erreur claire |
| PDF + pré-traitement | @mostajs/image (+ ses drivers) | capabilities().image/pdf = false ; scanPdfToMarkdown lève ; l'image n'est pas pré-traitée |
Le module se charge sans elles : textToMarkdown reste utilisable, et les capacités absentes sont signalées.
Pièges
- Langues = codes tesseract (
"fra","eng"), pas ISO-639-1. Défaut :["fra","eng"]. - L'OCR d'une infographie dense (colonnes, icônes, couleurs) est bruitée : la sortie est un brouillon à relire.
scanEditorrenvoie du HTML ; posezMARKDOWN_EDITOR_CSS/MARKDOWN_EDITOR_JS(ré-exportés) dans la page.
0.2.0 — skills & structure
- → { skill, markdown, doc, text, confidence, blocks }.
- Structuration/skills réexportés de (source unique) : registerSkill, applySkill, reorderColumns, textToMarkdown.
- Option : basculer vers un driver VLM () via @mostajs/ocr, sinon tesseract souverain.
