OpenCL har en indbygget funktionalitet til at genkende ansigter, og det er i C. (C++ kompatibelt selvfølgelig)
Det indeholder også diverse datatyper, algoritmer mv., som bruges i computer perception, altså netop det i laver.
Men det er dog kun til at se hvor ansigtet er (det er jo også smart; så har i en boks med selve ansigtet, og i kan ignorer alt andet i billedet).
Til selve genkendelsen, kan jeg anbefale enten Artificial Neural Networks eller Support Vector Machines. Begge er vidt brugt til ansigtsgenkendelse. Et ANN har endda lært at se kønnet på en person blot ved ansigtet, uden nogen speciel domæne viden fra forskernes side.
Jeg har desværre ikke en implementation af ANNs i C++, og jeg fik aldrig skrevet en SVM. Men ved en simpel søgning på C++ og neural network, fandt jeg en masse, så tag blot et kik
Pointen med ANN, er at når du har skrevet systemet, at du så kan lære den op via et træningssæt. Dvs., tag en 5000-10000 billeder af forskellige personer, men hvor der er 100 billeder af samme person, og lav en brute force hvor der fejl korrigeres positivt hvis personen matcher, og negativt hvis personen ikke matcher på billedet. Efter at have trænet netværket i (en del) timer, kan du så begynde at slippe det løs på noget reelt data.
Et sådan netværk er også dynamisk; hvis du giver dine brugere mulighed for at sige at et match er forkert (eller godt), så kan du justere netværket online, og dine brugere kan derved være med til at forme dens funktionalitet. (Det kan jo være godt og skidt)