El procesamiento de señales biológicas llega a la web
Desarrollar aplicaciones con señales biológicas en la web ha supuesto, históricamente, crear todo desde cero. Desde los dispositivos de transmisión BLE (Bluetooth de baja energía) hasta los procesos de procesamiento de señales y los decodificadores de protocolos, una cosa está clara: no existe una solución universal estandarizada.
De hecho, en el ámbito de las ciencias del cerebro, la mayoría de las herramientas siguen requiriendo MATLAB y un presupuesto de hardware de seis cifras.
Para los desarrolladores, esto significa que, si se desean datos de señales neuronales o la adquisición de señales biológicas sin contacto, han tenido que montárselo ellos mismos. Este arduo proceso suele incluir la adaptación de código de investigación, lidiar con las API de Web Bluetooth y conformarse con implementaciones lentas en JavaScript de algoritmos que requieren un rendimiento real. Es evidente que se trata de un ámbito que aún no se ha puesto al día con los estándares tecnológicos del siglo XXI.
Con el SDK de Elata, estamos haciendo posible una nueva clase de aplicaciones basadas en señales neuronales anónimas y totalmente abstraídas. No es necesario disponer de hardware costoso para utilizar las aplicaciones. De hecho, no se necesita ningún tipo de hardware; las aplicaciones se pueden utilizar sin contacto a través de la cámara nativa de tu teléfono o ordenador.
El navegador es el entorno de ejecución de aplicaciones más universal del mundo. Es multiplataforma por defecto, no requiere instalación y es accesible para cualquiera a través de una URL. Pero la biosensórica nunca ha tenido cabida en la web: el cálculo ha resultado demasiado pesado para JavaScript, los protocolos de los dispositivos son de un nivel demasiado bajo para la mayoría de los desarrolladores web, y los conocimientos especializados en procesamiento de señales se concentran en laboratorios académicos, no en paquetes de npm.
El SDK de Elata resuelve esto realizando el trabajo más complejo en Rust, compilándolo a WASM y exponiéndolo a través de paquetes de TypeScript que se utilizan como cualquier otra dependencia de npm. El rendimiento es casi nativo y la experiencia del desarrollador está totalmente abstraída; es simplemente un npm install.
Dado que todo se ejecuta en el lado del cliente en WASM, los datos brutos de los sensores nunca tienen que salir del dispositivo. El navegador no es solo el mecanismo de entrega, sino también el entorno de procesamiento.
Dado que se trata de la versión inicial del SDK de Elata, nuestros paquetes de EEG funcionan exclusivamente con los cascos Muse, en particular con el Muse Athena S y el Muse 2.
The Stack
Actualmente, el SDK de Elata se compone de tres paquetes, cada uno de ellos destinado a una modalidad de detección diferente:
@elata-biosciences/rppg-web, procesa el vídeo de la cámara web para extraer señales biológicas. La frecuencia cardíaca se detecta mediante señales PPG remotas, además del análisis de las expresiones faciales y los estados de ánimo. Esta modalidad no requiere ningún hardware.@elata-biosciences/eeg-web, se encarga del procesamiento de señales de EEG. Extracción de potencia de banda en todas las bandas de frecuencia estándar (delta, theta, alfa, beta, gamma), FFT, filtrado y dos modelos de análisis integrados: un «Alpha Bump Detector» que rastrea las transiciones entre estados de relajación y de alerta, y un «Modelo de Tranquilidad» que genera una puntuación continua del 0 al 100 % a partir de la relación de potencia alfa/beta.@elata-biosciences/eeg-web-ble, la capa de transporte Web Bluetooth para diademas de EEG compatibles con HAL. Se encarga de la detección de dispositivos, el emparejamiento BLE y la decodificación del protocolo, y a continuación emite tramas limpias y normalizadas que se canalizan directamente hacia el procesamiento de la señal.
En conjunto, los paquetes abarcan la biodetección sin contacto (cámara), la fisiología de las señales neuronales (EEG) y el análisis del comportamiento, todo ello desde el navegador y con tecnología de código abierto.
El núcleo del SDK de Elata está escrito en Rust y organizado como un espacio de trabajo compuesto por catorce crates que abarcan los flujos de señales mencionados anteriormente. Rust se compila en WebAssembly (WASM) para el navegador y en bibliotecas nativas para iOS, Android y ordenadores de sobremesa a través de UniFFI. Los paquetes de TypeScript envuelven los enlaces WASM con API ergonómicas.
Por qué es importante
Capa de abstracción de hardware (HAL). El proceso de procesamiento del EEG se basa en características HAL que cualquiera puede implementar. Dado que el SDK de Elata es de código abierto, los colaboradores pueden integrar cualquier dispositivo de detección neuronal doméstico en el SDK mediante la implementación de estas características. Para el lanzamiento inicial, el HAL funciona con la gama de diademas de Muse y con un dispositivo sintético para pruebas, pero la interfaz está abierta a cualquier hardware que se incorpore posteriormente.
Dispositivo sintético para desarrollo. El SDK incluye una fuente de EEG sintética configurable con perfiles de señal (relajado, alerta, etc.). Puedes desarrollar y probar toda tu aplicación sin necesidad de disponer de un dispositivo; desarróllala ahora, envíala a personas que ya cuenten con el hardware y cambia al hardware real cuando estés listo.
Compilaciones optimizadas para WASM. El perfil de lanzamiento utiliza una optimización agresiva con LTO, ajustada específicamente para un tamaño binario reducido. Se trata de un SDK diseñado principalmente para navegadores; el tamaño del paquete es importante y lo tratamos como tal.
Un único código fuente para todas las plataformas. El núcleo de Rust se compila en WASM para navegadores, en Swift nativo para iOS y en Kotlin nativo para Android, y se ejecuta directamente en el ordenador de sobremesa. Escribe tu código de procesamiento de señales una sola vez y distribúyelo en todas las plataformas.
Privacidad desde el diseño
Todo el procesamiento se realiza de forma local en el propio dispositivo. Los datos brutos de los sensores, ya sean fotogramas de la cámara o muestras de EEG, se reducen a parámetros fisiológicos en el navegador. El resultado final es un número, no un dato biométrico.
Los datos de potencia de la pulsera o los valores de frecuencia cardíaca no contienen ninguna información de identidad. La identidad se pierde en el proceso porque este nunca la ha buscado. Nada sale del navegador a menos que el desarrollador decida explícitamente que así sea.
Primeros pasos
# Camera-based biosensing (no hardware needed)
npm install @elata-biosciences/rppg-web
# EEG processing + headband connectivity
npm install @elata-biosciences/eeg-web @elata-biosciences/eeg-web-bleimport { Muse, EegProcessing } from "@elata-biosciences/eeg-web";La documentación completa de la API y los ejemplos de uso se encuentran en el repositorio de GitHub y en el directorio de código fuente de cada paquete.
Casos de uso
El objetivo principal de trasladar esta funcionalidad a la web es hacer que las aplicaciones de señales biológicas y de interfaz cerebral sean omnipresentes. Queremos reducir las barreras de entrada para que los desarrolladores web y de aplicaciones puedan lanzar aplicaciones de señales biológicas que antes no podían, y, dado que el procesamiento se realiza en los dispositivos de los usuarios, esto incluye casos de uso especialmente sensibles, como aplicaciones de IA compatibles con el cerebro, juegos y análisis biométricos. Algunos ejemplos concretos:
- Una aplicación de meditación basada en navegador con biorretroalimentación EEG en tiempo real. Conecta una diadema a través de Web Bluetooth, transmite las potencias alfa y beta, y activa un bucle de retroalimentación visual o auditiva.
- Un monitor de estrés que funciona a través de la cámara. Realiza un seguimiento de la frecuencia cardíaca, la variabilidad de la frecuencia cardíaca y las microexpresiones faciales durante una sesión de trabajo sin necesidad de dispositivos wearables, a través de una aplicación móvil, una extensión de navegador o un sitio web.
- Un experimento de neurociencia que se ejecuta íntegramente en Chrome. Se recluta a los participantes a través de un enlace. Estos conceden acceso a la cámara o al Bluetooth, completan el protocolo y usted recopila métricas derivadas, no datos biométricos sin procesar. Sin instalaciones, sin departamento de TI, sin visitas al laboratorio y sin flujos de datos sensibles que proteger.
- Un juego en el que el estado cognitivo determina el desarrollo de la partida. Integra la detección del estado alfa en la mecánica del juego: la relajación recarga un medidor de energía y la concentración mejora la puntería. El dispositivo de entrada es tu cerebro.
No se trata de planes de futuro. Se pueden desarrollar hoy mismo, con los paquetes ya publicados. Y, dado que la barrera de entrada es tan baja, los desarrolladores pueden utilizar modernas herramientas de programación de IA para lanzar aplicaciones en plazos sorprendentemente cortos.
Código abierto y próximos pasos
El SDK de Elata es de código abierto bajo la licencia MIT. Cualquiera puede utilizarlo. Para esta primera versión, buscamos especialmente:
- Creadores ¿Quién instalará estos paquetes y se encargará de su distribución? Queremos ver qué ocurre cuando la biosensórica sea tan sencilla como importar una biblioteca.
- Colaboradores que deseen añadir controladores de dispositivos, algoritmos de procesamiento de señales o nuevos modelos de análisis al núcleo.
- Investigadores que necesitan herramientas de experimentación basadas en navegador y ya están hartos de esperar a que se modernice el proceso de conversión de MATLAB a aplicaciones nativas.
- Desarrolladores de hardware que desean que su hardware funcione con un ecosistema abierto en lugar de con un SDK propietario que solo ellos mantienen.
Por aquí se empieza:
- GitHub: Elata-Biosciences/elata-bio-sdk
- @elata-biosciences/rppg-web
- @elata-biosciences/eeg-web
- @elata-biosciences/eeg-web-ble
Antes no existía una infraestructura para la biodetección en la web. Ahora sí la hay: de código abierto, integrada en el dispositivo y diseñada para no identificar a los usuarios. ¿Qué vas a crear?
