@dragon708/docmind-ocr
v1.2.0
Published
Image OCR for DocMind (tesseract.js, lazy-loaded).
Readme
@dragon708/docmind-ocr
OCR y utilidades de imagen para DocMind: normalización de rasters, Tesseract.js (carga perezosa), TIFF multipágina (decodificación y, cuando aplica, paso a PNG por página), preprocesado opcional (escala/contraste) y extractStructuredDataFromImage, que produce un StructuredDocumentResult alineado con PDF/DOCX para el resto del stack (Markdown, LLM, chunks).
Instalación
npm install @dragon708/docmind-ocrDependencias: @dragon708/docmind-shared, tesseract.js, heic-decode, utif (TIFF). El tamaño en bundle depende de cómo cargues idiomas y WASM de Tesseract.
API principal
OCR simple (una imagen raster)
import { ocr } from "@dragon708/docmind-ocr";
const result = await ocr(imageBytes, {
langs: "eng+spa",
});
// result.text, result.confidence, …Entrada típica: Uint8Array / ArrayBuffer de PNG, JPEG o WebP. El formato puede inferirse con sniffImageFormat / resolveImageFormat.
OCR detallado (layout)
import { ocrImageDetailed } from "@dragon708/docmind-ocr";
const detailed = await ocrImageDetailed(input, {
/* OcrDetailedOptions */
});
// Bloques/líneas/bboxes según runtime y opcionesTIFF multipágina
import { ocrTiff } from "@dragon708/docmind-ocr";
const tiffResult = await ocrTiff(tiffBytes, {
langs: "eng",
});
// Por página: texto agregado y metadatos; revisar warnings en navegador vs NodeDecodificación TIFF (sin OCR)
import {
decodeTiff,
extractTiffPages,
encodeDecodedTiffPagesToPng,
} from "@dragon708/docmind-ocr";
const decoded = decodeTiff(tiffBytes);
const pages = extractTiffPages(tiffBytes);
const pngPages = encodeDecodedTiffPagesToPng(decoded);Normalización antes de OCR
import { normalizeImageForOcr } from "@dragon708/docmind-ocr";
const normalized = await normalizeImageForOcr(rawBytes, {
/* NormalizeImageForOcrOptions */
});Preprocesado
import {
preprocessImageForOcr,
preprocessHasEffect,
type PreprocessImageOptions,
type PreprocessResizeOptions,
} from "@dragon708/docmind-ocr";
const processed = await preprocessImageForOcr(bytes, {
resize: { maxWidth: 2000 },
});
if (preprocessHasEffect(options)) {
/* … */
}Documento estructurado desde imagen
import { extractStructuredDataFromImage } from "@dragon708/docmind-ocr";
const structured = await extractStructuredDataFromImage(imageInput, {
/* ExtractStructuredDataFromImageOptions: langs, preprocess, etc. */
});
// structured.blocks, structured.text, structured.warningsEste es el puente natural hacia @dragon708/docmind-markdown (renderMarkdown, renderLlmText, …) vía extractStructuredData en @dragon708/docmind-browser / @dragon708/docmind-node.
Utilidades de formato
import {
mimeToFormat,
resolveImageFormat,
sniffImageFormat,
type SupportedImageFormat,
} from "@dragon708/docmind-ocr";Tipos exportados (resumen)
OcrOptions,OcrResult: OCR básico.OcrDetailedOptions,OcrDetailedResult,OcrDetailedBlock,OcrDetailedLine,OcrBBox,OcrImageInput,OcrDetailedRuntime.NormalizeImageForOcrOptions,NormalizeImageForOcrResult,NormalizedOcrPixelFormat.PreprocessImageOptions,PreprocessResizeOptions.OcrTiffOptions,OcrTiffResult,OcrTiffPageText.ExtractStructuredDataFromImageOptions.TiffDecodeOptions,TiffDecodeResult,TiffDecodedPage,TiffExtractResult,TiffPngPage.
Runtime: navegador vs Node
- Tesseract.js funciona en ambos; la primera ejecución puede descargar
worker+ datos de idioma. - TIFF: en navegador hay limitaciones documentadas en warnings (multipage, memoria); lee
explainAnalysisPlan/getCapabilitiesen el cliente DocMind que uses (browser o Node).
Paquetes relacionados
| Paquete | Uso |
|---------|-----|
| @dragon708/docmind-pdf | Pipeline OCR raster sobre páginas PDF (@dragon708/docmind-pdf/pipeline) |
| @dragon708/docmind-node / browser | runOcr, analyzeFile |
| @dragon708/docmind-shared | Tipos structured |
Licencia
MIT (monorepo DocMind).
