Reconocimiento de texto en aplicaciones — qué es, OCR y Vision

Autor: IT Sectr Publicado: 2026-07-18 Tiempo de lectura: 10 min

Text Recognition (OCR — Optical Character Recognition) es una tecnología para extraer texto impreso o manuscrito de imágenes y flujos de video. En el desarrollo móvil, el reconocimiento de texto se utiliza para digitalizar documentos, reconocer matrículas, leer tarjetas de presentación y traducir texto en tiempo real. Las principales soluciones OCR móviles son: ML Kit Text Recognition (Google), Vision Framework (Apple), Tesseract OCR (open-source). Según Google ML Kit, 2025, Text Recognition V2 procesa un fotograma en 10–30 ms con una precisión del 96% en latín y 91% en cirílico.

Puntos clave

  • Text Recognition — extracción de texto de imágenes y video (OCR)
  • ML Kit Text Recognition — 45+ idiomas, precisión 96% (latín), 10–30 ms
  • Apple Vision — VNRecognizeTextRequest, 13+ idiomas, iOS nativo
  • Tesseract — OCR open-source, 100+ idiomas, 50–200 ms, CPU
  • Tiempo real — hasta 30 FPS con CameraX/AVFoundation en dispositivos modernos

Qué es Text Recognition: principios de OCR

Text Recognition (OCR) es un proceso de visión artificial que convierte imágenes de texto en caracteres legibles por máquina. El OCR consta de etapas: preprocesamiento de imagen (binarización, deskew, corrección de inclinación), segmentación (división en líneas, palabras, caracteres), reconocimiento (clasificación de cada carácter) y postprocesamiento (verificación con diccionario, corrección de errores). Los sistemas OCR modernos (ML Kit, Vision) utilizan redes neuronales de extremo a extremo que combinan todas las etapas.

Tipos de OCR: texto impreso (printed text) — reconocimiento de texto mecanografiado de documentos, letreros, pantallas — precisión 95–99%; texto manuscrito (handwriting) — reconocimiento de escritura a mano — precisión 80–90% en latín, 70–80% en cirílico; texto de escena (scene text) — texto en escenas naturales: números de casas, señales de tráfico, nombres de tiendas — el más difícil debido a distorsiones de perspectiva y reflejos.

CRNN + CTC Loss — la arquitectura utilizada en los modelos OCR modernos. La Red Neuronal Convolucional Recurrente (CNN + LSTM) extrae características de la imagen, mientras que la Clasificación Temporal Conexionista decodifica la secuencia de caracteres sin necesidad de segmentación previa. CRNN funciona con textos de cualquier longitud y es robusta ante inclinaciones y distorsiones. Según arXiv (2025), los modelos CRNN alcanzan un 97.5% de precisión en el benchmark ICDAR 2019.

Solución OCRPrecisiónVelocidadIdiomasPlataforma
ML Kit V296%10–30 ms45+Android, iOS
Apple Vision95%10–40 ms13+iOS, macOS
Tesseract 590%50–200 ms100+Multiplataforma
Google Cloud Vision98%500–1000 ms200+Servidor (API)

CRNN para dispositivos móviles — ML Kit utiliza un modelo MobileNetV2 + CRNN con cuantificación INT8. El modelo ocupa 2–5 MB (latente) y se ejecuta en GPU/NPU mediante TFLite Delegate. A diferencia de Tesseract (pipeline clásico), el OCR con redes neuronales no requiere segmentación de caracteres separada y es más robusto al ruido. Desventaja: requiere GPU o NPU para tiempo real — en CPU puro, la velocidad cae a 5–10 FPS.

ML Kit Text Recognition en Android e iOS

ML Kit Text Recognition es la herramienta OCR principal para aplicaciones móviles. Está disponible en dos versiones: V2 (basada en latín — optimizada para latín, cirílico, dígitos) y V1 (latín + CJK — japonés, chino, coreano, pero más lenta). V2 utiliza un modelo CRNN de extremo a extremo, V1 usa una CNN + LSTM más antigua. Google recomienda V2 para todos los casos excepto cuando se necesita reconocimiento CJK.

Estructura del resultado de ML Kit: Text → TextBlock → Line → Element (Word/Symbol). Cada nivel tiene un bounding box, confianza (0..1) y texto reconocido. Text es el objeto raíz con fullText (todo el texto reconocido en una línea). TextBlock es un bloque lógico de texto (párrafo, columna). Line es una línea de texto. Element es una palabra o símbolo. Usa confidence para filtrar reconocimientos imprecisos.

