Fuente: https://github.com/thearn/webcam-pulse-detector/
webcam-detector de pulsos
- ACTUALIZACIÓN: ahora con Python 3.5+ y soporte OpenCV 3.0+
Aplicación precompilada autónoma (sin dependencia):
- Descargar para Windows 7 y 8: webcam-pulse-detector_win.zip (42 Mb)
- Descargar para Mac OSX 10.6 (y posterior): webcam-pulse-detector_mac.zip (21 Mb)
- Debian / Ubuntu / Mint Linux: muy pronto. Por ahora, se recomienda que ejecute desde el origen en la
no_openmdao
rama si solo quiere probar las cosas.
La aplicación se puede ejecutar simplemente ejecutando el archivo binario contenido en el archivo zip para su plataforma. Este código también puede ejecutarse desde la fuente siguiendo las instrucciones a continuación.
Un código de Python que detecta la frecuencia cardíaca de una persona con una cámara web o una cámara IP de red común. Probado en OSX, Ubuntu y Windows.
Cómo funciona:
Esta aplicación utiliza OpenCV para encontrar la ubicación de la cara del usuario y luego aislar la región de la frente. Con el tiempo, se recopilan datos de esta ubicación para estimar la frecuencia cardíaca del usuario. Esto
se hace midiendo la intensidad óptica promedio en la ubicación de la
frente, solo en el canal verde de la subimagen (puede existir una mejor
relación de mezcla de color, pero el canal azul tiende a ser muy
ruidoso). Los
datos fisiológicos se pueden estimar de esta manera gracias a las
características de absorción óptica de la hemoglobina (oxi) (consulte http://www.opticsinfobase.org/oe/abstract.cfm?uri=oe-16-26-21434 ).
Con buena iluminación y ruido mínimo debido al movimiento, se debe aislar un latido estable en aproximadamente 15 segundos. Otras formas de onda fisiológicas (como las ondas de Mayer ) también deben ser visibles en el flujo de datos sin procesar.
Una
vez que se ha estimado la frecuencia cardíaca del usuario, también se
calcula la variación de fase en tiempo real asociada con esta
frecuencia. Esto
permite que el latido del corazón sea exagerado en el procesamiento del
cuadro posterior al proceso, lo que hace que la ubicación de la frente
resaltada se sincronice con el latido del corazón del usuario.
El
soporte para la detección en múltiples individuos simultáneos en el
flujo de imágenes de una sola cámara es definitivamente posible, pero en
este momento solo se extrae la información de una cara para su
análisis.
El orden general de flujo de datos / ejecución para el procesamiento de señales en tiempo real se ve así:
Requisitos:
- Python v2.7 o v3.5 +)
- OpenCV v2 +
- Numpy, Scipy
Inicio rápido:
- ejecuta get_pulse.py para iniciar la aplicación
python get_pulse.py
- Para funcionar en una cámara IP, establecen el
url
,user
ypassword
cuerdas en la línea 134 deget_pulse_ipcam.py
, a continuación, ejecute:
python get_pulse_ipcam.py
Esto fue probado en un Wowwee Rovio.
- Si hay un error, intente ejecutar
test_webcam.py
en el mismo directorio para verificar si su instalación de openCV y su cámara web pueden funcionar con esta aplicación.
Notas de uso:
- Cuando se ejecute, se abrirá una ventana que muestra una transmisión desde la cámara web de su computadora.
- Cuando se ha aislado una ubicación de la frente, el usuario debe presionar "S" en su teclado para bloquear esta ubicación y permanecer lo más quieto posible (la ventana de flujo de la cámara debe estar enfocada para que el clic se registre). Esto congela la ubicación de adquisición en su lugar. Este bloqueo se puede liberar presionando "S" nuevamente.
- Para ver un flujo de los datos medidos a medida que se recopilan, presione "D". Para ocultar esta pantalla, presione "D" nuevamente.
- La pantalla de datos muestra tres trazas de datos, de arriba a abajo:
- intensidad óptica en bruto
- señal de latido del corazón extraída
- Densidad espectral de potencia, con máximos locales que indican el ritmo cardíaco (en latidos por minuto).
- Con una iluminación constante y un movimiento de cabeza mínimo, se debe aislar un latido estable en unos 15 a 20 segundos. Se muestra una cuenta atrás en el marco de la imagen.
- Si
se mide un gran aumento en la intensidad óptica en los datos (debido al
ruido de movimiento, el cambio repentino en la iluminación, etc.), el
proceso de recopilación de datos se reinicia y se vuelve a iniciar. La sensibilidad de esta función se puede modificar cambiando
data_spike_limit
en la línea 31 de get_pulse.py . Otros parámetros mutables del análisis también se pueden cambiar aquí.
No hay comentarios:
Publicar un comentario