- PVSM.RU - https://www.pvsm.ru -
.jpg)
Волею судьбы поступил в один из Российских вузов. На дипломе было решено исследовать одно из направлений биометрической идентификации – идентификацию по рисунку вен ладони. На начальных стадиях было задумано предоставить к защите работающую модель устройства (но все оказалось не так просто).
Для начала нужно было понять, что же собой представляет данный метод и за счет каких средств осуществляется его реализация. Как уже писалось в статье [1]:
«Рисунок вен формируется благодаря тому, что гемоглобин крови поглощает ИК излучение. В результате, степень отражения уменьшается, и вены видны на камере в виде черных линий. Специальная программа на основе полученных данных создает цифровую свертку. Не требуется контакта человека со сканирующим устройством».
На рисунке ниже изображен график поглощения ИК-излучения насыщенной кислородом крови и крови без кислорода.
-2.jpg)
Существует два метода получения изображения рисунка вен ладони. Метод отражения (Reflection) позволяет разместить все компоненты устройства в одном корпусе, за счет чего уменьшается размер. Также снижается психологический барьер (не нужно никуда засовывать руку). Метод пропускания ИК-света (Transmission) заключается в установке ИК-подсветки с тыльной стороны ладони, а сама камера с фильтром устанавливается со стороны ладони и принимает ИК-излучение, проходящее через всю ладонь. С помощью метода пропускания получаемые изображения более детализированные.
-3.jpg)
За основу получения изображений рисунка вен ладони был выбран метод отражения. Для начала на листке бумаги была набросана предварительная модель устройства. Оно должно измерять расстояние от самого устройства до ладони идентифицируемого, измерять температуру поверхности руки (для статистики, захотелось иметь такой функционал), включать и выключать ИК-подсветку. В качестве камеры остановился на веб-камере Logitech B910. Испытания моделей устройства, а их было аж 4, выявили недостатки трех предыдущих камер. Первая модель была с камерой LinkSprite JPEG Color Camera TTL Interface [2]. Процесс передачи изображения на ПК ограничивался скоростью порта, пришлось от нее отказаться. Также были проверены еще 2 noname веб-камеры, но получаемые изображения были очень плохого качества. Далее буду описывать только последнюю модель.
Был составлен список компонентов:
Схема подключения тут [9] (с физикойэлектротехникой на вы, за последствия не ручаюсь). Процесс сборки заключался в выпиливании в центре корпуса окружности меньшего диаметра чем ИК-фильтр. Затем фильтр был приклеен на клей (супер-момент). Сначала вместо супер-момента пользовался клеющим пистолетом, но камера сильно нагревалась (особенность Logitech B910) и клей переставал держать. Выпиливалось отверстие для ИК-термометра. Также из коробки от ИК-фильтра было сделано «крепление» для сенсора расстояния. Камера была разобрана и минимизирована за счет удаления корпуса и каркаса, осталась только плата. С объектива камеры был удален ИК-фильтр, который не пропускал ИК лучи (процесс удаления фильтра можно посмотреть тут [10]). Далее камера была также установлена на дно корпуса с помощью клея. Вокруг камеры симметрично установил ИК-диоды. Чтобы не было засветки от диодов на объективе камеры, от объектива нарастил из остатков корпуса и двухстороннего скотча, что то вроде кожуха до ИК-фильтра.
Сборка:
-4.jpg)
В сборке устройство имеет вид:
-5.jpg)
Управление всеми компонентами устройства (кроме камеры) должна осуществлять arduino. Это датчик расстояния, температурный датчик и ИК-подсветка. В совокупности алгоритм работы заключается в следующем:
Далее если значения совпали:
Полученные с устройства изображения должны далее как то обрабатываться и распознаваться. Для написания ПО для ПК была выбрана программная среда Matlab. В качестве инструмента распознавания использовался стандартный компонент Matlab Neural Network Toolbox. Но перед тем как подавать изображения для обучения и распознавания их нужно обработать, а именно выделить основные признаки.
Получаемые изображения с устройства:
-6.jpg)
Можете себе представить, какими же были снимки с предыдущих моделей? Да, не ахти.
Далее были попытки улучшения изображения для выделения вен, поиски фильтров. Тяжело это делать когда не знаешь как, что то получалось, что то нет. Но наткнувшись на сайте pudn.com на алгоритм выделения вен мелькнула надежда. Для того чтобы его скачать, нужно было сначала поделиться какими-нибудь своими наработками. Пришлось отправлять лабу сделанную в матлабе по фазиматематике (fuzzy logic). Через день получил письмо с возможностью скачать (40 поинтов). Алгоритм был написан студентом из поднебесной (спасибо тебе, кто бы ты ни был).
После подстройки алгоритма под себя:
-7.jpg)
Не плохо, да? Это тоже самое изображение, но уже что то. Теперь осталось набить базу эталонными изображениями и обучить сеть. После обучения выяснилось, что инвариантность изображений очень маленькая. Оказалось что на моей руке вены отчетливо различаются, а на некоторых руках качество изображений мягко говоря «не очень». На каждую руку было собрано по 100 эталонных изображений. В качестве отрицательной выборки использовались зашумленные изображения и изображения без рук (локти, кулаки и т.п.). В выборку были включены руки двух человек.
После обучения приступили к проверке устройства. Ошибки второго рода имеют место быть. Пришлось снижать порог совпадения с эталонами. В следствии чего иногда бывали ложные пропуски. На практике же, ошибки второго рода случались из-за неправильного расположения руки перед устройством, либо за счет смазывания получаемых снимков из-за движения рук. Тут не хватило времени на эксперименты.
Тут можно лишь сказать, что тема интересная и она до конца не раскрылась из-за нехватки времени и необходимых навыков. Также не успел проверить устройство на «неживые сравнения». Не был задействован фототранзистор (для подстройки камеры под освещение) и датчик температуры (хотя информация с него получалась, но никак не учитывалась).
Исходники для arduino и matlab есть, но стыдно показывать, ибо писалпереписывал очень торопясь успеть, попутно переделывая устройство.
Автор: YoYa
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/matlab/12976
Ссылки в тексте:
[1] статье: http://habrahabr.ru/post/126144/
[2] LinkSprite JPEG Color Camera TTL Interface: https://www.sparkfun.com/products/10061?
[3] Arduino Project Enclosure: https://www.sparkfun.com/products/10088?
[4] Infrared Thermometer — MLX90614: http://www.sparkfun.com/products/9570
[5] USB HUB: http://www.tehnosila.ru/catalog/kompyutery/aksessuary/1698/-/73874/
[6] ORduino Nano: http://robocraft.ru/shop/index.php?route=product/product&path=47&product_id=55
[7] Infrared Proximity Sensor — Sharp GP2Y0A21YK: https://www.sparkfun.com/products/242
[8] Logitech B910 HD Webcam: http://www.logitech.com/ru-ru/for-business/products/webcams-headsets/b910-hd-webcam
[9] тут: http://habrastorage.org/storage2/b27/e4c/7f2/b27e4c7f23a499a979abe3f8b89b64bb.png
[10] тут: http://www.alcs.ch/logitech-c910-infrared-conversion-for-nightvision.html
Нажмите здесь для печати.