Heart rate from video
I knew about heartbeat sensors that use light, and I have seen Android applications that use your phone’s camera to measure your heart rate.
Theory
- Blood absorbs light, and the amount of light that gets absorbed/reflected depends on the amount of blood in the area.
- When your heart beats, the amount of blood in your finger changes, and so does the amount of light that gets absorbed/reflected.
- A camera with the flash on can detect these changes in light if you put your finger on the camera.
Implementation
I didn’t need to do this live, so I just recorded a video of my finger on the camera using my phone. I then wrote a quick Python script to run the video through ffmpeg to iterate over each frame as an image.
I used the average pixel lightness as a measure of the amount of light that gets absorbed/reflected. When I plotted this value over time, it looked very obviously like a heartbeat. Like a very typical heartbeat, you can’t miss it.
This was underwhelmingly easy. Perhaps a future project could be to do post-process this data with some filters, or to do it live.