Finding faces in images with controlled background:
This is the easy way out. Use images with a plain monocolour background, or use them with a predefined static background - removing the background will always give you the face boundaries. The rest is easy going...
Finding faces by color:
If you have access to color images, you might use the typical skin color to find face segments. The disadvantage: doesn't work with all kind of skin colors, and is not very robust under varying lighting conditions...
Finding faces by motion:
If you are able to use real-time video, you can use the fact that a face is almost always moving in reality. Just calculate the moving area, and here you go. Disadvantages: What if there are other objects moving in the background?
Using a mixture of the above:
Combining several good approaches normally yields an even better result. Here are some works on that:
Finding faces in unconstrained scenes:
Well here we go - this is the main thing, the top of them all, the most complicated thing maybe in whole object recognition: Given a black and white still image, where is the face? Humans can do it, so where's the perfect algorithm that can do it, too? Here are some works on it:
There seems to be a revival of edge-based methods, using geometric models. Two top performing methods have been published in the early 2000s:
The breakthrough in face detection happened with Viola & Jones. Using a cascade of "weak-classifiers", using simple Haar features, can - after excessive training - yield impressive results. This approach is now the most commonly used algorithm for face detection. A basic implementation is included in OpenCV.
A nice visualization of the algorithm can be found here.
The Face Detection Homepage. By Robert W. Frischholz