Определите FooBarExpert
как конъюнкцию (или дизъюнкцию) соответствующих выражений требует.
template<typename T> concept bool FooBarExpert =
( requires(T a, T b) {
{ a.foo(b) };
} ||
requires(T a, T b) {
{ a.bar(b) };
}
) &&
requires(T a, T b) {
{ a.baz() };
};
Проверьте библиотеку OpenCV, вот ссылка для хорошей Wiki об этом.
И здесь Вы видите пример программы реализации приложения распознавания лиц.
Распознавание лиц определяется как проблема соответствия данному неизвестному изображению поверхности к ряду известных изображений поверхности. То, что Вы ищете, является Обнаружением Поверхности, погуглите его, и необходимо найти много.
Это не полный ответ, но он мог бы помочь. Собственные векторы также используются в распознавании лиц: eigenfaces.