«Быстрое и грязное» распознавание лиц и хранение / поиск в базе данных в Java

В течение последней недели я исследовал и экспериментировал с распознаванием лиц. Предполагаемое приложение состоит в том, чтобы человек мог искать информацию о человеке в базе данных (SQL), просто сфотографировав его лицо. Изначально ожидалось, что будет возможность сжать лицевую сторону до ключа или хэша и использовать его в качестве локапа базы данных. Это не должно быть очень точным, поскольку человек, ищущий информацию, может и, скорее всего, в конечном итоге проведет окончательное сравнение между исходным изображением в файле и человеком, стоящим перед ним.

OpenCV / JavaCV кажется очевидным отправная точка, и обнаружение лиц, которое она обеспечивает, работает хорошо, однако реализация Eigenfaces для распознавания лиц не идеальна, потому что онлайн-обучение путем перекомпиляции сотен тысяч лиц пользователей каждый раз, когда необходимо добавить новое лицо в обучающий набор, не сработает.

Я экспериментирую с использованием SURF. дескрипторы на лице, извлеченные с использованием функций OpenCV Haar Cascade, и это, кажется, приближает меня к предполагаемому результату, однако я не могу придумать способ эффективного поиска и сравнения примерно 30 дескрипторов (которые являются либо 64-, либо 128-мерными векторами) в базе данных. Я кое-что читал об алгоритмах LSH и Spectral Hash, однако для Java не найдено реализаций, и моя математика недостаточно сильна, чтобы реализовать их самостоятельно.

Есть ли у кого-нибудь мысли или идеи о том, как это может быть выполненным, или если это вообще возможно?

6
задан Kara 6 September 2013 в 19:57
поделиться