1 | initial version |
I can only answer the first question. I you would look at haarcascade_frontalface_alt.xml you would notice the line <size>20 20</size> which means the minimal size of face is 20X20 (if I'm not mistaken, It actually means the smallest feature size is 20X20, which in turn means that you can only detect object at size at least 20X20).
Why not just upscale the images?
In any case, when I tried V&J on small faces, I upscaled the images. I used the frontal xml and it gave nice results on frontal images, but when the the person rotated it's head, the detector stopped detecting (couldn't handle even slightly non-profile images).
If your'e also willing to consider solutions outside OpenCV, I can recommend this following post which summarizes 48 face detection API's. Some of the are packages that you can download:
http://blog.mashape.com/post/53379410412/list-of-40-face-detection-recognition-apis
Regarding your other questions - I'm really not sure, but I (and this is my opinion only) would try other existing packages before trying to train my own cascade classifier. This is just from a ROI on "invested time" point of view.
Good Luck.