Este proyecto utiliza la biblioteca tesseract.js
para realizar OCR (Reconocimiento Óptico de Caracteres) en imágenes y buscar un texto específico dentro de la imagen, manejando diferencias en mayúsculas y minúsculas y normalizando números eliminando puntos y comas.
- Realiza OCR en imágenes para extraer texto.
- Busca texto específico, incluyendo palabras, frases y nombres completos.
- Calcula la similitud entre el texto extraído y el texto buscado.
- Normaliza números eliminando puntos y comas para mejorar la precisión de la búsqueda.
- Node.js (v20.17.0 o superior)
- npm (v7.0.0 o superior)
-
Clona este repositorio en tu máquina local.
git clone https://github.com/tu_usuario/imageContentAnalyzer.git cd ocr-text-search
-
Instala las dependencias necesarias utilizando npm.
npm install
-
Asegúrate de que tienes una imagen en la que deseas buscar texto. Actualiza la variable
imagePath
en el scriptbuscarTexto.js
con la ruta a tu imagen.const imagePath = 'ruta/a/tu/imagen.png';
-
Define el texto que deseas buscar en la variable
textoBuscado
.const textoBuscado = '123.456,78';
-
Ejecuta el script.
node buscarTexto.js
El script buscarTexto.js
realiza las siguientes operaciones:
-
Importación de Módulos: Importa
tesseract.js
para realizar OCR yleven
para calcular la distancia de Levenshtein entre dos cadenas.const Tesseract = require('tesseract.js'); const leven = require('leven');
-
Configuración de la Ruta de la Imagen: Define la ruta de la imagen que se analizará.
const imagePath = 'ruta/a/tu/imagen.png';
-
Calcular Similitud: Define una función que calcula la similitud entre dos cadenas de texto utilizando la distancia de Levenshtein.
const calcularSimilitud = (texto1, texto2) => { const distancia = leven(texto1.toLowerCase(), texto2.toLowerCase()); const longitudMaxima = Math.max(texto1.length, texto2.length); const similitud = ((longitudMaxima - distancia) / longitudMaxima) * 100; return Math.max(0, Math.min(similitud.toFixed(2), 100)); };
-
Normalizar Texto: Define una función para eliminar puntos y comas de una cadena de texto.
const normalizarTexto = (texto) => { return texto.replace(/[.,]/g, ''); };
-
Buscar Texto en la Imagen: Define una función asincrónica que realiza OCR en la imagen, normaliza el texto extraído y el texto buscado, y calcula la similitud para encontrar coincidencias.
const buscarTextoEnImagen = async (imagePath, textoBuscado) => { try { const { data: { text } } = await Tesseract.recognize(imagePath, 'spa'); console.log('Texto extraído:', text); const palabras = text.split(/\s+/); const textoBuscadoLower = normalizarTexto(textoBuscado.toLowerCase()); const numPalabrasBuscadas = textoBuscadoLower.split(/\s+/).length; let similitudMaxima = 0; for (let i = 0; i <= palabras.length - numPalabrasBuscadas; i++) { const segmento = palabras.slice(i, i + numPalabrasBuscadas).join(' '); const segmentoNormalizado = normalizarTexto(segmento.toLowerCase()); const similitud = calcularSimilitud(segmentoNormalizado, textoBuscadoLower); if (similitud > similitudMaxima) { similitudMaxima = similitud; } } if (similitudMaxima > 0) { console.log(`El texto "${textoBuscado}" tiene una probabilidad del ${similitudMaxima}% de estar en la imagen.`); } else { console.log(`El texto "${textoBuscado}" no se encontró en la imagen.`); } } catch (error) { console.error('Error al procesar la imagen:', error); } };
-
Ejecutar la Función: Define el texto buscado y ejecuta la función
buscarTextoEnImagen
.const textoBuscado = '123.456,78'; buscarTextoEnImagen(imagePath, textoBuscado);
Las contribuciones son bienvenidas. Si tienes alguna mejora, por favor abre un issue o envía un pull request.
Este proyecto está bajo la Licencia MIT. Consulta el archivo LICENSE
para más detalles.