Резюме
Либо ваш SDK предоставляет способ преобразования отпечатка пальца, снятого с его датчика, в строку, подходящую для расслабленного/приблизительного сопоставления с образцом с использованием регулярных выражений, либо в двоичный битовый вектор фиксированного размера, подходящий для двоичного сопоставления; или вам нужно найти библиотеку, чтобы сделать это преобразование самостоятельно. Все остальные случаи, хотя и возможны теоретически, просто непрактичны.
Вы ничего не можете сделать только с изображениями.
И в этом случае Secugen SDK допускает только доступ к изображению (я полагаю, в диагностических целях) и ему нужно запустить саму проверку (и для этого вам нужен комплект 1:N; комплект 1:1 не подойдет). Если вы все еще хотите продолжить это, я включу предложение внизу. Имейте в виду, на самом деле не рекомендуется.
Скучные детали
Отпечатки пальцев слишком похожи друг на друга, чтобы их можно было найти в стандартном поиске изображений. Хуже того, один и тот же отпечаток пальца одного и того же человека никогда не будет выглядеть одинаково при любых двух чтениях. Различное давление, скорость, направление, температура окружающей среды, датчик и уровень влажности кожи приведут к различным изображениям. По сути, вы можете ничего делать до тех пор, пока не преобразуете свой отпечаток пальца в "вектор признаков".
Вместо этого существуют функции (и они должны быть в вашем SDK) для преобразования изображения отпечатка пальца в список особых характерных точек (пересечений, завитков и т. д., называемых minutiae), вместе с их относительным расположением и другими параметрами. параметры. Уровень, до которого это происходит, зависит от используемого SDK и библиотеки: существует более одного метода. Целеустремленность для очень конкретного сенсора помогает, но тогда методы различаются тем, что они предлагают (например, надежностью, устойчивостью к небольшим поворотам отпечатков пальцев и т. д.). См. эту статью в качестве примера, а также ссылки на другие методы.
Некоторые наборы не позволяют этого (не предоставляют вектор признаков пользователю) и предоставляют только средства сравнения двух изображений отпечатков пальцев, обычно совмещая их с помощью PCA, а затем запуская прямое сопоставление контрольных точек. Это очень хорошо работает для нескольких изображений, но запустить время на поиск изображения в базе данных может быть разрушительным, настолько, что для этой задачи существует специальное оборудование (погуглите «Системы автоматической идентификации отпечатков пальцев»).
Когда у вас есть вектор признаков, вам нужно преобразовать его в хранимый объект SQL, который может быть строкой или серией столбцов в кортеже. Как это сделать, зависит от того, как построен вектор. Природа этого объекта будет определять, какой поиск вы сможете выполнять. Этот перевод можно выполнить несколькими способами, и это определенно не что-то вы должны попробовать сами.
Это также связано с тем, что даже после векторизации отпечатков пальцев у вас все равно не будет точного совпадения. Даже между двумя отпечатками пальцев одного и того же человека, снятыми в течение одной минуты. Вместо этого у вас будет несколько положительных совпадений и несколько отрицательных совпадений, и вам нужно будет установить доверительный порог для обоих («это он», «это не он», «не могу сказать»). А также решить, допускать ли и до какой степени ложные срабатывания («Да, это он!» — но это не так) и ложноотрицательные («Нет, это не он» — и это было). На дверном замке вы не хотите ложных срабатываний, но можете допустить ложный отрицательный результат (вы просто снова проводите пальцем). В уголовном расследовании нельзя допустить, чтобы ложноотрицательный результат ускользнул от преступника, и вы можете принять дюжину ложноположительных результатов (вы проверите их алиби позже...), но не сотню (вы не можете проверить ни одного сотни человек, и у некоторых из них не будет алиби - всех не арестуешь).
А для больших баз данных вам всегда придется запускать первый проход, в результате чего вы ограничиваете поиск теми отпечатками, которые имеют разумное инвариантное совпадение признаков (например, "абсолютное число оборотов между 75% и 125% выборки). Это необходимо для уменьшения количества кортежей, которые вы затем будете подвергать дальнейшему неинвариантному анализу, который намного дороже и определенно не может быть выполнен со стандартными функциями MySQL.
Другой подход заключается в преобразовании отпечатка пальца в представление закодированной строки, чтобы поиск может быть выполнено с использованием разумного лексикографического подхода, доступного в основной базе данных (например, регулярное выражение плюс расстояние Левенштейна). Ваш SDK либо поддерживает это преобразование строк, либо нет; он включает в себя одно, а возможно, и несколько преобразований в области признаков и спектральной области. Надежность метода зависит от того, сколько признаков можно втиснуть в строку (чем больше у вас подписей, тем точнее должно быть совпадение, чем больше вам нужно признаков, тем длиннее строка).
Вы можете использовать некоторую внешнюю библиотеку, которая выполняет кодирование и проверку для вас, используя подходящий алгоритм.
Даже такая простая вещь, как «возврат ближайшего совпадения или определение того, есть ли совпадение вообще?» сильно зависит от того, как отпечаток пальца обрабатывается перед сохранением. Вот почему обычно SDK предоставляют высокоуровневый интерфейс для сопоставления с отпечатком пальца, и они сами выполняют тяжелую работу. Иногда эту тяжелую работу вообще невозможно перевести в базу данных (или не без огромных трудностей); например, если «зачисление» на самом деле является обучением нейронной сети, а не вставкой вектора признаков в базу данных.
Грязный взлом
У вас девять миллионов пользователей (кто вы, ФБР?) и разрешение на получение девяти миллионов отпечатков пальцев. И у вас есть этот SDK. И о сопоставлении девяти миллионов изображений не может быть и речи. Но по указанным выше причинам вы можете задать SDK только вопрос "Есть ли это изображение в вашей базе данных?" и получить список, скажем, из трех имен с «Да на 99%, да на 92%, да на 90%».
Вы можете возможно сделать это: запустить очень высокий уровень, очень грубый биннинг на изображении, основанный на чем-то действительно макроскопическом. Я не знаю, может быть, количество мелких деталей хребта. Вам нужно будет сделать это, изучив изображение; возможно, OpenCV может вам помочь. Вы получите число от 1 до N, и это число будет ненадежным, с погрешностью, скажем, 2%.
Ключевым моментом здесь является то, что вы должны быть уверены, что SDK никогда не скажет, что отпечаток, который должен войти в блок X, когда-либо совпадет с отпечатком, который вы поместили в блок Y.
Затем вы можете построить пятьдесят баз данных с одной пятидесятой пользователей в каждой, предполагая (скорее: надеясь), что ваше распределение параметров является достаточно плоским, а не крутым гауссовским. При анализе отпечатка пальца вы можете скопировать в каталог базы данных SDK одну из пятидесяти баз данных, соответствующую значению X от имеющегося у вас отпечатка пальца, и в которой вы будете хранить только тех пользователей с таким же значением X. Из-за неопределенности некоторые пользователи будут находиться в двух базах данных, но таким образом вы уменьшите проблему в пятьдесят (или, может быть, в сорок пять) раз.
Вам все еще нужно вызвать функцию сопоставления SDK, поскольку у вас нет другого способа классифицировать входящий отпечаток пальца; но вы, возможно, можете сократить время выполнения до управляемых пропорций.
person
LSerni
schedule
14.05.2016
SHA1
). В вашей таблице будут столбцы(id, unique_id, fingerprint_image)
. Чтобы соединиться сmembers
, используйте соединительную таблицуmembers2fingerprints (member_id, fingerprint_id)
. Затем, когда вы сканируете отпечаток пальца, хешируйте результат и запрашивайте свою базу данных. Это должно вас заинтересовать, если у вас есть еще вопросы - стреляйте. - person N.B.   schedule 14.05.2016