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

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

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

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

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

1 Ответ

2 голосов
/ 20 апреля 2011

Хеширование не сложно, и вам не нужна степень по математике.

Если предположить, что любые 2 изображения приведут к примерно одинаковому количеству «дескрипторов», то для этого потребуется лишь разумное совпадение с достаточным количеством из них, чтобы получить достаточно высокий коэффициент достоверности.

Насколько специфичны эти дескрипторы, определяет, какой уровень коллизий вы можете принять в своем алгоритме хеширования.

Поскольку у вас есть несколько из них, я бы сказал, что вам не нужно ничего слишком сложного - в конце концов, вы, вероятно, хотите уровень «нечеткости» в вашем поиске?

Начните с чего-то простого - экспериментируйте и уточняйте. Возможно, вы даже обнаружите, что вам понадобится различное хеширование для разных дескрипторов, т. Е. Некоторые могут быть более конкретными, чем другие?

Надеюсь, немного пищи для размышлений.

...