Earlier i was writing about detecting hands in camera as part of my diploma thesis. Another part is to detect fingertips. By finger detection you can gain mouse-like experience to any software. Pointing with only one finger can simulate mouse, but using all five can be used for gestures or “multi-touch” (i must be careful with using word ‘touch’ because you are actually not touching anything).
At this point, we are using two cameras at sides of computer/laptop. Each camera detects one hand. this way one can easily work on keyboard and when needed, switch to gesture usage just by raising one or both hands.
To find fingertips, i am using simple finger detection method. At first i find the hand and it’s contour. This is further processed to create convex hull. From the hull and original contour i determine convexity defects, which are basically holes in difference between contour and convexity hull. Each defect is represented with hull distance from contour. This attribute is used to determine wether it is a finger or just some noise on contour.
After gaining all points of the defects, simple function is used to group very near points (there are usually two points on one finger) into one which is representing the finger.
known issues:
algorithm is detecting only pointing fingers, because it is derived from contour. it is not possible to detect fingertips on fingers which are bended or near each other.
also sometimes it is possible that this process finds elements of the hand that match the criteria and determines them as fingertips, but this might be easy to eliminate in specific usage. At this point algorithm is general in use so this specific fixes were not used so far.
next work:
only issue to work with is to eliminate false positives that are currently occuring