A simple program I made with traditional computer vision techiniques in OpenCV. Unlike every other hand detection method I found on github, you do not need to isolte your hand against a plain wall. It works by using background subtraction to find keypoints instead of simple image transforms to a binary image. Check out demo video at bottom.
Mirror, convert to grayscale, and blur webcam frame
You are left with a binary image of the estimated foreground but the image is sparse
Provides final output of keypoints (good for fingertip detection), only detectable when moving hand
Draw a circle and have it switch direction when hitting a wall or coming in contact with a hand keypoint. In order to detect collision, use pointPolygonTest function to check if a point within the radius of the circle (10 degree incriments) is within any of the convex hull keypoints.