Немножко философский пост про то, как мы в глаза смотрели

    В статье я расскажу небольшую историю про маленькую техническую задачку и о том, как её решали разные люди вокруг. Быть может этот рассказ поможет читателю вынести несколько уроков о том, какие временами встречаются ошибки.
    Немножко матана инклудэд.
    Три цвета
    Идея распознавать людей по радужной оболочке появилась в далёком 1987 у доктора Джона Доугмана и была запатентована в 1989. Примерно тогда же появился прототип. На тот момент это была вершина технологии. Пару лет до первой коммерческой цифровой камеры + алгоритм обработки изображения на компьютерах уровня i386/i486. До сих пор я не представляю, как можно получать на таком оборудовании стабильный результат.
    Задачка о которой я хочу рассказать появилась на свет где-то в 2006-2009 годах. Процессоры к этому времени несколько ускорились, появились хорошие камеры, патент 1989 года истёк и системы распознавания по глазам теперь получил право делать каждый. Люди, которые решили сделать клон системы захотели использовать современные технологии и улучшить алгоритм. Самое первое, что бросалось в глаза — старый алгоритм сравнения глаз использовал изображение глаза в близком ИК диапазоне. То, что глаза бывают цветными не учитывалось.

    Немножко теории


    Радужная оболочка глаза является уникальной характеристикой человека. Рисунок радужки формируется на восьмом месяце внутриутробного развития, окончательно стабилизируется в возрасте около двух лет и практически не изменяется в течение жизни, кроме как в результате сильных травм или резких патологий. Метод является одним из наиболее точных среди биометрических методов.
    Классический алгоритм распознавания для чёрно-белых глаз, состоит из двух частей — сегментация и сравнение.
    Сегментация это выделение самого глаза на фотографии или в видеопотоке. Алгоритм сегментации сильно зависит от используемого оборудования и оптической конфигурации. В отличие от сравнения, которое является математически строгой задачей, сегментация это задача со слишком большим количеством переменных. Всегда приходится что-то выдумывать и настраивать. Доугман в своём патенте предлагал при сегментации искать глаз как окружность для которой градиент максимален:
    Поиск окружности
    Здесь G — оператор гауссовского размытия изображения, а I(x,y) — само изображение. При этом количество гипотез, которые нужно перебирать примерно равно W∙H∙(Rmax-Rmin), где W — ширина изображения, H — его высота, Rmaxи Rmin максимальные и минимальные радиусы соответственно. Алгоритм Доугмана это вывернутое наизнанку преобразование Хафа для окружностей. В чистом виде он неприменим. Преобразование Хафа само по себе нестабильно к тому же на современных процессорах Intel i7 эта операция для 1.3 мегапиксельного изображения без предварительной оптимизации составляет порядка нескольких секунд. Существует много хитростей и уловок, чтобы добиться работы в реальном времени.
    Одна из самых красивых — использовать освещение, которое даёт характерный блик на зрачке и искать этот блик. Такие блики хорошо видны вот здесь:
    блик
    Задача поиска блика вычислительно значительно проще, чем задача поиска глаза. А глаз ищется потом в окрестности блика.
    В результате сегментации детектируется зрачок и радужка. На радужке отмечаются области, интересные для дальнейшего использования. Получается сегментированная область:
    Сегментация 1
    Вторая часто это сравнение. После выделения радужки её нужно нормализовать для удобного сравнения с другими радужками. Радужка разворачивается из полярных координат в прямоугольник и фильтруется. В качестве фильтра Доугман предлагал использовать фильтр Габора, который позволяет подчеркнуть характеристические области и понизить высокочастотные шумы:
    image
    Хотя, конечно, используемый фильтр настраивается в зависимости от оборудования. Преобразованную радужку принято называть Iris Code. Выглядят такие радужки как-то так:
    image -Развёрнутая цветная радужка.
    __________________________________________________________________________
    image -Развёрнутая чёрно-белая радужка с маской поверх.
    __________________________________________________________________________
    image — Чистый Iris Code.

    Для того, чтобы сравнить две радужки, для полученных Iris Code строят дистанцию Хемминга, которая в данном случае является мерой корреляции объектов. Чем меньше дистанция Хэмминга между двумя кодами, тем ближе друг к другу они расположены. Если мы сравним достаточно большую базу картинок друг с другом, вычислим для неё дистанцию Хэмминга и построим полученную гистограмму, то получится такое распределение:
    image
    Левый горб, нарисованный белым, будут формировать сравнения одинаковых глаз с одинаковыми. Правый горб, нарисованный чёрным, будут формировать сравнения разных глаз между собой. Из этого графика берётся число, которое хорошо разделяет два горба. Обычно его выбирают ближе к левому горбу: не допустить человека лучше, чем пропустить шпиона. Для данного графика это что-то типа 0.32.
    В дальнейшем система принимает решение, что человека можно пропускать, если код его глаза имеет дистанцию меньше чем 0.32 с каким-либо другим кодом из базы.

    Предыстория


    Тематикой распознавания по глазам я и ещё двое друзей (один — Vasyutka, второй — Strepetarh) начали заниматься на 4ом курсе МФТИ. Нам нужно было сделать курсовой проект по безопасности информации. Тогда мы сделали простенькую систему распознавания по глазам при помощи веб-камеры, корпуса от колонки, брелка от ключей и прищепки. Увидев насколько она хорошо работает (выиграли институтский конкурс и заимели много положительных отзывов) мы решили её допилить в полноценную систему. За следующий год неспешного программирования мы довели системы до вполне рабочего продукта. Тут-то и пришли инвесторы. Но они хотели странного.
    В то же время, когда мы занялись глазами наши будущие инвесторы натолкнулись на то, что идея того, чтобы распознавать глаза не по чёрно-белой картинке, а по цветной — ещё нигде и никогда не была запатентована. А будучи людьми, достаточно технически подкованными и обладающими коммерческой жилкой они решили получить патент. Правда, программировать они не умели, а уж тем более не разбирались в присущей делу математике.

    Первый заход к задачке


    Вернёмся к нашим баранам. Сначала инвесторы пришли не к нам, а в единственную фирму, которая в России занималась распознаванием по глазам и имела законченный продукт (готовый сканер + алгоритмы). Инвесторы заказали исследование на тему того, как распознавание по цветному изображению улучшит статистику. Подход к задаче у фирмы был ужасно технический. Они построили код Iris Code для каждого канала RGB отдельно и сравнивали для одного и того же человека три элемента. По сути взяли уже имеющуюся технологию и вложили в неё новые данные.
    Посмотрим, что они сделали в реальности. Разложим изображение на каналы:
    image
    Как было упомянуто выше, для подчёркивания текстуры изображения принято использовать фильтр Габора или какой-нибудь другой фильтр средних частот, подчёркивающий границы. Эти картинки он превращает в:
    image
    Как видно, структура для всех цветов получается практически идентичной. Результаты сравнения глаз по разным цветам будут практически всегда совпадать. В отчёте, написанном той фирмой, сей вывод был блестяще подтверждён. Более того, статистика при таком распознавании значительно ухудшается. Как-никак цветная камера использует фильтр Байера:
    image
    А значит для того, чтобы иметь цветное изображение такого же разрешения как и чёрно-белое нужно использовать в четыре раза более мелкие пиксели, которые из-за фильтра будут собирать в три раза меньше света. Что значительно понижает отношение сигнал/шум.
    Вторая проблема при таком подходе — чёрные глаза. Для того, чтобы в них что-то увидеть при белом освещении, там нужно выжечь всё.
    image
    В общем, исходя из сказанного ребята заявили, что распознавание по цветным глазам невозможно.
    Мысль 1. Хорошо зарекомендовавшие себя методы далеко не всегда будут работать в новых условиях. Если перед вами стоит исследовательская задачка и известные методы не сработали — это не значит, что задачка не решается.

    Исследовательский подход, aka подход британских учёных


    Если следовать сюжету, то тут должен был бы быть раздел о том, как появились мы и всё быстро разрешили. Не люблю линейное повествование. Расскажу лучше сначала о том, как к этой проблеме подходили в остальном мире в различных институтах. На эти исследования мы натолкнулись уже после того, как сделали работающий алгоритм распознавания по цвету. И с интересом разглядывали в какие дебри людей сумел завести их научный подход.
    То, что при использовании цвета как RGB информация дублируется в каждом слое — пришло в голову многим. Логично было бы использовать такое цветовое пространство, где информация о яркости была бы независима от цветовой. Это возможно, если цвет каждого пикселя рассматривать как некую одномерную характеристику, чтобы два пикселя можно было сравнить. Думаю, что почти все читатели знакомы с цветовым пространством HSL (HSV). В нём координаты цвета задаются через яркость, насыщенность и тон (аналог длинны волны).
    image
    Первая работа на эту тему, думаю, была вот эта. После неё была целая серия исследований, проводимых в португальском институте. Исследователи экспериментировали с переводом в различные цветовые пространства и сравнением изображений в них. Они честно проверили все стандартные цветовые пространства: Lab, CMYK, HSV и.т.д… Выделили радужки и коррелировали их друг с другом. Построили распределение FAR и FRR для всех цветов, а также их статистическую зависимость друг от друга. Нарисовали много красивых табличек. Расписали преимущества и недостатки различных цветовых пространств. И оказалось, что длинна волны слишком нестабильный признак. Слишком много шумов в нём по сравнению с остальными. И ведь правда! Если посмотреть на то как приведённый выше глаз выглядит в пространстве HSL, можно заметить, что в H канале ужасные шумы.
    image
    При попытке сравнения двух изображений глаза корреляция будет куда хуже, чем в остальных каналах. В результате исследования показали, что единственная статистически независимая от яркости характеристика это цвет глаза. После чего они радостно отмели её, как слишком зашумлённую и недостоверную.
    Мысль 2. Если новая исследовательская задача похожа на старую, то при её решении в первую очередь стоит сфокусироваться на различиях. Если различия несущественны, то разве имеет новая задача смысл?
    Нужно признать, что хорошую статистику со своим подходом они всё же получили. Например вот в этой статье. Правда к реальности оно уже не имеет никакого отношения. В отличие от предыдущего исследования использовалась не реальная база глаз, а база полученная примерно таким образом:
    image
    При съёмке такой базы фиксируется голова и в глаз бьёт сильная вспышка. Получено разрешение в несколько раз лучше, чем в любом из существующих нормальных сканеров.
    В реальности разрешения используемых сканеров глаз позволяют захватывать глаза с радиусом радужки в 70-100 пикселей. Это обуславливается силой допустимого освещения и глубиной резкости системы.
    Мысль 3. Решая реальную задачку следует отталкиваться в первую очередь от характеристик используемого оборудования, а не от красивой математической модели.

    Наше появление


    После того, как разработчики из первой компании, куда обратился инвестор, объяснили, что распознавание по цвету хуже, чем распознавание по ЧБ, инвестор забеспокоился. Патент стоит не дешево и требовал дополнительных вливаний средств на его поддержание. Нас инвестор нашёл за три дня до того, как им требовалось принять решение, оставить ли проект, или слить его. И уже за эти три дня нами было найдено первое решение, позволяющее улучшить статистику. Как всегда в таких ситуациях реализуется подход: «Что бы быстрее придумать, чтобы оно работало». Надо сравнивать цветные глаза? Так давайте сравним ЧБ и добавим сравнение по среднему цвету глаза. Оказалось, вероятность того, что цвет вашего глаза совпадает с произвольно взятым глазом где-то 10% при 90% совпадения с самим собой.
    Этого оказалось достаточно, чтобы улучшить статистику в 3 раза, чего не добивалось ни одно вышеописанное исследование.
    Удовлетворив инвестора и подтолкнув его к тому, что он остался в теме и заключил с нами договор мы начали реальное исследование. И уже с первого шага мы пошли другим путём, чем все вышеупомянутые работы. Вместо решения математической задачи сравнения цветных глаз мы начали с решения чисто технической задачи: «Как цветные камеры снимают глаза и сколько освещения при этом требуется». Уже после первого азиата с практически чёрной радужкой мы поняли, что отказываться от инфракрасного спектра нельзя. Для этого нам пришлось использовать цветную камеру со снятым ИК фильтром и с двумя системами подсветки: инфракрасной и цветной. Инфракрасная часть должна была обеспечить классическое сравнение, а цветная часть должна была добавить дополнительную составляющую, которая бы делала систему «сильнее» всех существующих.
    Получив достаточную базу изображений глаз мы стали пробовать вытянуть дополнительную информацию из цветных глаз. Конечно, мы опробовали сравнение в RGB спектре, убедившись почти сразу, что оно ничего не даёт. И сразу после этого мы пришли к сравнению в HSL спектре. Кстати, глаз, разложенный в HSL пространство выше был получен «хорошим» методом фотографирования. Реальные глаза, получаемые камерой выглядят следующим образом:
    image
    Над похожими картинками мы тупили несколько дней. Ведь, с одной стороны, в H и S канале содержится новая информация. Но с другой стороны — она сильно зашумлена, и слегка пространственно коррелированна с ЧБ глазами. Решение оказалось простым и изящным. Если нам нужна информация только о цвете, то надо забить на пространственную информацию. Построить гистограмму распределения цветов для глаза. Такая гистограмма выровняет шумы, усреднив по ним. По таким гистограммам можно быстро сравнивать, а что самое главное, результат распознавания по таким гистограммам для H и S каналов не коррелируют друг с другом и не коррелируют с классическим методом распознавания ЧБ глаз:
    image
    Всего двадцать точек гистограммы H дают пересечение кривой ложного допуска и ложного недопуска на уровне 6 процентов. Ещё примерно 10% даёт S гистограмма. Конечно, такие проценты не складываются, их надо учитывать более хитрым способом. Например SVM.
    На всё это исследование нам понадобилось где-то 15 дней и полтора человека. Что очень забавно сравнивать с научной деятельностью, которую в течении нескольких лет вокруг этой тематики развели в вышеприведённых статьях.

    Послесловие


    У этого рассказа было две цели. Первый — рассказать историю с небольшим количеством матана, и убить ваши десять минут на её чтение. Вторая — обратить внимание на несколько проблем в разработке алгоритмов, которые часто встречаются вокруг и в которые я сам регулярно влипаю.
    Первая проблема это чрезмерное увлечение существующими паттернами. Часто при решении новой задачи её пытаются свести к уже имеющимся алгоритмам. И ведь не скажешь, что это плохо. Но желание пойти по проторенной дорожке часто обесценивает всю работу. Самый феерический пример, это однажды встреченная мне в каком-то отчёте фраза: «Эту задачу нельзя решить методами OpenCV, значит она неразрешима».
    Вторая проблема — чрезмерный перфекционизм. Когда задача мало-мальски научная, она порождает целое дерево ветвящихся возможностей для её разработки. Далеко не в каждой вершине находится что-то полезное. Очень часто сложно, почти невозможно, сосредоточиться на той цели, которая лежит в сути задачи. Начинаются бесконечные исследования пустых мест. И ведь самое ужасное, что современное научное сообщество поощряет такой подход. И если в математике или теоретической физике оно хоть немного имеет смысл, то в технических науках он порождает всё больше и больше «британских учёных». Индекс Хирша тому свидетель. Ощущение, что это уже какой-то симулякр, где даже Поппер со своим бубном бессилен…
    Вот так и идёшь между Сциллой и Харибдой, решая очередную задачу. И повторяться нельзя и закапываться. А что в таких случаях делаете вы?

    Пара маленьких дополнений


    • Когда-нибудь, я надеюсь, я запилю статью на тему сканеров радужной оболочки и процесса их разработки. Там будет много смешных монструозных картинок.
    • Устройства с алгоритмами, которые мы разработали для инвестора, так и не были выпущены на рынок в виду множества причин. А алгоритмы по чб мы поддерживаем в более-менее живом состоянии.
    • Разработчики, к которым инвестор пришёл первым, надо сказать, хоть и пытались решить задачу на редкость ломовым путём, но вынесли из работы весьма ценный материал. С тех самых пор в их сканерах стоит белая лампочка, которая заставляет зрачок сжиматься, увеличивая рабочее поле.
    Метки:
    Поделиться публикацией
    Комментарии 59
    • +1
      Интересная идея. Учитываете ли вы, что цвет глаз на протяжении жизни может в некоторой степени меняться, в отличие от рисунка радужной оболочки.
      • 0
        Какого-то большого исследования не проводили, но в принципе алгоритм робастен был к небольшому изменению спектра окружающего освещения. Это проверяли. Изменяется, кстати, в основном высокочастотная структура цвета. Средние цвета сохраняются. Да, хороший пример того что цвет не полностью стабилен — ngm.nationalgeographic.com/2002/04/afghan-girl/index-text :)
        • 0
          У меня мама с глазами хамелеона: они могут быть как ярко-выраженные голубые, или четко зеленые.
          • +4
            Это вопрос освещения. Скорее всего зелёные они на солнце, а голубые при лампах дневного света или в облачную погоду. У нас основная мощь сидит в предсказуемом спектре. Отклонения минимальны.
            • –2
              Да вот нет как раз…
              Бывает месяцами одни глаза, месяц другие…
              Не смогу вам ответить почему это бывает, но как факт.
              • 0
                Простите а за вами еще не прилетали? А это это прям из разряда фантастики. Я понимаю волосы у меня в зависимости от сезона (время проведенного под солнцем) выгораю и летом я почти блондин а зимой как будто мелиорированный.
              • 0
                Вообще странно. Попробуйте сфотографировать на одинаковый фотоаппарат с одинаковой вспышкой. Думаю всё-таки что оптический обман какой-то. Глазами цвета сложно различать.
                • 0
                  В принципе есть термин, «иридодиагностика». Там уверяют, что по цвету глаз можно болезни определять. Но ни одного серьёзного исследования, где бы доказывалось, что оно работает, или хотя бы, что цвета глаза меняются — не было. За время работы с алгоритмами по цвету (около двух лет весь проект двигался) ни у кого из связанных с проектом людей ничего не менялось до уровня, что можно было бы заметить, или чтобы алгоритм выдал отказ.
                  • 0
                    Не по цвету, там больше внимания на рисунок радужки.
                    • 0
                      Именно рисунок радужки не меняется с возрастом, что подтверждено многочисленными исследованиями. Немножко плывёт только цветность и общий контраст.
              • 0
                Мне знакомые неоднократно утверждали, что у меня меняется цвет глаз в зависимости от эмоционального состоянии — обычно серые, а в ярости зеленеют.
                • +1
                  А у меня оттенок глаз меняется в зависимости от состояния: в трезвом виде серые, а с бодуна синие-синие. Без шуток.
                  • 0
                    Я всегда думал, что у тебя синие глаза. Так чего получается, я тебя всегда с бодуна видел?
          • 0
            Мне вот интересно как проводятся такие исследования. Перебором алгоритмов? Это как-то автоматизированно, или все на бумажке?
            • 0
              Сложный вопрос. Бывают ситуации, когда возможно построение строгой математической модели. Тогда задачу можно решить на бумажке. Но в этом случае оно было не так. Но и перебором не решить. Например алгоритм сравнения гистограмм, конечно, известен, но с самого начала мы о нем и не могли подумать. Где-то посередине оно обычно.
            • +1
              Вопрос не совсем по теме поста, но можно ли обмануть сканер радужки при помощи контактных линз с рисунком?
              • +5
                Однажды мы проверяли и пришли к удивительному выводу. Те, что продаются в обычных магазинах, не могут обмануть, если распознавание в ИК спектре. То ли качество печати на таких линзах плохое, то ли просвечивают они в ик. Уровень корреляции с глазом падает немного, но в принципе человек распознаётся.
                Но вообще если ставить целью не распознаться на сканере — это не сложно. Выдать себя за другого человека — гораздо сложнее, если есть защита проверяющая обратную реакцию глаза — почти невозможно.
                • 0
                  Что такое «защита, проверяющая обратную реакцию глаза»?
                  • +9
                    Меняем яркость подсветки и смотрим, как расширяется/сужается зрачок. По идее, еще и наркоманов должно отсеивать :)
                    • +1
                      Только если они совсем удолбаны:)
                      Какая-то реакция всё же у них есть.
                    • +5
                      Моргающая лампочка, управляемая программно. Когда она включается — зрачок сжимается. Достаточно надёжная проверка на живость. Вырванные глаза её не пройдут:)
                      • +12
                        Надо еще звук проверять. Если пациент кричит: «Что вы делаете! Как так можно, живого человека мордой в камеру тыкать!», то дверь лучше не открывать. Спасибо за очень интересную статью!
                        • 0
                          И живые глаза с МВС (миопией высокой степени) — близорукие, тоже. Особенно если близорукость огромная. Там мышца, управляющая зрачком, не функционирует правильно. Не сокращается.
                      • +4
                        Солнечные очки, особенно пластиковые, на 830 нм выглядят как прозрачные. А их раскрашенная оправа становится белой. Примерно так:
                        • 0
                          Ага. А карие глаза в близком ИК имеют на порядок более читаемую структуру, чем голубые:)
                          Но так как в принципе линзы в ИК видны, не понятно, что больше повлияло. То, что там печать 300dpi и между точками всё видно, то ли то, что эти точки сами по себе пропускают неплохо.
                          • 0
                            Кстати, «близкий ИК» для вас это что? Меньше 800 или меньше 1300?
                    • +2
                      Я так понял — вы сканируете только один глаз или два? Если два — как быть людям с гетерохромией?
                      • +1
                        В той работе распознавание было по двум глазам. Сканировались они независимо. Разницы никакой нет, одного они среднего цвета или разного.
                      • +1
                        На чтение, предположим, потрачено не 10 минут, а чуть больше. Но оно того стоило. Интересный пример «простого» решения сложной задачи.
                        • 0
                          А почему не по рисунку радужки? Конечно нужна хорошая фотография с оборудования. А блики как из фото с точками в зрачке использовать как ориентиры.
                          • 0
                            Я верно понял, что в итоге всё-равно получается около 6% ошибок? Ну то есть такую систему можно применить чтобы в школе шкафчики запирать\отпирать, но вот вход в домен или логин в банкомате на этом не сделаешь.
                            • +1
                              Это дополнение сверху обычного распознавания, где FAR=10^-7 при FRR 0.02%. Чистый алгоритма да, более чем для отпирания шкафчиков не годится. Но в системе, когда имеется 2 глаза он позволял задрать проценты ИК-метода так, что теоретически алгоритма хватало для стабильного распознавания всего земного шарика.
                              • +1
                                Ой, время правки истекло, а ошибку заметил. Не 0.02%, а 0.002 или 0.2%. Не то ни сё написал. Вот таблица зависимости FAR и FRR по открытой базе CASIA для чистого алгоритма:
                                eye-recognition.ru/table.png
                            • +1
                              А как вы обрабатываете ситуацию, когда радужка прикрыта веком? Веко как то распознается?
                              И еще, сравнение инвариантно к наклону головы? То есть если наклонить немного голову набок — система уже забракует?
                              • +1
                                Веко выделяется. Без этого нельзя, статистика сильно падает. Используется примерно такая область:

                                Сложности есть в выделением ресниц. Их обычно не выделяют, ибо сложно, а статистику они портят.

                                Поворот обрабатывается. Градусов 15 туда-сюда. Корреляция проходит со сдвигом шаблона.
                                Если использовать два глаза, то правильную ориентацию можно вычислить. Это значительно улучшает статистику. Но проценты я все писал именно для случая, когда глаз один.
                                • 0
                                  Ага, понятно. А когда идет сравнение вот этих Iris Code, то сравниваются только те области, которые не прикрыты веком в обоих развертках?
                                  А еще такой вопрос. Ведь при сжатии зрачка — радужка расширяется. Вы просто нормируете все развертки к одинаковой высоте, что бы компенсировать это растяжение?
                                  • +2
                                    Ага, там сверху маска накладывается на все области, которые не надо сравнивать. К ним же блики относятся.
                                    Да, там нормировка. При изменении размера зрачка можно считать, что радужка растягивается линейно. В принципе это не совсем так, но больших проблем при это не вылезало. Правда тестов на наркоманах мы не проводили:)
                              • +3
                                Вот так и идёшь между Сциллой и Харибдой, решая очередную задачу. И повторяться нельзя и закапываться. А что в таких случаях делаете вы?


                                Проблемы «использования имеющихся паттернов» у меня обычно нет. Проблема в другом — я считаю, что любая задача должна иметь простое и элегантное решение, и пытаюсь его найти. Если вижу, что задачу можно свести к какой-то другой, с меньшим числом параметров — делаю это без колебаний, забывая про потерянную информацию. И если информации в этой приведённой задаче стало вдруг не хватать, то либо выцарапываю всё, что можно, из оставшихся крошек, либо объявляю подход некорректным ищу другой. Места для гибридных подходов на этом пути нет вообще (в задаче распознавания глаз я бы мог рассмотреть, например, сравнение спектральных компонент в ДПФ или сравнение топологии каких-нибудь хребтов яркости — но ничего промежуточного искать бы не стал, скорее, при неудаче этих подходов бросился бы в совершенно третьем направлении).
                                Вторая проблема чем-то напоминает перфекционизм: при поиске решения (обычно, эвристического) я сразу нахожу ситуации, в которых это решение не сработает (или потребует слишком большого времени). Дальше либо начинаю искать способ соптимизировать эту часть, либо обойти её. А остальная цепочка так и остаётся недодуманной, хотя возможно, настоящая проблема и/или решение остались там.
                                Ну, и третья проблема — магические константы (вроде 0.32). Которые изначально имеют малообъяснимый смысл, остаются где-то в коде, умение настраивать их исчезает, и в итоге алгоритм, проработав какое-то время, рассыпается по необъяснимым причинам. И дешевле оказывается построить новую цепочку, чем починить старую (тем более, что все недостатки старого алгоритма за время эксплуатации стали видны, и понятно, что он никуда не годится).
                                Как-то так. Сейчас задач такого типа в очереди 4 штуки, три из которы х как-то решены (но их обязательно надо переделать), а в четвёртой ещё и конь не валялся — только общая идея, что надо изучать сферические функции.
                                • 0
                                  Магические константы это да. А главное — далеко не всегда от них можно избавится. Особенно в системах принятия решений.
                                  В этой задачке, правда, с ними всё не так плохо. По сути есть только одна серьёзная константа, которая отвечает за уровень FAR. А вот когда дело начинает касаться астрономии, то там всякие константы вылетают в каждой второй строчке.
                                • +3

                                  1993 год, оказывается очень прогрессивный по тем временам фильм.
                                  • +2
                                    Именно об этом фильме я вспоминал, когда начинал заниматься темой распознавания по глазам:)
                                    Тогда сканеры были простые, да. На живость не проверяли.
                                    • 0
                                      Фильм-то про будующее :) по-моему, про 2036 год или около того. Но даже такое по меркам 1993 года — фантастика.
                                    • 0
                                      Совсем недавно в фильме Мстители Локи вырезал глаз и сканировал его, чтобы передать Соколу.
                                      • 0
                                        Кадр очень знакомый, но никак не могу вспомнить фильм…
                                        • 0
                                          «Разрушитель» с Сталлоне (Demolition Man)
                                      • +1
                                        Есть промышленные системы Eye Tracking, например, iScan, Eye Link. В самых продвинутых из этих систем обеспечивается распознавание элементов глаза (радужка, зрачок) с частотой кадров около 500-1000. При этом используется компьютер для обработки изображений, но все же это намного лучше, чем тратить несколько секунд на обработку одного кадра на Core i7. Думаю, можно было бы позаимствовать из этой области методы сегментации.
                                        • 0
                                          У нас не несколько секунд, ибо используется ряд хитрых методов (полный кадр где-то 70мс на i7). Несколько секунд, это если использовать ломовой подход с полным перебором 3х мерного пространства Хафа. В системах Eye Tracking используется ряд хитростей. Как вариант: меньшая робастность к внешним условиям, не полная сегментация, предварительное обучение. К тому же если в одном кадре глаз уже выделен, до держать его дальше — не проблема, особенно когда такая высокая частота кадров.
                                          • 0
                                            чтобы не было иллюзий на счет EyeLink: www.sr-research.com/pdf/techspec.pdf

                                            Allowable Head Movement
                                            25x25x10 mm
                                            (horizontal x vertical x depth)

                                            Т.е. голова вообще-то гвоздем к потолку прибита должна быть, чтобы система работала )).

                                            Ну а по сути — другие условия работы. Известно где искать и т.д. И еще, для того, чтобы иметь достаточный Сигнал/Шум нужно освещение, диафрагма и некоторая экспозиция. При высокочастотной схемке экспозиция резко меньше, мощность излучателей должна быть ниже максимально разрешенной (безопасной для глаз), а значит и Сигнал/Шум ни к черту будет. + диафрагму открывать придется, а значит глубина резкости меньше.
                                            • 0
                                              так, не заметил, там есть опция «свободная голова» и объем
                                              22x18x20 cm
                                              (horizontal x vertical
                                              x depth) \
                                              не разобрался с одним моментом, кто поймет — скажу спасибо. За счет чего они такой качественный скачок делают — там какая-то дополнительная приблуда есть, чтобы оценивать положение головы?
                                              • 0
                                                www.sr-research.com/camup_remote.html

                                                «Head distance is accurately measured at 500 Hz using a small target sticker placed on the participant's forehead».

                                                Просто метка на лоб клеится :)
                                                • 0
                                                  Я имел дело с живой системой EyeLink. Скажу сразу, что если голова не зафиксирована — то результаты определения положения зрачков плачевные. Мне не удалось держать голову на весу достаточно стабильно, чтобы сигнал трекинга был сколько-нибудь приемлемым. Метку не использовали. Однако это не значит, что сегментация не работает без фиксации головы. Просто определение положения зрачков зависит от ее положения, а цель работы системы именно в определении положения. Голову зафиксировать не так уж и сложно. Подставка для подбородка и капроновая ленточка для упора лба дают достаточную фиксацию. Такие конструкции применяются в офтальмологии при некоторых процедурах, так что они изготавливаются фабрично.
                                                  • 0
                                                    Эх… жаль в биометрических системах как-то не принято фиксировать голову на подставке.

                                                    Ну и все же, есть причины по которым при «гуляющей голове» хуже выделяется радужка (смазы, неопределенность в положении глаз и т.п.). В EyeLink решено вспышками, я так понимаю, и большой частотой кадров (трекинг глаза не теряет). вспышки — это правильно. Но все-таки аппаратная часть сильно дорожает тогда. да и трекинг ни к чему, когда радужка захватывается для распознавания. и одного кадра часто хватит.
                                          • 0
                                            А быстродействия достаточно для использования в качестве идентифицирующего признака, а не только аутенфицирующего? Проще говоря, может фото глаза заменить логин с паролем, а не только пароль при больших количествах пользователей?
                                            • +2
                                              Да, быстродействие на одном только ядре i7 для чистого алгоритма без цвета было несколько сот тысяч сравнений секунду. При использовании цвета оно значительно повышается.
                                            • +3
                                              А что в таких случаях делаете вы?

                                              Я обычно нахожу решение, более-менее устраивающие и занимаюсь другими делами, а потом вдруг утром чистя зубы или вечером куря на балконе вдруг понимаю что есть другое, более изящное решение или какое-то промежуточное с небольшими дополнениями становиться конфеткой…

                                              Конфликт аналитичного и креативного подхода в чистом виде. Глубокий анализ и погружение в проблему может дать только аналитичное решение, но утонув в деталях, надо дать развернуться интуиции или подсознанию — как не назови это не осознанная деятельность, а значить сознание надо отвлечь от проблемы и занять чем-нить другим, благо всегда есть чем :)

                                              ЗЫ. Спасибо за статью. За сужающийся зрачёк вдвойне. Пишите еще
                                              • 0
                                                А ведь да. Проще всего это свести именно к конфликту аналитического и креативного подхода. Не думал об этом с такой стороны. Спасибо!

                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.