Wednesday 8 January 2014

Fast Face Detection in One Line of Code

                  ****    ****    ****
                  *  *    *  *    *  *
                  ****    ****    ****

                  ****    ****    ****
                  *  *    *  *    *  *
                  ****    ****    ****

                  ****    ****    ****
                  *  *    *  *    *  *
                  ****    ****    ****
(blogger is broken: this is supposed to be a pic)

Based on the work of the last couple of weeks I've written up a short article / paper about the algorithm and created a really basic android demo. I think it's something novel and potentially useful but i'm not sure if i'm just suffering from an island effect and it's already been tried and failed. I tried to find similar research but once outside of the software engineering realm the language changes too much to even know if you're looking at the same thing when you are. Statistics gives me the willies.

Since I did this at home and am not aquianted with the academic process I didn't know what else to do. None of my peers, aquaintances or contacts do similar work for a hobby.

I have created a basic 1990s style `home' page on my ISPs web server to store the paper and application and anything else I may want to put there. This may move in the future (and perhaps this blog will too).

And yes, it really does detect faces in a single line of code (well, significant code) - and we're talking C here, not apl - and on SIMD or GPU hardware it is super duper fast. I haven't even looked at optimising the OpenCL code properly yet.

I wasn't going to but I ended up creating an optimised NEON implementation; I kinda needed something to fill the timing table out a bit in the article (at the time; it filled out afterwards) but I guess it was worth it. I also wrote up a NEON implementation of the LBP code i'm using this afternoon and because it is only 4 bits it is quite a bit faster than the LBP8,1u2 code I used last time, although in total it's a pretty insignificant part of the processing pie.

Now perhaps it is time for summer holidays.

And just to help searchers: This is an impossibly simple algorithm for a very fast image classifier and face detector which uses local binary patterns (LBP) and can be implemented directly using single instruction multiple data (SIMD) processors such as ARM/NEON and scales very well to massively multi-core parallel processors including graphics processing units (GPU) and application processing units (APU). OpenCL, CUDA, AMD, NVidia.

2 comments:

Solerman Kaplon said...

If it works well, Google might be interested as an alternate lock/unlock phone feature

NotZed said...

Face recognition is a slightly different problem, although it will work for that task it needs more work.

I'm trying to think of interesting *personal* uses for the tech that aren't just for advertising, survellience, robo-cops, or spy bots. Apart from perhaps an automated sales assistant or login, FR is only really useful for automated spying.

Expression/emotion (everything from taking good happy snaps to annotating pics/videos for the deaf or looking after isolated individuals), road signs, automatic discrimintive cat doors?

Google doesn't need any help either and aren't likely to be interested in technology that enables disconnected operation.

One of my long-term goals is to enable the sort of technology that's being pushed onto network servers to be held locally in your pocket instead. The hardware is certainly capable of it now.

BTW i'm not sure if this algorithm is good enough on it's own anyway, but it's interesting.