Does this use facial recognition? That is, do you have to actually face the camera, or does it simply use some basic object recognition to determine if something is moving up and down?
In a nutshell, I take a stream of frames from the camera, then do a diff on the frames to see what has moved, I then see if the diff of pixels over time is what I'd expect a pushup to look like using basic logic. The movement of pixels over time should look similar to a sine wave. I threw in some simple logic to account for noise in the data.