As mentioned in my previous post, face detection is the main bottleneck in my auto-face alignment program.
Cascade classification sucks when lighting and image quality suck. I had always wanted my final program to work without lighting constraints/making a perfect environment. You should be able to stick the camera (just about) anywhere and have it work, and not just the room that I am programming this device in. Cascade classifiers are very fast and useful for other applications, but for times when lighting and image quality sucks, other methods need to be used. An alternative method to Cascade classifiers for face detection is convolutional neural networks. The problem with conv. nets is they are usually computationally expensive. However, I believe and convolutional network architecture, known as You Only Look Once (YOLO), may fit the bill for speed and accuracy. YOLO does have short comings, including being spotty with recognizing smaller objects, however in this application, the program will be recognizing nearby faces, which should not be small.
I have downloaded the necessary data files and example code, and have walked myself through the YOLOv3 tutorial, and I recommend you do the same. Additionally, I have run the OpenCV4 example code for interfacing with YOLO networks, and I have run the example for that code as well. Both examples have been successful. Interestingly, the command line utility (darknet) to run YOLOv3 was much slower than the OpenCV example that loaded in the same network and the same weights on the same images. The darknet utility took around 2 minutes to run, while OpenCV took around 10 seconds, which is promising as I will be interfacing with the YOLO network through OpenCV.
Thanks to the promising results so far with the YOLO network, I will continue development of facial detection using the YOLO network. I hope to train a much smaller network with 1 class of labels (the face label) in order to speed up detection time.