kotlin
// ML Kit Text Recognition V2
val recognizer = TextRecognition.getClient(
    TextRecognizerOptions.DEFAULT_OPTIONS
)

recognizer.process(inputImage)
    .addOnSuccessListener { text ->
        val fullText = text.text
        text.textBlocks.forEach { block ->
            val blockText = block.text
            val blockRect = block.boundingBox
            block.lines.forEach { line ->
                line.elements.forEach { element ->
                    val word = element.text
                    val confidence = element.confidence
                }
            }
        }
    }
    .addOnFailureListener { error -> /* error */ }

Text Recognition en iOS mediante ML Kit: la API es similar a Android pero usa UIImage/CVPixelBuffer en lugar de InputImage. ML Kit usa automáticamente Apple Neural Engine en A12+ mediante Core ML Delegate. Para iOS, ML Kit Text Recognition V2 alcanza 15–30 ms en iPhone 15 Pro. Para máximo rendimiento, convierte UIImage a CVPixelBuffer antes de pasarlo — esto reduce la sobrecarga de conversión.

Apple Vision Framework: VNRecognizeTextRequest

Apple Vision Framework proporciona OCR nativo mediante VNRecognizeTextRequest (iOS 13+). Vision OCR utiliza Apple Neural Engine (ANE) y no requiere SDK adicionales. Soporta 13 idiomas (EN, FR, IT, DE, ES, PT, ZH, JP, KO, RU, AR, TH, VI). Vision detecta automáticamente el idioma del texto (corrección de idioma) y soporta múltiples idiomas en un solo fotograma. Velocidad — 10–40 ms en A16+.

Características de Vision OCR: recognitionLevel (fast vs accurate), automaticLanguageDetection, customWords (agregar términos específicos), supportsTop candidates (múltiples variantes de reconocimiento para texto borroso). El modo fast ofrece 90% de precisión en 10–20 ms, el modo accurate 95% en 30–50 ms. Para producción, usa accurate con filtrado por confidence >= 0.5.

swift
import Vision

let request = VNRecognizeTextRequest { request, error in
    guard let observations = request.results as? [VNRecognizedTextObservation] else { return }
    for observation in observations {
        let topCandidate = observation.topCandidates(1).first
        let text = topCandidate?.string ?? ""
        let confidence = topCandidate?.confidence ?? 0
        let boundingBox = observation.boundingBox
    }
}
request.recognitionLevel = .accurate
request.usesLanguageCorrection = true

let handler = VNImageRequestHandler(cgImage: cgImage, orientation: .up)
try handler.perform([request])

Vision vs ML Kit en iOS: Vision es más rápido en dispositivos antiguos (iPhone X–13) gracias al ANE integrado. ML Kit es más preciso en escenas complejas (distorsiones, inclinaciones, reflejos) gracias al modelo de Google entrenado con millones de imágenes de scene text. Vision no soporta confidence para caracteres individuales (solo para palabras), lo que limita el filtrado. Para documentos — Vision (más rápido), para scene text — ML Kit (más preciso).

Tesseract OCR: alternativa open-source

Tesseract OCR es un motor de reconocimiento de texto open-source desarrollado por HP (1985–1998) y mantenido por Google (2006+). Tesseract 5 (basado en LSTM) utiliza la arquitectura de red neuronal CRNN, lo que proporciona un aumento significativo de precisión respecto a Tesseract 4 (clásico + LSTM). Tesseract soporta 100+ idiomas, incluyendo cirílico, árabe, hebreo y CJK. Para Android — tess-two (fork), para iOS — swift-tesseract.

Desventajas de Tesseract: velocidad 50–200 ms por fotograma (solo CPU, sin aceleración GPU), requiere preprocesamiento de imagen (binarización, deskew, detección de orientación) antes de pasar al motor, no tiene detección de texto incorporada — hay que pasar la región de la imagen (a menudo junto con OpenCV Text Detection o EAST). Tesseract logra 90% de precisión en documentos limpios y ~70% en scene text.

Cuándo elegir Tesseract: si la aplicación funciona en dispositivos sin Google Play (Huawei), necesita soporte para idiomas raros (sánscrito, hebreo), o requiere personalización completa del pipeline OCR (entrenamiento con fuentes propias). Para todos los demás casos, ML Kit o Vision son más rápidos, precisos y requieren menos código. Tesseract solo se justifica cuando hay restricciones en SDK de terceros.

kotlin
// Tesseract OCR via tess-two
val tess = TessBaseAPI()
tess.init(dataPath, "rus+eng")
tess.pageSegMode = TessBaseAPI.PageSegMode.PSM_AUTO

