✍️ Статья Пишем программу распознавания лиц на Go

The 146X Project Dublikat Web Studio Avram Lincoln AL Service Navigator Knyaz

BlackPope

Команда форума
Модератор DeepWeb ✔️
PR-Group DeepWeb 🔷
Регистрация
27.04.2020
Сообщения
230
Технология распознавание лиц не является чем-то сложным или недоступным.

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

В данной статье мы напишем программу распознавания лиц на Go с помощью библиотек dlib и opencv. Наша программа будет отображать видеопоток, рисовать прямоугольник вокруг лица и подписывать лицо в случае распознавания.

Для начала рассмотрим наши библиотеки.

Dlib - это свободная библиотека, включающая алгоритмы машинного обучения и программные средства для создания сложного программного обеспечения для решения практических задач. Прелесть этой библиотеки в том, что на ней реализованы и натренированы нейросети, позволяющих выявлять и векторизовывать лица на изображениях. Притом между получаемые векторами можно находить евклидовые расстояния и, таким-образом, судить о схожести лиц. Мы будем использовать обёртку на Go github.com/dimuls/face.

Opencv - это свободная библиотека машинного обучения и компьютерного зрения. Данная библиотека, как и dlib, включает алгоритмы и нейросети для выявления лиц, однако мы не будем использовать их в нашей программу. Нам она нужна для подключения к источникам видеопотоков. Мы будем использовать Go обёртку gocv.

Перед написанием и запуском программы необходимо правильным образом собрать и установить библиотеки dlib и opencv, а так-же установить Go обёртки github.com/dimuls/face и gocv. Как это сделать ― тема отдельной статьи. Так-же желательно наличие видеокарты с поддержкой технологии CUDA для ускорения алгоритмов нейросетей.

Опишем основной алгоритм работы нашей программы:

6WkLY4Qc-5Y.jpg


Ядро любой программы или системы распознавания лиц работаем примерно по этому алгоритму. Разница лишь в действиях, предпринимаемых при выявлении лица и нахождении известного лица.

Давайте посмотрим на реализацию. Ниже приведён код main функции программы. Полный код можно найти тут.

В начале мы инициализируем основные объекты, которые будут использоваться в нашей программе.

Инициализация детектора лиц, который будет выявлять лица.

R-mHnqfXS3o.jpg

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

x-osOCyZsDg.jpg

Инициализация базы персон.

4b0ELElZ_pU.jpg

Инициализация видеопотока.

BItkEo6xBUk.jpg

Инициализация окна программы.

i2jrdN1miq4.jpg

Инициализация изображения для очередного кадра.

r4PIdLn3zQY.jpg

Далее у нас идёт бесконечный цикл обработки кадров со следующим содержанием.

Ждём 1 миллисекунду нажатия клавиши на клавиатуре. Если нажата Esc, то выходим из приложения.

K4K-WOmzKsQ.jpg

Пока не получим кадр продолжаем цикл.

gAaabbO3Hig.jpg

Выявляем лица в кадре. Получаем массив выявленных лиц.

Znr0P2zPbrs.jpg

Для каждого выявленного лица.

ErOdmvjkvO4.jpg

Получаем вектор выявленного лица. Вектор лица представляет собой массив из 128 32-битных чисел с плавающей запятой.

bXgN9eIopyU.jpg

Ищем в массиве векторов известных лиц наиболее близкое (по евклиду) лицо.

tRNyRrEMCGA.jpg

Рисуем прямоугольник выявленного лица.

xB9xK-nZhS0.jpg

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

gSL_CJMEfjQ.jpg

После цикла выявленных лиц рисуем кадр в окне.

Vxe4pRrYl9o.jpg

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

📌 Золотая реклама

AnonPaste

Верх