I'm building an application that will take an image of a single person's whole body and will produce a "mugshot" for that person.
Mugshot meaning an image of the person's whole face, neck, hair and ears at the same general size of another mugshot.
Currently I'm using
http://askernest.com/archive/2008/05/03/face-detection-in-c.aspx
to implement OpenCV and I'm using
harrcascade_frontalface_default.xml
harrcascade_frontalface_alt.xml
harrcascade_frontalface_alt2.xml
harrcascade_frontalface_alt_tree.xml
as my cascades.
I use all of the cascades because a single one will not detect all my faces. After I get all of the faces detected by all of the cascades I find my average square and use that for my final guess of how tall and wide the mugshot should be.
My problem is 3 parts.
My current process is rather slow. How can I speed up the detection process?
Edit: I'm finding that the processing time is directly related to photo size. Reducing the size of the photos may prove to be helpful.
A single cascade will not detect all the faces I come across so I'm using all of them. This of course produces many varied squares and a few false positives. What method can I use to identify false positives and leave them out of the average square calculation? ex.
Edit : I'm implementing an average of values within standard deviation. Will post code soon.
I'm not exactly sure of the best way find the mugshot given the square coordinates of the face. Where can I find face to mugshot ratios?
Edit : Solved this one. Assuming all my heads are ratios of their faces.
static public Rectangle GetMugshotRectangle(Rectangle rFace)
{
int y2, x2, w2, h2;
//adjust as neccessary
double heightRatio = 2;
y2 = Convert.ToInt32(rFace.Y - rFace.Height * (heightRatio - 1.0) / 2.0);
h2 = Convert.ToInt32(rFace.Height * heightRatio);
//height to width ratio is 1.25 : 1 in mugshots
w2 = Convert.ToInt32(h2 * 4 / 5);
x2 = Convert.ToInt32((rFace.X + rFace.Width / 2) - w2 / 2);
return new Rectangle(x2, y2, w2, h2);
}
I just need to get rid of those false positives.
Ok make that 4 issues.
A single cascade could do what all of your cascades do if it is set up this way, plus it does not give you several results to judge from. The cascades you use are maybe different in the collection of teaching pictures they are made of or in some parameters.
A tutorial on how to build an own cascade can be found here. It would be useful to get the pictures used to train the four cascades you use but I don't know if they are publicly available.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With