val bitmap = BitmapFactory.decodeResource(resources, R.drawable.text)
val gray = Bitmap.createBitmap(bitmap.width, bitmap.height, Bitmap.Config.ARGB_8888)
OpenCV.process(bitmap, gray) // Binarización + deskew

tess.setImage(gray)
val result = tess.utF8Text
tess.recycle()

Preprocesamiento para Tesseract es obligatorio: convertir a escala de grises, binarización (Otsu o Adaptive), deskew, eliminación de ruido (median blur). Sin preprocesamiento, la precisión de Tesseract cae al 50–60%. Usa OpenCV para el preprocesamiento: Imgproc.cvtColor → Imgproc.threshold → Imgproc.erode/dilate → Core.rotate (deskew). Para documentos con fondo uniforme, la binarización es suficiente; para scene text, se necesita un pipeline completo.

Preprocesamiento de imágenes para OCR

La calidad de la imagen es el factor principal para la precisión del OCR. ML Kit y Vision tienen preprocesamiento incorporado, pero para casos difíciles (fotos oscuras, desenfoque, sobreexposición), el procesamiento adicional mejora la precisión en un 10–15%. Técnicas clave: mejora de contraste (CLAHE), enfoque (unsharp mask), corrección de perspectiva (perspective transform), eliminación de sombras y reflejos.

CLAHE (Contrast Limited Adaptive Histogram Equalization) — ecualización adaptativa de histograma que mejora el contraste en regiones locales. CLAHE es efectivo para fotos de documentos con iluminación desigual (parte en sombra, parte iluminada). OpenCV Core.createCLAHE con clipLimit=2.0 y tileGridSize=(8,8) da resultados óptimos para OCR. Después de CLAHE, la precisión de ML Kit en documentos oscuros mejora del 70% al 88%.

Corrección de perspectiva — obligatoria para fotos de documentos tomadas en ángulo. Usa OpenCV findHomography + warpPerspective para alinear el documento. Para la detección automática de bordes del documento, usa Canny edge detection + findContours + approxPolyDP. Después de la corrección de perspectiva, la precisión del OCR mejora en un 20–30% para tomas con ángulos >30°.

kotlin
// CLAHE + preprocesamiento OpenCV
val mat = Mat()
Utils.bitmapToMat(bitmap, mat)
Imgproc.cvtColor(mat, mat, Imgproc.COLOR_RGB2GRAY)

val clahe = Imgproc.createCLAHE(2.0, Size(8.0, 8.0))
clahe.apply(mat, mat)

Imgproc.GaussianBlur(mat, mat, Size(3.0, 3.0), 0.0)
Imgproc.threshold(mat, mat, 0.0, 255.0, Imgproc.THRESH_BINARY or Imgproc.THRESH_OTSU)

val processedBitmap = Bitmap.createBitmap(mat.cols(), mat.rows(), Bitmap.Config.ARGB_8888)
Utils.matToBitmap(mat, processedBitmap)

Detección de texto antes del OCR — para scene text, usa EAST (Efficient Accurate Scene Text Detector) o CRAFT (Character Region Awareness for Text Detection) antes de pasar al OCR. EAST detecta bounding boxes de texto en una escena en 5–15 ms. CRAFT es más preciso (97%) pero más lento (50–100 ms). La detección de texto permite filtrar áreas sin texto y pasar solo regiones relevantes al OCR, acelerando el procesamiento general.

Aplicaciones de OCR en apps móviles

Escaneo de documentos — la aplicación más extendida del OCR. Las apps de escaneo (CamScanner, Adobe Scan, Google Drive) usan ML Kit o Vision para reconocer texto de fotos de documentos. Pipeline típico: detección de bordes del documento → corrección de perspectiva → procesamiento CLAHE → OCR → formateo (PDF, DOCX). ML Kit Text Recognition V2 lo maneja en 100–200 ms por página A4.

Traducción de texto en tiempo real — combinación de OCR y traducción automática. Google Translate, Microsoft Translator, Yandex Translate usan ML Kit o Vision para reconocer texto de la cámara y superponen la traducción sobre el texto original (traducción AR). Requisito: latencia < 200 ms para una UX cómoda. ML Kit V2 + NNAPI ofrece 30–80 ms por fotograma, dejando margen para la traducción y el renderizado.

Ingreso automático de datos — OCR para extraer datos de tarjetas de presentación, tarjetas bancarias, identificaciones. ML Kit reconoce el texto, luego el postprocesamiento analiza la estructura: nombre, teléfono, email (tarjetas de presentación) o número de tarjeta, vencimiento, CVV (tarjetas de pago). Para tarjetas de presentación, usa expresiones regulares después del OCR. Para tarjetas bancarias — modelos ML especializados (de pago, ~99% de precisión).

