В течение последней недели я изучал и экспериментировал с распознаванием лиц. Предполагаемое приложение для человека, чтобы иметь возможность просматривать информацию о человеке в базе данных (SQL), просто сфотографировав его лицо. Первоначальное ожидание состояло в том, чтобы иметь возможность сжимать лицевой стороной вниз к ключу или хешу и использовать это в качестве базы данных. Это не должно быть чрезвычайно точным, так как человек, который ищет информацию, может и, скорее всего, в конечном итоге сделает окончательное сравнение между исходным изображением в файле и человеком, стоящим перед ними.
OpenCV / JavaCV, кажется, является очевидной отправной точкой, и обнаружение лиц, которое оно обеспечивает, работает хорошо, однако реализация Eigenfaces для распознавания лиц не идеальна, потому что онлайн-обучение путем перекомпиляции сотен тысяч пользовательских лиц каждый раз, когда новое лицо нужно добавить в тренировочный набор не будет работать.
Я экспериментирую с использованием SURF-дескрипторов на лице, извлеченном с использованием функций каскада Хаара в OpenCV, и это, кажется, приближает меня к ожидаемому результату, однако я не могу придумать способ эффективного поиска и сравнения примерно 30 дескрипторов ( которые являются 64 или 128 векторов) в базе данных. Я немного читал об алгоритмах LSH и Spectral Hashing, однако реализации для Java не найдено, и моя математика недостаточно сильна, чтобы реализовать их самостоятельно.
Есть ли у кого-нибудь мысли или идеи о том, как это может быть достигнуто, или если это вообще возможно?