При разработке систем распознавания лиц с помощью компьютерного зрения ключевыми требованием являются быстродействие и точность. Однако, увеличение точности влечет за собой снижение быстродействия. Как правило, задача распознавания лиц применяется в системах безопасности или наблюдения.
В настоящей статье будет рассмотрена система автоматического контроля индивидуального доступа. В данном случае предполагается, что требуется определить личность человека, находящегося непосредственно перед камерой. В таких условиях может быть обеспечено наилучшее качество съемки, так как существует возможность четко определить зону контроля для человека, создать в ней оптимальное освещение и минимизировать влияние посторонних факторов. Большая часть этих решений – аппаратная.
Основное внимание следует сосредоточить на программной части системы. Наиболее распространенным и точным решением является применение нейронной сети, которая имеет оптимальную структуру и обучена на большом наборе качественных данных. Иным способом является применение распознавателей, которые встроены в различные библиотеки компьютерного зрения. Например, библиотека OpenCV содержит 3 распознавателя [1]. Для их обучения также необходим набор данных. Такой подход значительно уступает в точности специально разработанным и обученным нейронным сетям [2].
Во время разработки системы контроля доступа были проведены тесты с использованием встроенного в OpenCV распознавателя LBPHFaceRecognizer.
Число фотографий, шт. |
5 |
10 |
25 |
50 |
100 |
250 |
500 |
750 |
1000 |
Точность, % |
43.2 |
46.5 |
50.3 |
54 |
63.7 |
68.1 |
72.6 |
75.2 |
78.6 |
Результаты показали, что для достижения высокой точности необходим значительный объем качественных и однородных данных для обучения. При использовании 1000 фотографий, максимальная точность составила 78.6%. Дальнейшее увеличение базы фотографий не привело к значительному повышению точности. Данную точность можно считать достаточной для тривиальных задач, но ее недостаточно для создания безопасной системы контроля доступа [3, 4].
Было принято решение использовать алгоритм распознавания на базе библиотеки dlib. В его основе лежит нейронная сеть, обученная на наборе из 3-х миллионов фотографий. Заявленная разработчиком точность составляет 99.38% [5, 6]. В рассматриваемом случае, к системе предъявляются следующие требования: высокая точность определения личности человека, проверка наличия доступа в соответствии с базой сотрудников, максимально быстрая реакция системы. Специфика данного решения заключается в работе со специфическим типом данных библиотеки dlib. Для распознавания лица необходимо провести два предварительных этапа.
Первый этап – определение региона интереса, области на кадре видео, в которой содержится лицо человека. В библиотеке dlib присутствует встроенный детектор лиц. При его использовании время обработки фотографии сильно увеличивается с увеличением разрешения кадра.
Второй этап – размещение меток на лице. Существуют решения различной вычислительной сложности: 5 меток для одного лица, 68 меток и т.д.
Представленный разработчиком библиотеки dlib алгоритм работает с использованием 5 лицевых меток [5, 6]. Такое решение обладает достаточным быстродействием и не нуждается в замене.
Для уменьшения времени выполнения первого этапа было принято решение использовать встроенный в библиотеку OpenCV детектор лиц на основе каскадов Хаара [3]. Сравнительные тесты показали значительное уменьшение времени на поиск лиц на кадре.
Сам же процесс распознавания заключается в построении 128-мерного вектора, соответствующего человеку на кадре.
где .
При этом для разрешения доступа требуется, чтобы Евклидово расстояние dab между полученным вектором и любым вектором , содержащимся в базе сотрудников, было меньше 0,6 [5, 6].
где i – порядковый номер признака; n = 128; xai и xbi – координаты векторов a и b по признаку i.
Cравнение быстродействия детекторов лиц при использовании Raspberry Pi 2B и Pi Cam v2.1
Разрешение кадра |
Детектор лиц dlib |
Детектор лиц на основе каскадов Хаара |
1920х1080 |
4.8 с |
0.7 с |
1280х1024 |
2.7 с |
0.29 |
1024х768 |
1.8 с |
0.12 с |
800х600 |
0.9 с |
0.08 с |
640х480 |
0.6 с |
0.05 с |
То есть нейронная сеть построена по принципу соответствия каждому человеку уникального 128-мерного вектора. Условие, предъявляемое к Евклидовому расстоянию, позволяет учесть некоторые отклонения, вызванные разным освещением, качеством изображения и положением лица [7]. Время распознавания незначительно изменяется при изменении разрешения.
Там образом, оптимальный набор способов реализации этапов распознавания следующий: применение детектора лиц на основе каскадов Хаара, определение 5 лицевых меток, применение нейронной сети для построения 128-мерного вектора.
Для создания компактной системы с собственным вычислителем была использована Raspberry Pi 2B. Ведется обработка видео с разрешением 1024х768. При использовании встроенного в библиотеку OpenCV детектора лиц удалось снизить время выполнения первого этапа с 1.8 до 0.12 секунд. Второй этап выполняется за 0.04 секунды. Наиболее долгим этапом является построение 128–ми мерного вектора, его выполнение занимает 2.2 секунды.
Суммарное время обработки кадра и принятия решения о разрешении доступа не превышает 3 секунды. Очевидно, что вычислительные возможности Raspberry Pi 2B ограничены. В определенных условиях может потребоваться большее быстродействие. Тогда, уместным будет использование более производительной Raspberry Pi 3B+ или других интегрируемых решений. Наиболее быстрыми будут системы с производительными графическими процессорами или специализированными модулями для работы с нейронными сетями, например, Intel Movidius.