swift
// OCR + traducción AR (simplificado)
let request = VNRecognizeTextRequest { req, _ in
    guard let results = req.results as? [VNRecognizedTextObservation] else { return }
    for observation in results {
        let text = observation.topCandidates(1).first?.string ?? ""
        let rect = observation.boundingBox
        // Traducción y renderizado AR sobre el rect
        DispatchQueue.main.async {
            overlayView.showTranslation(text, at: rect)
        }
    }
}
request.recognitionLevel = .fast
request.usesLanguageCorrection = false

OCR para personas con discapacidad visual — Tecnología de Asistencia: las apps leen texto de empaques, menús, letreros en voz alta. Usan ML Kit OCR + Text-to-Speech (Android TTS / iOS AVSpeechSynthesizer). Requisito clave — tiempo real con baja latencia (< 100 ms). Seeing AI (Microsoft) y Envision AI utilizan este enfoque. Para apps de accesibilidad, usa el modo de reconocimiento rápido y no filtres por confidence — cualquier texto es valioso para el usuario.

Preguntas frecuentes

¿Qué es el reconocimiento de texto (OCR) en aplicaciones móviles?

Text Recognition (OCR) es una tecnología que permite a una aplicación "leer" texto de fotos y video. La cámara del smartphone captura una imagen, la red neuronal en el dispositivo reconoce los caracteres y devuelve texto legible por máquina. En aplicaciones móviles, el OCR se usa para escanear documentos, traducir con la cámara, ingresar datos de tarjetas de presentación y crear interfaces accesibles para personas con discapacidad visual.

¿Qué OCR es mejor para Android: ML Kit o Tesseract?

ML Kit Text Recognition es la mejor opción para Android: 96% de precisión, velocidad de 10–30 ms, 45 idiomas, aceleración GPU mediante NNAPI, encuentra texto en cualquier orientación. Tesseract es una alternativa open-source (90% de precisión, 100+ idiomas, CPU), adecuada para dispositivos sin Google Play o idiomas raros. Para el 95% de los proyectos, elige ML Kit — es más rápido, preciso y no requiere preprocesamiento de imagen.

¿Se requiere internet para OCR en un dispositivo móvil?

No, ML Kit Text Recognition, Apple Vision y Tesseract funcionan completamente en el dispositivo. ML Kit puede descargar el modelo en el primer inicio (modo downloaded), después funciona sin conexión. Apple Vision está integrado en iOS y no requiere internet. Tesseract es completamente offline. El OCR en la nube (Google Cloud Vision, AWS Textract) funciona a través de internet pero no se usa en aplicaciones móviles en tiempo real.

¿Qué idiomas soporta ML Kit Text Recognition?

ML Kit Text Recognition V2 soporta 45+ idiomas de grupos latino y cirílico: inglés, ruso, alemán, francés, español, italiano, portugués, polaco, ucraniano, rumano, turco y otros. V1 (CJK) adicionalmente soporta chino, japonés, coreano. Lista completa — en la documentación de TextRecognizerOptions. Para reconocer árabe o hebreo, usa Tesseract (>100 idiomas).

¿Cómo mejorar la precisión del OCR en fotos de documentos?

Métodos clave: alineación del documento (corrección de perspectiva mediante OpenCV), mejora de contraste (CLAHE), enfoque (unsharp mask), buena iluminación (auto-exposición continua), estabilización de cámara (OIS/EIS). ML Kit maneja distorsiones básicas por sí mismo, pero para documentos con distorsiones de perspectiva (>30°), el preprocesamiento mejora la precisión en un 20–30%. Usa el modo de reconocimiento rápido para video.

Resumen

  • Text Recognition — OCR en dispositivos móviles: texto impreso, manuscrito, de escena
  • ML Kit V2 — 96% precisión, 45+ idiomas, 10–30 ms, aceleración GPU/NPU
  • Apple Vision — OCR nativo de iOS (iOS 13+), 13 idiomas, mediante ANE
  • Tesseract 5 — open-source, 100+ idiomas, 50–200 ms (CPU), alternativa para Huawei
  • Preprocesamiento — CLAHE, deskew, corrección de perspectiva mejoran la precisión 10–30%
  • Tiempo real — hasta 30 FPS con CameraX/AVFoundation y ML Kit o Vision
  • En el dispositivo — todo el cómputo es local, privacidad de datos garantizada

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también