Биометрическая идентификация по рисунку вен ладони (mini How To)

в 7:58, , рубрики: arduino, Matlab, идентификация, информационная безопасность, метки: , ,

Биометрическая идентификация по рисунку вен ладони (mini How To)

Волею судьбы поступил в один из Российских вузов. На дипломе было решено исследовать одно из направлений биометрической идентификации – идентификацию по рисунку вен ладони. На начальных стадиях было задумано предоставить к защите работающую модель устройства (но все оказалось не так просто).

Для начала нужно было понять, что же собой представляет данный метод и за счет каких средств осуществляется его реализация. Как уже писалось в статье:

«Рисунок вен формируется благодаря тому, что гемоглобин крови поглощает ИК излучение. В результате, степень отражения уменьшается, и вены видны на камере в виде черных линий. Специальная программа на основе полученных данных создает цифровую свертку. Не требуется контакта человека со сканирующим устройством».

На рисунке ниже изображен график поглощения ИК-излучения насыщенной кислородом крови и крови без кислорода.

Биометрическая идентификация по рисунку вен ладони (mini How To)

Выбор метода

Существует два метода получения изображения рисунка вен ладони. Метод отражения (Reflection) позволяет разместить все компоненты устройства в одном корпусе, за счет чего уменьшается размер. Также снижается психологический барьер (не нужно никуда засовывать руку). Метод пропускания ИК-света (Transmission) заключается в установке ИК-подсветки с тыльной стороны ладони, а сама камера с фильтром устанавливается со стороны ладони и принимает ИК-излучение, проходящее через всю ладонь. С помощью метода пропускания получаемые изображения более детализированные.

Биометрическая идентификация по рисунку вен ладони (mini How To)

Железо

За основу получения изображений рисунка вен ладони был выбран метод отражения. Для начала на листке бумаги была набросана предварительная модель устройства. Оно должно измерять расстояние от самого устройства до ладони идентифицируемого, измерять температуру поверхности руки (для статистики, захотелось иметь такой функционал), включать и выключать ИК-подсветку. В качестве камеры остановился на веб-камере Logitech B910. Испытания моделей устройства, а их было аж 4, выявили недостатки трех предыдущих камер. Первая модель была с камерой LinkSprite JPEG Color Camera TTL Interface. Процесс передачи изображения на ПК ограничивался скоростью порта, пришлось от нее отказаться. Также были проверены еще 2 noname веб-камеры, но получаемые изображения были очень плохого качества. Далее буду описывать только последнюю модель.

Был составлен список компонентов:

  1. Arduino Project Enclosure — небольшой корпус для Arduino проектов
  2. Infrared Thermometer — MLX90614 — ИК-термометр
  3. USB HUB — для подключения камеры и arduino одному кабелю
  4. ORduino Nano — ATMega168
  5. Infrared Proximity Sensor — Sharp GP2Y0A21YK — ИК-датчик расстояния (от 10 до 80см)
  6. Logitech B910 HD Webcam
  7. 2 транзистора
  8. 2 резистора 4.7кОм, 6-470Ом
  9. 6 ИК-диодов 850нм
  10. Фототранзистор (для измерения засветки прибора посторонним светом, в экспериментах не участвовал, но планировался)
  11. USB B разъем
  12. IR Filter 850nm
  13. USB-кабель

Схема подключения тут (с физикойэлектротехникой на вы, за последствия не ручаюсь). Процесс сборки заключался в выпиливании в центре корпуса окружности меньшего диаметра чем ИК-фильтр. Затем фильтр был приклеен на клей (супер-момент). Сначала вместо супер-момента пользовался клеющим пистолетом, но камера сильно нагревалась (особенность Logitech B910) и клей переставал держать. Выпиливалось отверстие для ИК-термометра. Также из коробки от ИК-фильтра было сделано «крепление» для сенсора расстояния. Камера была разобрана и минимизирована за счет удаления корпуса и каркаса, осталась только плата. С объектива камеры был удален ИК-фильтр, который не пропускал ИК лучи (процесс удаления фильтра можно посмотреть тут). Далее камера была также установлена на дно корпуса с помощью клея. Вокруг камеры симметрично установил ИК-диоды. Чтобы не было засветки от диодов на объективе камеры, от объектива нарастил из остатков корпуса и двухстороннего скотча, что то вроде кожуха до ИК-фильтра.

