Cómo SmileID escaló la verificación de identidad a más de 18,000 tipos de dispositivos Android con CameraX
Lectura de 4 min
Las apps de verificación de identidad para la banca y el registro de tarjetas SIM requieren capturas de rostros nítidas y de alta resolución para detectar suplantaciones de identidad y deepfakes. Capturar fotogramas lo suficientemente nítidos para las verificaciones de detección de vida y de suplantación de identidad, sin que se produzcan fallas en los dispositivos con poca memoria, es un desafío común para los desarrolladores de cámaras de Android.
Para SmileID, un SDK de verificación de identidad líder en África, este desafío se duplica debido a un ecosistema de hardware diverso. Android representa el 85% de la participación de mercado de dispositivos de destino de SmileID, incluidos los smartphones de nivel básico con procesadores muy limitados, los modelos regionales poco conocidos y las terminales de punto de venta (PdV) personalizadas y resistentes.
Antes de adoptar CameraX, SmileID enfrentó obstáculos de ingeniería de cámara estándar, pero abrumadores: feeds de vista previa estirados, orientaciones de sensores rotadas, fallas por falta de memoria (OOM) y errores personalizados del fabricante de equipos originales (OEM). Con la migración de sus SDKs de Android principales a CameraX, SmileID transformó estos desafíos en una gran ventaja empresarial.
Según SmileID, la migración de sus SDKs de Android a CameraX generó los siguientes resultados:
| Métrica | Impacto de la migración a CameraX |
|---|---|
| Crecimiento de la adopción del SDK | 20 veces más para el año 2 (en comparación con las 2 o 3 veces más antes de CameraX) |
| Tasas de aprobación de la verificación | Aumento del 20% para las apps que usan los SDK de SmileID |
| Resolución de captura | Aumento de 4 veces en los píxeles de selfies y pruebas de vida sin sobrecarga de red |
| Compatibilidad con modelos de dispositivos | Más de 18,000 tipos de dispositivos Android compatibles |
| Total de verificaciones escaladas | Se procesaron más de 160 millones de verificaciones de identidad |
El desafío: Hardware fragmentado y problemas con las APIs heredadas
Para confirmar que un usuario es quien dice ser, el SDK de SmileID debe capturar fotogramas de selfies de alta resolución para realizar verificaciones de actividad integradas en el dispositivo y detectar deepfakes basados en la nube.
En las implementaciones de las APIs de Camera1 heredada y Camera2 de bajo nivel, lograr esto de manera coherente era difícil por varios motivos:
- Personalizaciones y peculiaridades de los OEM: Los dispositivos de diferentes fabricantes informaban las orientaciones físicas del sensor de la cámara de manera diferente, lo que generaba vistas previas rotadas o capturas de rostros con una orientación incorrecta.
- Distorsiones de la relación de aspecto: Solicitar un tamaño de fotograma específico en dispositivos económicos suele provocar que la vista previa de la cámara se estire vertical u horizontalmente, lo que distorsiona el rostro del usuario y hace que la verificación biométrica sea inútil.
- Fallas por falta de memoria (OOM): El procesamiento de imágenes sin procesar de alta resolución en dispositivos con poca RAM (a menudo, 1 GB o menos) generaba fallas fatales de asignación de memoria.
Debido a estos puntos de fricción, el crecimiento interanual de la adopción del SDK de SmileID se limitó a 2 o 3 veces, y muchas verificaciones tuvieron que recurrir a la carga de fotos estáticas a través de una API de REST de alta latencia en lugar de ejecutar verificaciones de actividad integrado en el dispositivo en tiempo real.
La solución: Canalizaciones coherentes con CameraX
SmileID rediseñó sus SDK para dispositivos móviles desde cero con CameraX, que se creó específicamente para abstraer la complejidad del ecosistema de dispositivos subyacente y proporcionar una interfaz de desarrollador coherente y compatible con el ciclo de vida nativo.
Con los casos de uso principales de CameraX (específicamente, Preview y ImageAnalysis), SmileID creó una canalización de cámara sólida y de doble propósito:
- Vista previa: Renderiza una vista previa en tiempo real y con proporciones perfectas del feed de la cámara para guiar al usuario.
- ImageAnalysis: Procesa de forma continua los fotogramas de manera local y en tiempo real para ejecutar la detección automatizada de la prueba de vida y del rostro en el fotograma, y extraer el fotograma de la selfie verificada.
Para capturar detalles ultra nítidos para la detección de deepfakes sin causar fallas de OOM, SmileID agregó la moderna API ResolutionSelector de CameraX directamente a su configuración de ImageAnalysis. Permite que los desarrolladores soliciten una resolución de destino y elijan una regla de resguardo cuando un dispositivo no admita ese tamaño exacto. Por ejemplo, el siguiente diagrama y la configuración de ejemplo ilustran cómo ResolutionSelector evalúa los tamaños candidatos en torno a un objetivo de 1200 x 900:
Aquí tienes el código de muestra correspondiente que indica cómo vincular ResolutionSelector con STRATEGY_KEEP_ONLY_LATEST en tu propia app (usa FALLBACK_RULE_CLOSEST_HIGHER_THEN_LOWER para priorizar la nitidez o FALLBACK_RULE_CLOSEST_LOWER_THEN_HIGHER para limitar el uso de memoria):
import android.util.Size import androidx.camera.core.CameraSelector import androidx.camera.core.ImageAnalysis import androidx.camera.core.Preview import androidx.camera.core.resolutionselector.AspectRatioStrategy import androidx.camera.core.resolutionselector.ResolutionSelector import androidx.camera.core.resolutionselector.ResolutionStrategy import androidx.camera.lifecycle.ProcessCameraProvider import androidx.lifecycle.LifecycleOwner fun configureCameraX(cameraProvider: ProcessCameraProvider, lifecycleOwner: LifecycleOwner, surfaceProvider: Preview.SurfaceProvider, executor: java.util.concurrent.Executor, analyzer: ImageAnalysis.Analyzer) { // 1. Define a resolution strategy requesting high quality (for example, 1200x900px) // and selecting the closest higher (or, if unavailable, lower) resolution. val resolutionSelector = ResolutionSelector.Builder() .setResolutionStrategy( ResolutionStrategy( Size(1200, 900), ResolutionStrategy.FALLBACK_RULE_CLOSEST_HIGHER_THEN_LOWER ) ) .setAspectRatioStrategy(AspectRatioStrategy.RATIO_4_3_FALLBACK_AUTO_STRATEGY) .build() // 2. Configure the ImageAnalysis use case with the resolution selector // and a backpressure strategy that keeps the UI responsive on slow processors. val imageAnalysis = ImageAnalysis.Builder() .setResolutionSelector(resolutionSelector) // Drops older frames if the device's CPU is still busy analyzing the previous one .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST) .build() // 3. Set up the preview stream and attach the Analyzer and SurfaceProvider imageAnalysis.setAnalyzer(executor, analyzer) val preview = Preview.Builder().build().also { it.surfaceProvider = surfaceProvider } // 4. Bind both use cases concurrently to the lifecycle provider try { cameraProvider.unbindAll() cameraProvider.bindToLifecycle( lifecycleOwner, CameraSelector.DEFAULT_FRONT_CAMERA, preview, imageAnalysis ) } catch (exc: Exception) { // Handle binding failure safely } }
Solicitando fotogramas de píxeles de alta densidad y procesándolos de forma local, SmileID logró un aumento de 4 veces en la resolución de las selfies capturadas. SmileID también comprimió la región recortada del rostro en el dispositivo para que el tamaño de carga de la red fuera idéntico al de su sistema anterior. Esta arquitectura garantizó datos más precisos para sus modelos de aprendizaje automático sin aumentar los costos de datos móviles para sus usuarios.
Cómo CameraX resuelve las diferencias de hardware
La estandarización en CameraX significó que SmileID podía confiar en dos capas de ingeniería de compatibilidad para mantener su SDK estable en todos los dispositivos:
1. Laboratorio de pruebas de cámara y contenido multimedia de Google
La compatibilidad de CameraX está respaldada por una verificación continua del hardware físico. En el Laboratorio de pruebas de contenido multimedia y cámara exclusivo de Google, se ejecuta un paquete de pruebas automatizado todos los días en una matriz rotativa masiva de más de 190 modelos de dispositivos Android físicos. Esto incluye dispositivos que representan diferentes chipsets, versiones de SO y capacidades de hardware.
Para avanzar hacia un comportamiento más coherente en los dispositivos populares, el Lab de pruebas de cámara y contenido multimedia de Google detecta automáticamente las regresiones de la biblioteca antes de que puedan afectar tu código de producción.
2. Soluciones automáticas para peculiaridades de los dispositivos
Los diferentes dispositivos Android tienen distintas limitaciones físicas. Es posible que algunos no puedan establecer parámetros de configuración de exposición personalizados, mientras que otros podrían informar datos de imágenes invertidos cuando se usan ciertas relaciones de aspecto. Para evitar que los desarrolladores contaminen sus bases de código con bloques condicionales complejos basados en el fabricante y el modelo del dispositivo, CameraX mantiene clases internas de peculiaridades de dispositivos, como DeviceQuirks y CameraQuirks, en camera-camera2 (DeviceQuirksLoader.kt). Cuando CameraX detecta un dispositivo con un problema conocido, inserta automáticamente una solución alternativa personalizada. Para SmileID, esto significó que su SDK pudiera funcionar de manera confiable en más de 18,000 tipos de dispositivos Android sin necesidad de parches específicos para cada dispositivo en su base de código.
Escalamiento de hasta más de 160 millones de verificaciones
Con la migración a CameraX, SmileID simplificó la integración del SDK para los desarrolladores de apps externos.
La eliminación de las distorsiones de la relación de aspecto, las vistas previas lentas y las fallas repentinas por falta de memoria generó un aumento del 20% en las tasas de aprobación de la verificación para los servicios que usan sus SDK. Para las instituciones financieras y las apps de dinero móvil de África, un aumento del 20% en las tasas de aprobación significa que cientos de miles de usuarios legítimos se incorporan correctamente en lugar de abandonar el servicio.
Los desarrolladores tomaron nota. La facilidad de integrar el SDK basado en CameraX generó un aumento de 15 veces en la adopción durante el primer año, que ascendió a 20 veces en el segundo año. Hasta la fecha, SmileID procesó correctamente más de 160 millones de verificaciones de identidad con CameraX.
Crea tu historia de compatibilidad con la habilidad de CameraX
El desarrollo para cámaras no tiene por qué ser difícil. Para ayudar a tu equipo a adoptar los mismos patrones de CameraX que usó SmileID, Android lanzó la habilidad de CameraX para agentes de programación de IA.
Cuando usas la habilidad de CameraX en tu entorno de desarrollo, los agentes de programación de IA, como Gemini, aplican los patrones actuales de CameraX para la migración, la vinculación del ciclo de vida, ConcurrentCamera y MlKitAnalyzer. Ya sea que configures feeds de cámara dual, una vista previa con PreviewView o CameraXViewfinder, o que administres análisis de aprendizaje automático (AA) en tiempo real, la habilidad de CameraX guía a tu agente para que genere código preciso y listo para producción.
- Explora la habilidad de CameraX: Visita el directorio de habilidades para desarrolladores de Android o ejecuta
android skills add cameraxcon la Android CLI para agregar la habilidad a tu herramienta de programación de IA. - Cómo comenzar a usar CameraX: Consulta la documentación oficial de CameraX y haz que tu experiencia con la cámara se ejecute en cualquier lugar.
-
Casos de éxitoGrab es la superapp líder del Sudeste Asiático, que ofrece entregas, movilidad y servicios financieros a millones de usuarios en ocho países a través de una sola app.
Ajesh Pai, Nguyen Van Minh, Tracy Agyemang • Lectura de 5 min -
Casos de éxitoEl equipo creó una base de código de IU nativa de IA que es un 50% más pequeña que la implementación original, a la vez que logró una reducción del 35% en el tiempo de ejecución del agente de IA, un 32% menos de intercambios entre ingenieros y agentes, y una reducción del 33% en el costo de los tokens.
Pavlo Stavytskyi, Rebecca Franks • Lectura de 11 min -
Casos de éxitoWhatsApp es la plataforma de mensajería más grande del mundo, con miles de millones de usuarios en todo el mundo. Es la herramienta de comunicación predeterminada para personas de diversas regiones, ya que conecta a los usuarios a través de mensajes privados, confiables y seguros.
Niharika Arora, Tracy Agyemang, Mayank Jain • Lectura de 8 min
Recibe la información más reciente sobre el desarrollo de Android en tu bandeja de entrada todas las semanas.