ML Kit: bibliotecas y ML para Android e iOS

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

ML Kit es un SDK móvil de Google para integrar modelos ML listos en aplicaciones Android e iOS. ML Kit proporciona API para reconocimiento de texto, detección de rostros, escaneo de códigos de barras, reconocimiento de objetos, traducción de texto, detección de poses y segmentación de imágenes — todos los modelos funcionan en el dispositivo (on-device) sin conexión obligatoria al servidor. Según Google ML Kit, 2025, la biblioteca se utiliza en más de 100 000 aplicaciones, procesando más de 2 mil millones de solicitudes al día

Puntos clave

  • ML Kit — SDK de Google para funciones ML en aplicaciones móviles
  • On-device — todos los modelos funcionan localmente, sin internet
  • API listas — texto, rostros, códigos de barras, objetos, traducción, pose
  • Multiplataforma — soporte para Android e iOS mediante una API unificada
  • Modelos personalizados — carga de modelos TFLite propios

Qué es ML Kit: capacidades y arquitectura

ML Kit es un SDK compatible con Firebase para plataformas móviles que proporciona 14 API de ML para Android e iOS. ML Kit reemplazó a Firebase ML (nombre anterior) en 2020 y ahora está disponible como SDK independiente a través de Google Play Services (Android) o CocoaPods/SPM (iOS). La ventaja clave es que todos los modelos funcionan en el dispositivo, garantizando la privacidad de los datos y el funcionamiento sin internet.

Arquitectura de ML Kit se basa en dos modos: bundled (modelo integrado en APK/IPA) y downloaded (modelo descargado mediante Google Play Services en la primera llamada). El modo bundled ofrece inicio instantáneo pero aumenta el tamaño de la aplicación en 5–20 MB. El modo downloaded ahorra espacio pero requiere internet en el primer inicio. Google recomienda downloaded para API que no se usan en cada pantalla (Object Detection, Pose Detection).

Personalización mediante TFLite — ML Kit permite cargar su propio modelo TensorFlow Lite a través de Custom Model API. Esto ofrece flexibilidad: use API listas para tareas estándar y su propio modelo para las específicas. ML Kit proporciona un manejador Input/Output universal que funciona con ByteBuffer y FloatArray. Según Google (2025), el 40% de los proyectos de ML Kit combinan API listas y modelos personalizados.

kotlin
// Configuración de ML Kit Text Recognition (Android)
val recognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)

val image = InputImage.fromBitmap(bitmap)
recognizer.process(image)
    .addOnSuccessListener { result ->
        for (block in result.textBlocks) {
            Log.d("MLKit", block.text)
        }
    }
    .addOnFailureListener { error ->
        // Error de procesamiento
    }

Firebase vs independiente — ML Kit se puede usar con Firebase (funciones Cloud, Analytics, Crashlytics) o como SDK independiente sin Firebase. El modo independiente se conecta mediante Google Play Services (Android) sin configurar una cuenta de Firebase. Las API Cloud están disponibles a través de Firebase (Cloud Vision, Natural Language) para tareas que requieren redes neuronales en el servidor de Google, pero estas funciones son de pago y no funcionan en el dispositivo.

ML Kit Text Recognition: reconocimiento de texto

ML Kit Text Recognition — API para reconocimiento óptico de caracteres (OCR) en imágenes. Soporta dos modos: Latin-based (latín, cirílico, dígitos — 45 idiomas) y Chinese/Japanese/Korean (CJK — idiomas ideográficos). El reconocimiento latino usa el modelo V2 (más rápido) o V1 (alta precisión). V2 ofrece 10–30 ms por fotograma, V1 — 50–100 ms.

Capacidades de Text Recognition incluyen reconocimiento de texto impreso y manuscrito, detección de orientación del texto, localización de líneas, palabras y caracteres, determinación del idioma del texto. La API devuelve una estructura: Text → TextBlock → Line → Element (Word/Symbol). Cada elemento tiene bounding box, confianza y texto reconocido. Según Google (2025), la precisión de ML Kit Text Recognition V2 en escritura latina es del 96%, en cirílico — 91%.

Text Recognition en tiempo real — uso con CameraX o Camera2 para flujo de video. Cree un ImageAnalysis.Analyzer y pase fotogramas a ML Kit. Para rendimiento, reduzca la resolución del fotograma a 480p (640x480) — este es el equilibrio óptimo entre velocidad y precisión. ML Kit maneja automáticamente la rotación de la imagen, pero para máxima velocidad pase la imagen en la orientación correcta.

kotlin
// Reconocimiento de texto con CameraX Analyzer
class TextAnalyzer : ImageAnalysis.Analyzer {
    private val recognizer = TextRecognition.getClient(
        TextRecognizerOptions.DEFAULT_OPTIONS
    )

    override fun analyze(image: ImageProxy) {
        val inputImage = InputImage.fromMediaImage(
            image.image, image.imageInfo.rotationDegrees
        )
        recognizer.process(inputImage)
            .addOnSuccessListener { /* text found */ }
            .addOnCompleteListener { image.close() }
    }
}

Optimización de Text Recognition: use ImageDecoder para mejorar el reconocimiento de imágenes borrosas u oscuras. Para texto impreso — TextRecognizerOptions.DEFAULT_OPTIONS (modelo V2). Para texto manuscrito — TextRecognizerOptions.SCRIPT_LATIN (más preciso pero más lento). En los proyectos de IT Sectr usamos V2 para reconocimiento de documentos y modelo Latin para cheques y recibos.

ML Kit Face Detection: detección de rostros y contornos

ML Kit Face Detection — API para detectar rostros en imágenes y video. Detecta el bounding box del rostro, coordenadas de ojos, nariz, boca, orejas (468 puntos de contorno) y expresiones básicas: sonrisa, boca abierta, ojos cerrados. Face Detection es una de las API más rápidas de ML Kit: 5–15 ms por fotograma dependiendo del número de rostros y puntos de contorno.

Modos de Face Detection: modo contour (468 puntos de contorno facial para superposición precisa de máscaras/filtros), modo classification (detección de sonrisa, ojos abiertos), modo landmark (puntos clave sin contorno). Los modos se combinan en FaceDetectorOptions. Activar todos los modos ralentiza la detección 2–3 veces — use el conjunto mínimo necesario para su tarea.

Face Detection en aplicaciones AR — basado en puntos de contorno, ML Kit construye una máscara facial para filtros tipo Snapchat. ML Kit devuelve 468 puntos con coordenadas x, y, z (z = profundidad). Los puntos se actualizan 30–60 veces por segundo en dispositivos modernos. Para superposición AR use FaceMeshDetector (versión especializada) — también devuelve triángulos de malla para texturizado.

kotlin
// Detección de rostros con puntos de contorno
val options = FaceDetectorOptions.Builder()
    .setPerformanceMode(FaceDetectorOptions.PerformanceMode.FAST)
    .setContourMode(FaceDetectorOptions.ContourMode.ALL)
    .setClassificationMode(FaceDetectorOptions.ClassificationMode.ALL)
    .build()
val detector = FaceDetection.getClient(options)

detector.process(inputImage)
    .addOnSuccessListener { faces ->
        faces.forEach { face ->
            val bounds = face.boundingBox
            val smileProb = face.smilingProbability
        }
    }

Limitaciones de Face Detection: la API no reconoce a quién pertenece el rostro (face recognition) — solo detecta rostros. Para identificación de identidad use FaceNet o ArcFace en un modelo TFLite personalizado. ML Kit funciona correctamente con rostros en ángulos de hasta 45°, con gafas y mascarilla parcial. Para ángulos de perfil (90°) la precisión cae al 40–60%.

ML Kit Barcode Scanning: lectura de todos los formatos de código

ML Kit Barcode Scanning — API para leer y decodificar códigos de barras 1D (EAN, UPC, Code 128) y 2D (QR, Data Matrix, PDF417). Barcode Scanning detecta el código en la imagen — a diferencia de ZXing que requiere que el código ocupe casi todo el fotograma. ML Kit detecta códigos de cualquier tamaño y orientación, incluyendo múltiples códigos en un solo fotograma (modo multi-barcode).

Formatos soportados: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, ITF, Codabar, QR, Data Matrix, PDF417, Aztec. ML Kit determina automáticamente el formato — no necesita especificar el tipo de código. En producción use setBarcodeFormats() para limitar los formatos soportados — esto acelera el escaneo en un 30–50% al excluir algoritmos de decodificación innecesarios.

Barcode Scanning en tiempo real — similar a Text Recognition, integración con CameraX. ML Kit procesa fotogramas a hasta 60 FPS. Para máxima velocidad active setPerformanceMode(PerformanceMode.FAST). ML Kit Barcode Scanning es 2–3 veces más rápido que ZXing y más preciso detectando códigos borrosos o parcialmente cubiertos. Según Google (2025), ML Kit Barcode Scanning tiene una precisión del 98.5% con iluminación estándar.

kotlin
// Escaneo de códigos de barras con filtro de formato
val options = BarcodeScannerOptions.Builder()
    .setBarcodeFormats(Barcode.FORMAT_QR_CODE,
        Barcode.FORMAT_EAN_13)
    .build()
val scanner = BarcodeScanning.getClient(options)

scanner.process(inputImage)
    .addOnSuccessListener { barcodes ->
        barcodes.forEach { barcode ->
            val value = barcode.rawValue
            val type = barcode.format
        }
    }

Comparación con ZXing: ML Kit es más rápido, preciso y fácil de integrar. ZXing es de código abierto, funciona completamente sin conexión, no requiere Google Play Services. ML Kit requiere Google Play Services (Android) o CocoaPods (iOS). Para aplicaciones que funcionan en dispositivos sin Google (Huawei, Amazon Fire), use ZXing como fallback. Para el resto — ML Kit, ya que proporciona mejor UX mediante detección de múltiples códigos.

Object Detection y Pose Detection en ML Kit

ML Kit Object Detection — API para detectar y rastrear objetos en imágenes. Detecta objetos de más de 1000 categorías (clases ImageNet) — personas, animales, vehículos, objetos domésticos. Object Detection funciona en dos modos: single-image (foto única) y streaming (flujo de video con seguimiento). El modo streaming rastrea objetos entre fotogramas, asignando a cada uno un ID de seguimiento único.

Pose Detection — API para determinar la pose humana mediante 33 puntos clave (esqueleto): cabeza, hombros, codos, muñecas, caderas, rodillas, pies. Determina coordenadas (x, y, z) y confianza de cada punto. Pose Detection se usa en rastreadores de fitness (conteo de repeticiones, control de forma), aplicaciones AR (avatar que imita movimientos) y analítica deportiva. Velocidad — 10–30 ms por fotograma según el número de personas.

Object Tracking — ML Kit Object Detection con seguimiento entre fotogramas usa un rastreador basado en Optical Flow. Cuando se detecta un objeto, el rastreador lo sigue sin necesidad de redetección, ahorrando CPU/GPU. Si el rastreador pierde el objeto (movimiento rápido, oclusión), ML Kit reinicia la detección. Según Google (2025), el rastreador mantiene el objeto en el 95% de los fotogramas a velocidades de hasta 30 km/h.

kotlin
// Detección de poses (esqueleto humano)
val poseDetector = PoseDetection.getClient(
    PoseDetectorOptions.Builder()
        .setDetectorMode(PoseDetectorOptions.STREAM_MODE)
        .build()
)

poseDetector.process(inputImage)
    .addOnSuccessListener { pose ->
        pose.allPoseLandmarks.forEach { landmark ->
            val type = landmark.landmarkType // HOMBRO_IZQUIERDO, CODO_DERECHO...
            val position = landmark.position3D
        }
    }

Selfie Segmentation — API para segmentar a una persona de la imagen (separar persona del fondo). Devuelve una máscara de confianza para cada píxel. Selfie Segmentation se usa para difuminar o reemplazar fondos en videollamadas, editores de fotos y aplicaciones AR. La máscara se devuelve como UInt8Array del tamaño de la imagen original — cada píxel contiene un valor de 0.0 (fondo) a 1.0 (persona).

Modelos TFLite personalizados en ML Kit

Custom Model API — la capacidad de cargar y ejecutar sus propios modelos TensorFlow Lite a través de la interfaz de ML Kit. ML Kit proporciona una API Input/Output unificada: ByteBuffer como entrada, FloatArray/TensorImage como salida. Esto permite aprovechar las ventajas de ML Kit (gestión de modelos, procesamiento de imágenes, integración con CameraX) con modelos personalizados para reconocimiento facial, clasificación de objetos, PLN y más.

