Cliente OCR con Tesseract.js
Este archivo implementa una función para procesar imágenes y extraer texto utilizando la librería tesseract.js
. Se utiliza en el backend del sistema NutriScan para realizar reconocimiento óptico de caracteres (OCR) a imágenes cargadas por el usuario.
🔍 Ubicación
src/utils/ocr.ts
📦 Dependencias
import { createWorker, PSM } from 'tesseract.js';
tesseract.js
: Librería OCR basada en WebAssembly.PSM.SPARSE_TEXT
: Configura el modo de segmentación de páginas para tratar mejor textos cortos o aislados.
🔧 Función Exportada
🔍 createOcrClient(imagePath: string): Promise<string>
Realiza el reconocimiento de texto sobre una imagen localizada en imagePath
.
📥 Parámetros
Parámetro | Tipo | Descripción |
---|---|---|
imagePath | string | Ruta (local o temporal) de la imagen a procesar. |
📤 Retorno
Una Promise<string>
que contiene el texto extraído de la imagen.
⚙️ Flujo Interno
- Crear un worker OCR usando
createWorker()
. - Cargar los recursos del worker con load() y reinicializarlo para usar los idiomas inglés y español (eng+spa)..
- Configurar el modo de segmentación como
SPARSE_TEXT
, ideal para textos cortos o dispersos. - Reconocer el texto de la imagen con
worker.recognize(imagePath)
. - Devolver
data.text
, el texto reconocido. - Liberar recursos con
worker.terminate()
.
🧪 Ejemplo de uso
const textoExtraido = await createOcrClient("/uploads/temp/imagen.jpg");
console.log(textoExtraido);
🧾 Manejo de errores
- Si ocurre un error durante el OCR, se registra en consola con un mensaje específico.
- Se lanza una excepción con un mensaje claro para manejarla a nivel de controlador o servicio.
📋 Notas adicionales
- Es necesario tener instalada y correctamente configurada la dependencia
tesseract.js
. - El worker se destruye (
terminate()
) siempre, incluso si ocurre un error. - Es compatible con imágenes subidas desde el frontend, generalmente procesadas con
uploadMemory
.
🧠 Recomendación
Para mejorar los resultados OCR:
- Usa imágenes con buena iluminación y resolución.
- Evita fondos complejos o letras pequeñas.
- Preprocesa imágenes si es necesario (contraste, binarización, etc.).