Как написать нейросеть для распознавания

0
20

Создаём свою модель распознавания лиц на Python

Что нужно для обучения нейросети

Чтобы нейронка научилась узнавать вас по лицу, нужно создать собственную модель распознавания лиц и скормить её нейросети. Тогда она сможет определять и подписывать имя человека в кадре. Сегодня мы сделаем первую часть — соберём датасет и обучим на нём нашу нейросеть. А во второй части прикрутим новую модель к алгоритмам распознавания.

Последнее, что осталось, — сделать цикл, который соберёт как минимум 30 фотографий, найдёт на них лица и запишет их файл с нужными именами. Так как примитивы Хаара — это чёрно-белые прямоугольники, для простоты и ускорения работы мы тоже будем переводить кадры в ч/б. Чтобы потом в процессе тренировки нейросети было проще, мы будем сохранять не кадр с камеры целиком, а только лицо:

Датасет в нашем случае — это набор фотографий. Фото должны быть подобраны так, чтобы лицо было в разных ракурсах или с разным освещением. Чем больше фото, тем точнее обучение. Идеально, если по имени файла сразу будет понятно, какие фото к какому человеку относятся.

Сейчас подобные алгоритмы применяются в пропускных системах в офисных зданиях — когда нужно повысить общий уровень безопасности. Для этого при оформлении пропуска сотрудников просят посмотреть в камеру и покрутить головой — в это время нейросеть делает много снимков и добавляет их в датасет, а потом переобучается с ними.

# получаем список картинок и подписей
images, labels = get_images_and_labels(dataPath)
# обучаем модель распознавания на наших картинках и учим сопоставлять её лица и подписи к ним
recognizer.train(images, np.array(labels))
# сохраняем модель
recognizer.save(path+r’/trainer/trainer.yml’)
# удаляем из памяти все созданные окнаы
cv2.destroyAllWindows()

После запуска скрипта у нас будут работать две нейросети: одна будет искать все лица в кадре, а вторая — искать среди них те, которые ей известны. Если есть совпадение и мы знаем, как зовут человека под определённым id, то скрипт подставит его имя и мы увидим примерно такое:

ЧИТАТЬ ТАКЖЕ:  Как создают искусственный интеллект для игр

Что дальше

Сохраняем скрипт как face_gen.py — потому что для тренировки нам понадобится отдельный код. После запуска в терминале нужно будет ввести номер пользователя — им может быть любое число. Во время работы скрипт покажет нам 30 кадров, которые он сделал, а в папке dataSet появятся новые файлы — это значит, что мы всё сделали правильно:

Конечно. Всё, что для этого нужно сделать, — запустить скрипт face_gen.py из прошлой статьи и ввести новый id. После этого программа сделает нужное количество снимков с камеры и добавит их в датасет. Так можно сделать сколько угодно раз — нейросети всё равно, сколько людей запоминать и распознавать.

В коммерческих проектах датасет собирают долго и из разных источников, а потом вручную проверяют каждое фото, подходит оно или нет. Чтобы не тратить на это время, используем такой лайфхак: мы сгенерируем датасет из кадров с камеры. Для этого мы запустим захват видео и каждые 100 миллисекунд будем брать новый кадр и запоминать лицо оттуда.

Наконец, обучаем и сохраняем модель, чтобы её можно было использовать в других проектах. При этом нейросети неважно, сколько пользователей и фотографий будет в датасете — один или тысяча. Она запомнит их все, сопоставит одно с другим и запомнит, как выглядит пользователь под каждым номером. Результат такой обработки сохраним в yml-файле — это один из стандартных форматов для таких моделей:

Создаём новый файл face_detect.py и сразу подключаем две нужные нам библиотеки: компьютерного зрения и работы с системными функциями. Последняя нужна для того, чтобы можно было найти, где лежит скрипт, и сориентироваться, как получить доступ к папке с моделью:

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

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь