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

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

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

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

Выбор метода

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

Железо

За основу получения изображений рисунка вен ладони был выбран метод отражения. Для начала на листке бумаги была набросана предварительная модель устройства. Оно должно измерять расстояние от самого устройства до ладони идентифицируемого, измерять температуру поверхности руки (для статистики, захотелось иметь такой функционал), включать и выключать ИК-подсветку. В качестве камеры остановился на веб-камере 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-кабель

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

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

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

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

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

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

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

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

Выводы

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

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

📎📎📎📎📎📎📎📎📎📎