Сборка:

Биометрическая идентификация по рисунку вен ладони (mini How To)

В сборке устройство имеет вид:

Биометрическая идентификация по рисунку вен ладони (mini How To)

ПО

Arduino

Управление всеми компонентами устройства (кроме камеры) должна осуществлять arduino. Это датчик расстояния, температурный датчик и ИК-подсветка. В совокупности алгоритм работы заключается в следующем:

  • с ПК поступает команда о старте работы датчика расстояния и температурного датчика с последующим выводом их значений в порт
  • как только значение датчика совпадают с занесенными значениями в ПК, происходит отключение датчика расстояния (его луч делает засветку на получаемых изображениях)

Далее если значения совпали:

  • включается ИК-подсветка
  • делается снимок
  • выключается ИК-подсветка
  • переход к начальному этапу
PC

Полученные с устройства изображения должны далее как то обрабатываться и распознаваться. Для написания ПО для ПК была выбрана программная среда Matlab. В качестве инструмента распознавания использовался стандартный компонент Matlab Neural Network Toolbox. Но перед тем как подавать изображения для обучения и распознавания их нужно обработать, а именно выделить основные признаки.

Получаемые изображения с устройства:

Биометрическая идентификация по рисунку вен ладони (mini How To)

Можете себе представить, какими же были снимки с предыдущих моделей? Да, не ахти.
Далее были попытки улучшения изображения для выделения вен, поиски фильтров. Тяжело это делать когда не знаешь как, что то получалось, что то нет. Но наткнувшись на сайте pudn.com на алгоритм выделения вен мелькнула надежда. Для того чтобы его скачать, нужно было сначала поделиться какими-нибудь своими наработками. Пришлось отправлять лабу сделанную в матлабе по фазиматематике (fuzzy logic). Через день получил письмо с возможностью скачать (40 поинтов). Алгоритм был написан студентом из поднебесной (спасибо тебе, кто бы ты ни был).

После подстройки алгоритма под себя:

Биометрическая идентификация по рисунку вен ладони (mini How To)

Не плохо, да? Это тоже самое изображение, но уже что то. Теперь осталось набить базу эталонными изображениями и обучить сеть. После обучения выяснилось, что инвариантность изображений очень маленькая. Оказалось что на моей руке вены отчетливо различаются, а на некоторых руках качество изображений мягко говоря «не очень». На каждую руку было собрано по 100 эталонных изображений. В качестве отрицательной выборки использовались зашумленные изображения и изображения без рук (локти, кулаки и т.п.). В выборку были включены руки двух человек.

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

Выводы

Тут можно лишь сказать, что тема интересная и она до конца не раскрылась из-за нехватки времени и необходимых навыков. Также не успел проверить устройство на «неживые сравнения». Не был задействован фототранзистор (для подстройки камеры под освещение) и датчик температуры (хотя информация с него получалась, но никак не учитывалась).

Исходники для arduino и matlab есть, но стыдно показывать, ибо писалпереписывал очень торопясь успеть, попутно переделывая устройство.

Используемые источники

  1. Nadort, A. The Hand Vein Pattern Used as a Biometric Feature [Text]: Literature thesis for Master of Science programmed Physics of Life / A. Nadort, — Amsterdam: Medical Natural Sciences at the Free University, 2007. – 179 с.
  2. Fuksis, R. Palm Vein Biometrics Based on Palm Infrared Imaging and Complex Matched Filtering [Text]: The 12th ACM Workshop on Multimedia and Security / R. Fuksis, M. Pudzs, M. Greitans, — Rome, 2009. – 27 с.

Автор: YoYa

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js