Вторичная разработка датчика отпечатков пальцев в Delphi
1. Знакомство с датчиком отпечатков пальцев
Отпечатки пальцев имеют репутацию «первых вещественных доказательств». Вывод научного сообщества по поводу отпечатков пальцев таков: если предположить, что на Земле проживает 5 миллиардов человек, то потребуется 300 лет, чтобы появились два одинаковых отпечатка пальца. Видно, что уникальность отпечатков пальцев имеет неопровержимый статус.
Датчики отпечатков пальцев впервые изменили цифровые системы безопасности, какими мы их знаем. Раньше все полагалось на пароли. Вы должны использовать свое собственное имя пользователя и настроить свою систему. Вы должны прикрывать клавиатуру, чтобы другие не могли увидеть ваш пароль. Однако, если вы не будете осторожны, любой может легко украсть ваш пароль.
Соответствующие эксперты прогнозируют: «Благодаря системе распознавания отпечатков пальцев мы расширили потребности в безопасности домашних и деловых пользователей компьютеров. В ближайшем будущем, будь то локальная сеть или Интернет, регистрация или доступ к данным безопасности, это будет невозможно. Больше не нужны пароли, все, что нужно, — это прикосновение пальца».
2. Введение во вторичную разработку сканера отпечатков пальцев.
В настоящее время в мире существует множество производителей сканеров отпечатков пальцев, пользующихся большим влиянием. Серия DigitalPersona U.are.U является наиболее широко используемой. DigitalPersona является крупнейшим в мире производителем компьютерных клавиатур. в сделке с Chicony Electronics об интеграции системы безопасности U.are.U от DigitalPersona, распознающей отпечатки пальцев, в клавиатуры, изготовленные, в частности, для HP, Compaq и IBM.
Вторичная разработка датчика отпечатков пальцев, представленная в этой статье, основана на U.are.U 2000 компании DigitalPersona. U.are.U — это аббревиатура от you are you (вы — это вы) U.are.U 2000 Micro Fingerprint Collection. Устройство может автоматически считывать изображения отпечатков пальцев и передавать цифровые изображения отпечатков пальцев на компьютер через интерфейс USB. Это идеальный аксессуар для ноутбуков, настольных компьютеров и других компьютерных устройств, требующих аутентификации.
U.are.U 2000 — недорогой компактный сканер отпечатков пальцев. Он объединяет прецизионную оптическую систему, светодиодный источник света и CMOS-камеру для совместной работы, обеспечивая контроль напряжения и автоматическую коррекцию во время захвата изображения, а также использует готовый к использованию USB-интерфейс U.are.U 2000 для сканирования и сбора отпечатков пальцев. чтобы привести к созданию алгоритмов, приложений и интерфейсов распознавания отпечатков пальцев DigitalPersona U.are.U для универсального диспетчера аутентификации DigitalPersona (UAM) — эти приложения, связанные с отпечатками пальцев, включают Windows Вход в систему, блокировка экрана, замена пароля и зашифрованный диск.
Приобретая аппаратные продукты с датчиком отпечатков пальцев, продавцы обычно включают в себя драйверы оборудования, руководства по продуктам, вторичные комплекты разработки и примеры программ разработки. С помощью комплекта разработки программного обеспечения (SDK) в приложение можно добавить функцию распознавания отпечатков пальцев.
3. Ключевые технологии в процессе вторичной разработки сканеров отпечатков пальцев
1.dll вызов
Во-первых, давайте познакомимся с методом вызова dll в комплекте разработки датчика отпечатков пальцев в Delpi. Поместите uruShell.dll в пакет разработки в каталоге программы или в системном каталоге. Для ясности операторы вызова DLL сосредоточены в программном модуле Shelluru.pas, в который экспортируются функции uruShell.dll и создаются соответствующие справочные операторы. Конкретный исходный код выглядит следующим образом:
отряд Шеллуру;
интерфейс
использует окна, сообщения;
константа
FT_OK = 0 // Успех;
FT_ERR_NO_INIT = -1 // Нет инициализации;
FT_ERR_UNKNOWN_DEVICE = -10 // Неизвестное устройство;
FT_ERR_DEVICE_CONNECTED = -18 // Устройство подключено;
FT_ERR_NO_DEVICE_CONNECTED = -19 // Невозможно подключить ни одно устройство;
MAX_REGISTER_COUNT= 8 // Максимальное количество регистров
ERR_REGISTER_FAIL= -110 // Регистрация не удалась;
ERR_VERIFY_FAIL= -111 // Проверка не удалась;
ERR_REGISTER_COUNT= -112 // Количество регистраций;
{Ниже приведено специальное сообщение: сообщение о получении отпечатка пальца MSG_FINGER_CAPTURED }MSG_WAITING_FOR_IMAGE сообщение об ожидании отпечатка пальца.
MSG_FINGER_CAPTURED= WM_USER + 80;
MSG_WAITING_FOR_IMAGE= WM_USER + 81;
тип
PRegisterPixels = ^TRegisterPixels;
TRegisterPixels = массив [1..MAX_REGISTER_COUNT] указателя;
///uru_Init инициализирует датчик отпечатков пальцев. Параметры: numOfDev возвращает количество датчиков отпечатков пальцев, подключенных к компьютеру. FeatureLen возвращает длину данных отпечатка пальца.
функция uru_Init (var numOfDev, FeatureLen: целое число): целое число;
///uru_Connect подключается к определенному датчику отпечатков пальцев. Параметр: номер датчика отпечатков пальцев DeviceNo.
функция uru_Connect (DeviceNo: целое число): целое число;
///uru_Terminate отключается от датчика отпечатков пальцев. Параметр: номер датчика отпечатков пальцев DeviceNo.
процедура uru_Terminate (Номер устройства: целое число);
///uru_AllocFeature назначает адрес данных отпечатка пальца. Параметры: указатель адреса, возвращаемый Feature.
процедура uru_AllocFeature (var Feature: указатель);
///uru_FreeFeature освобождает выделенный адрес. Параметры: указатель адреса, возвращаемый Feature.
процедура uru_FreeFeature (var Feature: указатель);
///uru_GetImageWidth получает ширину изображения отпечатка пальца.
функция uru_GetImageWidth: целое число;
///uru_GetImageHeight получает высоту изображения отпечатка пальца.
функция uru_GetImageHeight: целое число;
///uru_Register функция регистрации отпечатков пальцев. Параметры: дескриптор окна hwnd, используемый для передачи сообщения, номер датчика отпечатков пальцев DeviceNo;
///fngCount время регистрации отпечатков пальцев; указатель подключения изображения отпечатка пальца. Особенности указатель данных регистрации отпечатков пальцев.
функция uru_Register (hwnd: HWND; DeviceNo, fngCount: целое число; Пиксели: PRegisterPixels; Функции: указатель): целое число;
///uru_AcquireFeatures функция проверки отпечатка пальца. Параметры: дескриптор окна hwnd, используемый для передачи сообщения, номер датчика отпечатков пальцев DeviceNo;
функция uru_AcquireFeatures (hwnd: HWND; DeviceNo: целое число; Пиксели, функции: указатель): целое число;
///uru_verifyFeatures функция сравнения отпечатков пальцев. Параметры: srcFeatures необходимо сравнить данные отпечатков пальцев; dstFeatures необходимо сравнить данные отпечатков пальцев.
функция uru_verifyFeatures (srcFeatures, dstFeatures: указатель): Boolean;
///функция регистрации dll
процедура uru_DllRegister;
///Прерывание конкретной функции обработки изображений датчика отпечатков пальцев. Параметр: номер датчика отпечатков пальцев DeviceNo.
Процедура uru_StopGetImage(DeviceNO:Integer);Stdcall;
выполнение
константа
DLLNAME = 'uruShell.dll';
{Ниже приведено объявление вызова экспортированной функции uruShell.dll}
функция uru_Init внешняя DLLNAME;
функция uru_Connect внешняя DLLNAME;
процедура uru_Terminate внешняя DLLNAME;
процедура uru_AllocFeature внешнее DLLNAME;
процедура uru_FreeFeature внешняя DLLNAME;
функция uru_GetImageWidth внешняя DLLNAME;
функция uru_GetImageHeight внешняя DLLNAME;
функция uru_Register внешняя DLLNAME;
функция uru_AcquireFeatures внешняя DLLNAME;
функция uru_verifyFeatures внешняя DLLNAME;
процедура uru_DllRegister внешняя DLLNAME;
Процедура uru_StopGetImage;external DLLNAME;
конец.
После завершения вышеуказанной работы вы можете сослаться на файл Shelluru.pas в основном файле проекта, а затем вызвать функции, определенные в файле Shelluru.pas.
2. Сохраните проверенные данные отпечатков пальцев в файле или базе данных.
Вызвав определенные выше функции, мы можем реализовать систему идентификации отпечатков пальцев для регистрации, проверки, хранения данных отпечатков пальцев и повторной проверки (распознавания) отпечатков пальцев. Ниже основное внимание уделяется программной реализации процесса регистрации и проверки отпечатков пальцев:
процедура TForm1.BtnRegisterClick(Отправитель: TObject файл://Регистрация отпечатка пальца);
вар
я: целое число;
начинать
если UserList.Selected = ноль, тогда
начинать
MessageBox(application.Handle, «Сначала выберите пользователя!», nil, MB_OK);
Выход;
конец;
если UserList.Selected.Data <> nil, то
Функция := UserList.Selected.Data file://Файл в настоящее время пуст
еще
uru_AllocFeature (Функция);
если функция = ноль, то файл://Если функция отпечатка пальца пуста
начинать
Status.SimpleText := 'Невозможно выделить память для функций';
Выход;
конец;
для i := от 1 до 4 сделать
начинать
FillChar(Pixels[i]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
Изображения[i].Обновить;
конец;
Status.SimpleText := 'Начать регистрацию' + UserList.Selected.Caption + 'Отпечаток пальца...';
если uru_Register(Handle, DeviceNo, 4, @Pixels, Feature) = FT_OK, то
начинать
Status.SimpleText := UserList.Selected.Caption + ': Регистрация прошла успешно!';
если UserList.Selected.Data = ноль, то
UserList.Selected.Data := Feature;
конец
еще
начинать
если UserList.Selected.Data = ноль, то uru_FreeFeature(Feature);
Status.SimpleText := UserList.Selected.Caption + ': Регистрация не удалась!';
конец;
конец;
Эта функция в основном вызывает функцию uru_Register в DLL для регистрации отпечатков пальцев для пользователей. Регистрация отпечатков пальцев заключается в извлечении значения характеристики отпечатка пальца, выделении памяти для значения характеристики для хранения данных значения характеристики отпечатка пальца и использовании указателя для указания. эту память, чтобы ее можно было восстановить в будущем. После завершения регистрации необходимо немедленно выполнить проверку, чтобы убедиться в правильности данных. Процесс проверки выглядит следующим образом:
процедура TForm1.BtnVerifyClick(Отправитель: TObject файл://проверочный отпечаток);
вар
aFeature: указатель;
я: целое число;
путь пальца: строка;
начинать
Fingerpath:='C:/finger'+Edit9.Text+Edit10.Text;//Путь хранения данных отпечатка пальца
если UserList.Selected = ноль, тогда
начинать
MessageBox(Application.Handle, «Сначала выберите пользователя!», nil, MB_OK);
Выход;
конец;
если UserList.Selected.Data = ноль, то
начинать
MessageBox(Application.Handle, PChar(Format('Пользователь %s еще не зарегистрировал отпечаток пальца, пожалуйста, сначала зарегистрируйтесь!', [UserList.Selected.Caption])) nil, MB_OK);
Выход;
конец;
FillChar(Pixels[5]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
Изображения[5].Обновить;
Status.SimpleText := 'Начать проверку' + UserList.Selected.Caption + 'Отпечаток пальца...';
Функция: = UserList.Selected.Data; file://Необходимо сравнить данные отпечатков пальцев
move(Feature^,byt,len); file://Переместите сегмент в памяти длиной len и переместите данные, начиная с Feature, в массив байтов
uru_AllocFeature(aFeature);//Назначаем адрес данных отпечатка пальца
if (uru_AcquireFeatures(handle, DeviceNo, Pixels[5], aFeature) = FT_OK) и uru_verifyFeatures(@byt, aFeature) тогда
file://uru_AcquireFeaturesПроверка отпечатка пальца
file://uru_verifyFeaturesСравнение отпечатков пальцев
начинать
Status.SimpleText := UserList.Selected.Caption + ': Проверка прошла успешно!';
AssignFile(F,fingerpath);//Назначаем файл
ReWrite(F);//Перезаписываем файл
для i:=0 для len do
Write(F,byt[i]);//Записываем данные датчика отпечатка пальца в файл
CloseFile(F);//Закрываем файл
конец
еще
Status.SimpleText := UserList.Selected.Caption + ': Проверка не удалась!';
uru_FreeFeature(aFeature); файл://освободить память
конец;
Ключом к вышеописанному процессу является быстрое сохранение данных отпечатка пальца в памяти в файл данных после успешной проверки отпечатка пальца. Имя файла данных предпочтительно представляет собой имя пользователя плюс номер, чтобы можно было легко найти соответствующие данные отпечатка пальца пользователя. обнаружено при последующей проверке. Наконец, не забудьте освободить временно выделенную память. Сохраните данные отпечатков пальцев в файле. Затем вы можете открыть файл, чтобы получить файл данных и выполнить процесс сопоставления с текущим пользователем, чтобы проверить правильную личность пользователя. Конкретный процесс выглядит следующим образом:
процедура TForm1.BitBtn2Click(Отправитель: TObject); file://Проверить отпечаток старого пользователя;
вар
aFeature1: указатель;
я: целое число;
начинать
если OpenDialog1.Execute, то
начинать
AssignFile(G,OpenDialog1.FileName);//Указать файл
Reset(G);//Сбросить файл
для i:=0 для len do
Read(G, byt2[i]);//Перемещаем данные датчика отпечатков пальцев из файла в массив byte2
CloseFile(G);//Закрываем файл
конец;
FillChar(Pixels[5]^, uru_GetImageWidth * uru_GetImageHeight, $FF);
Изображения[5].Обновить;
Status.SimpleText := 'Начать проверку' + UserList.Selected.Caption + 'Отпечаток пальца...';
uru_AllocFeature(aFeature1);//Назначаем адрес данных отпечатка пальца
if (uru_AcquireFeatures(handle, DeviceNo, Pixels[5], aFeature1) = FT_OK) и uru_verifyFeatures(@byt2, aFeature1) тогда
Status.SimpleText := UserList.Selected.Caption + ': Проверка прошла успешно!'
еще
Status.SimpleText := UserList.Selected.Caption + ': Проверка не удалась!';
uru_FreeFeature(aFeature1); файл://освободить память;
конец;
Фактически, данные отпечатков пальцев также могут храниться в базе данных, так что можно реализовать систему многоуровневой структуры, доступ к данным отпечатков пальцев осуществляется централизованно в базе данных на сервере. Клиент загружает регистрационные данные на сервер по мере необходимости. считывает его с сервера, когда данные старых пользователей необходимо проверить, обеспечивая безопасность.
4. Резюме
В этой статье рассказывается об использовании U.are.U 2000. Комплект разработки датчика отпечатков пальцев разработан для вторичной разработки для реализации процесса регистрации, проверки, хранения данных и повторной проверки старых отпечатков пальцев. Этот процесс может использоваться в некоторых системах, которым необходимо идентифицировать личность с помощью отпечатков пальцев. На этой основе автор разработал прототип системы управления временным видом на жительство для органов общественной безопасности или жилых поселков, который в основном реализует Функция управления временным видом на жительство в семье. В этой статье представлен только метод вызова DLL в пакете разработки датчика отпечатков пальцев и ключевые процессы регистрации и проверки во вторичной разработке. Что касается подключения, инициализации и отображения изображений отпечатков пальцев. устройства отпечатков пальцев, т.к. оно относительно простое, поэтому подробного обсуждения нет. Читатели могут разработать его самостоятельно на основе функций, предоставляемых dll. Добро пожаловать, пишите мне для обсуждения, мой адрес электронной почты [email protected].