Если Вы умеете выделять области лиц на изображениях, то ваша задача сводится к классификации этих областей.
Классификация — известная задача машинного обучения. А у OpenCV есть модуль для
машинного обучения (если не знаете, какой выбрать, выбирайте Support Vector Machines).
Первым делом нужно будет обучить классификаторы. Т.е. составить обучающую выборку (пары лицо-правильный ответ), и настроить по ней алгоритм. Возможно, пометить лица для этой выборки придётся вручную (по-хорошему, обучающая выборка должна быть очень большой, от нескольких тысяч примеров до пределов вычислительных мощностей), а, может быть, вы найдете что-нибудь уже готовое.
Собственно, пайплайн сведётся к приблизительно следующему:
1. Находите область лица (тут используется ваш каскад Хаара)
2. По области строите какое-либо feature-представление лица (например,
HoG-дескриптор, советую поискать в сети, какие фичи люди используют для лиц).
3. Это представлние скармливается обученному классификатору (обученому на таких же представлениях, разумеется)
4. Классификатор выдаёт желанный ответ.
Очень буду рад, если подскажете какие-нибудь решения на JavaScript или Node.js с OpenCV. Хотя, PHP с его OpenCV тоже подойдут
Известный мне OpenCV является библиотекой, написанной на C++, поэтому неясно, с чего бы биндинги для Node.JS отличались от биндингов для php. Хотя ни с теми, ни с другими я не встречался, могу ошибаться.
Если говорить о реализации, то я бы реализовал этот модуль целиком на C++, который бы скопилировал (хоть бы и как модуль Node.JS) и вызывал уже из ноды. Собственно, посмотрите туториалы OpenCV на эту тему, там что-то должно быть.
У Google+ есть функция "находить меня на фотографиях друзей". Собственно, реализована она наверное как-то так же.
Google и Facebook, вероятно, используют гораздо более крутые алгоритмы, чем я описал (ещё бы: ведь там работают лучшие из лучших). Например, Facebook'овый
DeepFace строит 3D модели лица.