eskiuv0.14.1
Caso de estudio

Identidad digital: un núcleo ISO/IEC 39794-5 en Eskiu

Una empresa de identidad digital construye y revisa el registro facial ISO/IEC 39794-5 de cada captura con un solo núcleo en Eskiu. La misma fuente corre como WebAssembly en su SDK para el navegador y se compila a bibliotecas nativas con ABI de C para Android e iOS. Unas 2,500 líneas de Eskiu reemplazan lógica que cada plataforma tendría que implementar por su cuenta.

El contexto

La empresa hace un SDK web de captura biométrica para el alta de clientes: captura de rostro con prueba de vida y captura de identificaciones oficiales y pasaportes. El SDK corre en el navegador del usuario. Las imágenes y las mediciones se quedan en el dispositivo; nada se manda a un servidor para procesarse.

Su salida sigue ISO/IEC 39794-5, el estándar para intercambiar datos de imagen facial. Producirla es más que guardar una foto: el SDK arma el registro y sus formas JSON y XML, lo codifica en ASN.1 y lo envuelve en un bloque CBEFF, mide la calidad y la iluminación de la imagen, extrae la geometría del rostro y la apertura de los ojos a partir de los landmarks, revisa el resultado contra perfiles configurables y escribe un reporte de validación. Todo esto era TypeScript, y los SDK nativos para Android e iOS lo habrían necesitado otra vez en Kotlin y en Swift.

Por qué encajó Eskiu

Qué pasó a Eskiu

ÁreaEn el núcleo
RegistroEl registro público y su serialización en JSON y XML
CodificacionesEl escritor ASN.1 TLV y el bloque CBEFF
Análisis de imagenCalidad e iluminación, calculadas sobre los píxeles RGBA
RostroGeometría, apertura de ojos y confianza de la detección
PolíticaPerfiles, reglas de cumplimiento y reportes de validación

El núcleo son unas 2,500 líneas de Eskiu en 18 archivos, divididos por responsabilidad. TypeScript conserva la API pública y sus tipos, y queda como adaptador de lo que es del navegador: la cámara, Canvas y la lectura de píxeles, los relojes, el parser XML de la plataforma, Web Crypto, la caché y los workers. El worker de calidad carga el mismo núcleo y los mismos perfiles que el hilo principal. El módulo WebAssembly va dentro de un chunk de JavaScript con hash, así que quien integra el SDK lo despliega igual que antes.

Cómo se verificó

La migración conservó el comportamiento existente donde era correcto y los bytes existentes donde estaban definidos: los registros coinciden con las muestras golden del encoder anterior, y las mediciones de imagen coinciden con la implementación anterior en TypeScript sobre fixtures de píxeles deterministas. 210 pruebas cubren el registro, las codificaciones, el worker, las revisiones de la captura final y las mediciones de ojos; otras 81 cargan cada bundle que distribuye el SDK, y la compilación nativa se prueba a través de su ABI de C, sin navegador de por medio. Reformatear las fuentes con eskiuc fmt deja el objeto compilado idéntico byte por byte, y el equipo lo usa para que un cambio de estilo no esconda un cambio de comportamiento.

Las mismas fuentes se compilan en cruzado a objetos ARM64 para Android e iOS. Enlazarlas dentro de las apps nativas es el siguiente paso de la integración.

Los números

ImagenOperaciónMedianaPercentil 95
640×800Calidad3.07 ms3.34 ms
640×800Iluminación2.45 ms2.46 ms
1920×2400Calidad27.15 ms27.29 ms
1920×2400Iluminación22.19 ms22.72 ms

Iniciar el módulo WebAssembly toma 2 ms, y la memoria que deja reservada después de un análisis completo bajó de 52.9 MiB a 23.1 MiB, porque la pasada de iluminación ya no guarda un double por píxel y lo recalcula. Son mediciones sintéticas en una Mac con Apple Silicon bajo Node, que incluyen copiar los píxeles hacia el módulo y leer el resultado; faltan las mediciones en teléfonos de gama de entrada.

La verificación de identidad es un terreno donde un registro tiene que ser el mismo sin importar dónde se produce. Con la lógica escrita una vez en Eskiu, el navegador y las apps nativas la comparten en lugar de mantener tres implementaciones al día.

Empieza en un minuto.

Instala el compilador con un comando, o corre un programa en el navegador primero.