Something really strange going on here. Using a half-screen sized chessboard squares and still taking the difference I get this - some highlights, but in other places where it should be specular, such as the end of the nose - nothing! Think its because the screen isn't being used 50/50 black and white.

main problem is that the roughness of the surface of some bits, like the end of the nose is enough to give no difference between black on white and white on black screens. The highlights around the nose are caused by the difference between shadows and non-shadows. I think this can be improved by using only having one square of black vs a white screen. Then we check for only positive differences.

But a 10 minute average shows that the idea is right (striping still there, something wrong with the randomization)
Why is it picking up the edge of the disk label and the outline of the (solid) text on the bottle? This is a high-contrast area (white label on black disk) so perhaps it's natural because of the difference algorithm used. Perhaps the next stage is to use an edge-detection algorithm on the fully-lit image to identify high contrast areas, and subtract these from the results.

Am really glad that the background came out properly black.

Also note the limited angles this works for on the deodorant bottle (~PI/4), but this should be plenty for a shiny nose and reflective eyes when imaging faces.

Repeating lots of time seems to be a sufficient substitute for a quality webcam. What if I got a really good webcam and repeated it lots...?