Apparently there was a bug in my code that I did not realize until too late that caused all of my faces to be recognized as smiling_cropped/01.tga. Here is some sample output. A little disappointing. This was using 27 eigen faces. I could plot the data, but it would not be very interesting.
Loaded faces from 'eigen.faces.27' Loaded users from 'user.base.27' Face 'smiling_cropped/20.tga' recognized as being closest too: 0: nonsmiling_cropped/01; MSE: 672.647 Loaded faces from 'eigen.faces.27' Loaded users from 'user.base.27' Face 'smiling_cropped/21.tga' recognized as being closest too: 0: nonsmiling_cropped/01; MSE: 583.075 Loaded faces from 'eigen.faces.27' Loaded users from 'user.base.27' Face 'smiling_cropped/22.tga' recognized as being closest too: 0: nonsmiling_cropped/01; MSE: 310.085 Loaded faces from 'eigen.faces.27' Loaded users from 'user.base.27' Face 'smiling_cropped/23.tga' recognized as being closest too: 0: nonsmiling_cropped/01; MSE: 293.478 Loaded faces from 'eigen.faces.27' Loaded users from 'user.base.27' Face 'smiling_cropped/24.tga' recognized as being closest too: 0: nonsmiling_cropped/01; MSE: 384.744 Loaded faces from 'eigen.faces.27' Loaded users from 'user.base.27' Face 'smiling_cropped/25.tga' recognized as being closest too: 0: nonsmiling_cropped/01; MSE: 373.356 Loaded faces from 'eigen.faces.27' Loaded users from 'user.base.27' Face 'smiling_cropped/26.tga' recognized as being closest too: 0: nonsmiling_cropped/01; MSE: 413.45 Loaded faces from 'eigen.faces.27' Loaded users from 'user.base.27' Face 'smiling_cropped/27.tga' recognized as being closest too: 0: nonsmiling_cropped/01; MSE: 348.017
This is trying to mark 20 faces with 10 eigen faces calculated and parameters .4 .5 .01.
I found some faces, but not exact matches, but the accuracy was very low. This is probably because
my range was incorrect. If the faces do not fall within the range selected it will try to find the
20 best "faces" that are near to the face in the range.
The errors are pretty reasonable. They come close to faces, to the left and to the right, below, but not exactly over students faces. It might be a philosophical argument whether the over-"head" projector is a face or not.
1. According to other plots I have seen in the past and with this quarter it seems as though the algorithm does not improve effectiveness linearly with the number eigenfaces used. This coupled with the time increase when calculating the eigen faces it is better to not create eigen faces from all the training data.
2. IMG_0031 was not very successful either. I think the parameters are incorrect.
I can't find the elf, but if I change the parameters to .3 .5 .1 I can find the man.
Apparently I need to keep working on my code.
Here is the corner of the man's head. The arguments are .4 .5 .01.
The elf found a false positive. I assume this is because the training data did not include enough images to create an average face between a baby face and an adult face. There was also a false negative produced by too the iterations. This is why I found the corner of this dudes head and not the baby face.
I was going to have a third experiment to test some interesting phenomena. Why try to find a face that is on someone's head? Why not try to find it in toast? People have been doing this, so why can't eigen faces?
Unfortunately the image descriptors are incorrect, so I could not run the experiments, but it is a neat idea to see whether you could find the faces in these images. Note: the pooh image is the 'control'. The test is to see whether we can find Michael or Jesus.