Carga de un modelo — coloque el archivo .tflite en assets/ (Android) o bundle (iOS) y cárguelo mediante CustomModelDownloadConditions o Firebase Model Manager. Para descargar modelos grandes (5+ MB) use condiciones de descarga: Wi-Fi, cargado, en segundo plano. Google recomienda descargar el modelo en el primer inicio de la aplicación, no en el momento del primer uso.

kotlin
// Cargando modelo TFLite personalizado
val conditions = CustomModelDownloadConditions.Builder()
    .requireWifi()
    .build()
val remoteModel = CustomRemoteModel.Builder("my_model")
    .setRemoteModelName("my_model_v2")
    .build()

remoteModel.download(conditions)
    .addOnSuccessListener { /* model ready */ }
    .addOnFailureListener {
        // Usar modelo incluido desde assets
    }

Optimización de modelos personalizados: use TFLite Converter con compatibilidad de delegate. Para máximo rendimiento cuantice el modelo (INT8) — esto reduce el tamaño del modelo 4 veces y acelera la inferencia 2–3 veces mediante XNNPACK Delegate. ML Kit Custom Model API soporta Dynamic Shape (batch = 1), Image Input (UInt8, Float32) y Tensor Output.

Preguntas frecuentes

¿Qué es ML Kit en Android?

ML Kit es un SDK de Google con modelos ML listos para Android e iOS. Incluye API para reconocimiento de texto (OCR), detección de rostros, escaneo de códigos de barras, reconocimiento de objetos, detección de poses, traducción y segmentación. Funciona en el dispositivo, no requiere internet. Se conecta mediante Google Play Services (Android) o CocoaPods (iOS) mínimamente — con una sola línea de dependencia.

¿En qué se diferencia ML Kit de TensorFlow Lite?

ML Kit — SDK de alto nivel con API listas para tareas específicas (texto, rostros, códigos). TensorFlow Lite — tiempo de ejecución de bajo nivel para ejecutar cualquier modelo TFLite. ML Kit incluye TFLite internamente pero proporciona código listo y optimizaciones para tareas estándar. Si necesita reconocer texto — ML Kit (5 líneas de código). Si tiene su propia red neuronal — TFLite (20+ líneas).

¿ML Kit funciona sin internet?

Sí, todas las API principales de ML Kit (Text Recognition, Face Detection, Barcode Scanning, Object Detection, Pose Detection, Image Labeling) funcionan completamente en el dispositivo sin conexión a internet después de la descarga inicial del modelo. Las API Cloud (Cloud Vision, Natural Language) son opcionales y requieren internet. Para modelos descargados, se necesita internet solo para la primera descarga del modelo.

¿Se puede usar ML Kit en iOS?

Sí, ML Kit es compatible completamente con iOS mediante CocoaPods o Swift Package Manager. Las API son similares a la versión de Android. Para iOS, ML Kit usa Vision Framework y Core ML internamente — los modelos se ejecutan en Apple Neural Engine (A12+). ML Kit en iOS funciona con UIImage, CVPixelBuffer y CMSampleBuffer. Soporta iOS 12+ y Xcode 15+.

¿ML Kit es gratuito?

Sí, las API on-device de ML Kit son completamente gratuitas sin límites en la cantidad de solicitudes. Las API Cloud (a través de Firebase) son de pago después del límite gratuito ($200/mes gratis). Los modelos on-device no requieren una cuenta de Firebase — ML Kit funciona de forma independiente mediante Google Play Services. Para aplicaciones comerciales, ML Kit on-device es una opción segura con costo operativo cero.

Resumen

  • ML Kit — SDK de Google con 14 API ML listas para Android e iOS
  • Text Recognition — OCR para latín (45 idiomas) y CJK, precisión 91–96%
  • Face Detection — 468 puntos de contorno, sonrisa, ojos abiertos, 5–15 ms
  • Barcode Scanning — todos los formatos de código, multi-código, 2–3 veces más rápido que ZXing
  • Pose Detection — 33 puntos del esqueleto humano, seguimiento en tiempo real
  • Custom Model API — sus propios modelos TFLite mediante interfaz unificada
  • On-device — todos los modelos funcionan localmente, gratis, sin internet

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