Use saved searches to filter your results more quickly
Cancel Create saved search
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window.
Reload to refresh your session.
Система обнаружения и распознавания лиц
izvestia/python-facedars
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags
Nothing to show
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
- Local
- Codespaces
HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.
Распознавание лиц на Python | Определение возраста, эмоций и расы по фотографии лица
Sign In Required
Начало скрипта будет похоже на предыдущее, добавятся только две библиотеки — для обучения нейросети и для работы с изображениями:
# подключаем библиотеку компьютерного зрения import cv2 # библиотека для вызова системных функций import os # для обучения нейросетей import numpy as np # встроенная библиотека для работы с изображениями from PIL import Image # получаем путь к этому скрипту path = os.path.dirname(os.path.abspath(__file__)) # создаём новый распознаватель лиц recognizer = cv2.face.LBPHFaceRecognizer_create() # указываем, что мы будем искать лица по примитивам Хаара faceCascade = cv2.CascadeClassifier(cv2.data.haarcascades + «haarcascade_frontalface_default.xml») # путь к датасету с фотографиями пользователей dataPath = path+r’/dataSet’
Теперь самое интересное — собираем картинки и id пользователя из датасета. Для простоты id будем называть подписью — если у нас не будет сведений о том, что за человек на фотографиях, будем просто выводить номер пользователя как подпись.
Логика будет такая:
- Открываем папку с картинками.
- По очереди читаем каждую картинку и переводим её в специальный формат, с которым умеет работать библиотека numpy.
- Получаем id пользователя из имени файла — просто убираем всё до дефиса и после первой точки.
- Определяем лицо на картинке — это будет просто, потому что на картинках и так будут только лица.
- Добавляем лица в список лиц.
- Добавляем id пользователя в список пользователей
- Чтобы было видно, что скрипт работает, на долю секунды будем выводить на экран текущую картинку.
- На выходе получим список с лицами и идентификаторами пользователей, к которым они относятся.
Запишем это в виде кода на Python:
# получаем картинки и подписи из датасета def get_images_and_labels(datapath): # получаем путь к картинкам image_paths = [os.path.join(datapath, f) for f in os.listdir(datapath)] # списки картинок и подписей на старте пустые images = [] labels = [] # перебираем все картинки в датасете for image_path in image_paths: # читаем картинку и сразу переводим в ч/б image_pil = Image.open(image_path).convert(‘L’) # переводим картинку в numpy-массив image = np.array(image_pil, ‘uint8’) # получаем id пользователя из имени файла nbr = int(os.path.split(image_path)[1].split(«.»)[0].replace(«face-«, «»)) # определяем лицо на картинке faces = faceCascade.detectMultiScale(image) # если лицо найдено for (x, y, w, h) in faces: # добавляем его к списку картинок images.append(image[y: y + h, x: x + w]) # добавляем id пользователя в список подписей labels.append(nbr) # выводим текущую картинку на экран cv2.imshow(«Adding faces to traning set. «, image[y: y + h, x: x + w]) # делаем паузу cv2.waitKey(100) # возвращаем список картинок и подписей return images, labels
Наконец, обучаем и сохраняем модель, чтобы её можно было использовать в других проектах. При этом нейросети неважно, сколько пользователей и фотографий будет в датасете — один или тысяча. Она запомнит их все, сопоставит одно с другим и запомнит, как выглядит пользователь под каждым номером. Результат такой обработки сохраним в yml-файле — это один из стандартных форматов для таких моделей:
Программы на Python | Распознавание лиц с камеры и в видео на Python | Opencv-python
# получаем список картинок и подписей
images, labels = get_images_and_labels(dataPath)
# обучаем модель распознавания на наших картинках и учим сопоставлять её лица и подписи к ним
recognizer.train(images, np.array(labels))
# сохраняем модель
recognizer.save(path+r’/trainer/trainer.yml’)
# удаляем из памяти все созданные окнаы
cv2.destroyAllWindows()
Если после запуска скрипта в папке trainer появился файл trainer.yml — поздравляем, вы только что обучили нейросеть распознавать лицо человека!
# подключаем библиотеку машинного зрения import cv2 # библиотека для вызова системных функций import os # получаем путь к этому скрипту path = os.path.dirname(os.path.abspath(__file__)) # указываем, что мы будем искать лица по примитивам Хаара detector = cv2.CascadeClassifier(cv2.data.haarcascades + «haarcascade_frontalface_default.xml») # счётчик изображений i=0 # расстояния от распознанного лица до рамки offset=50 # запрашиваем номер пользователя name=input(‘Введите номер пользователя: ‘) # получаем доступ к камере video=cv2.VideoCapture(0) # запускаем цикл while True: # берём видеопоток ret, im =video.read() # переводим всё в ч/б для простоты gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY) # настраиваем параметры распознавания и получаем лицо с камеры faces=detector.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5, minSize=(100, 100)) # обрабатываем лица for(x,y,w,h) in faces: # увеличиваем счётчик кадров i=i+1 # записываем файл на диск cv2.imwrite(«dataSet/face-«+name +’.’+ str(i) + «.jpg», gray[y-offset:y+h+offset,x-offset:x+w+offset]) # формируем размеры окна для вывода лица cv2.rectangle(im,(x-50,y-50),(x+w+50,y+h+50),(225,0,0),2) # показываем очередной кадр, который мы запомнили cv2.imshow(‘im’,im[y-offset:y+h+offset,x-offset:x+w+offset]) # делаем паузу cv2.waitKey(100) # если у нас хватает кадров if i>30: # освобождаем камеру video.release() # удаляем все созданные окна cv2.destroyAllWindows() # останавливаем цикл break
# подключаем библиотеку компьютерного зрения import cv2 # библиотека для вызова системных функций import os # для обучения нейросетей import numpy as np # встроенная библиотека для работы с изображениями from PIL import Image # получаем путь к этому скрипту path = os.path.dirname(os.path.abspath(__file__)) # создаём новый распознаватель лиц recognizer = cv2.face.LBPHFaceRecognizer_create() # указываем, что мы будем искать лица по примитивам Хаара faceCascade = cv2.CascadeClassifier(cv2.data.haarcascades + «haarcascade_frontalface_default.xml») # путь к датасету с фотографиями пользователей dataPath = path+r’/dataSet’ # получаем картинки и подписи из датасета def get_images_and_labels(datapath): # получаем путь к картинкам image_paths = [os.path.join(datapath, f) for f in os.listdir(datapath)] # списки картинок и подписей на старте пустые images = [] labels = [] # перебираем все картинки в датасете for image_path in image_paths: # читаем картинку и сразу переводим в ч/б image_pil = Image.open(image_path).convert(‘L’) # переводим картинку в numpy-массив image = np.array(image_pil, ‘uint8′) # получаем id пользователя из имени файла nbr = int(os.path.split(image_path)[1].split(«.»)[0].replace(«face-«, «»)) # определяем лицо на картинке faces = faceCascade.detectMultiScale(image) # если лицо найдено for (x, y, w, h) in faces: # добавляем его к списку картинок images.append(image[y: y + h, x: x + w]) # добавляем id пользователя в список подписей labels.append(nbr) # выводим текущую картинку на экран cv2.imshow(«Adding faces to traning set. «, image[y: y + h, x: x + w]) # делаем паузу cv2.waitKey(100) # возвращаем список картинок и подписей return images, labels # получаем список картинок и подписей images, labels = get_images_and_labels(dataPath) # обучаем модель распознавания на наших картинках и учим сопоставлять её лица и подписи к ним recognizer.train(images, np.array(labels)) # сохраняем модель recognizer.save(path+r’/trainer/trainer.yml’) # удаляем из памяти все созданные окнаы cv2.destroyAllWindows()
Что дальше
Теперь у нас всё готово для того, чтобы мы добавили новую модель в скрипт распознавания лиц. Сделаем это в следующий раз и посмотрим, как нейросеть справляется с этой задачей.
Любите данные? Посмотрите вот это
Возможно, у вас получится построить карьеру в мире дата-сайенса. Это новое направление, в котором очень нужны люди. Изучите эту сферу и начните карьеру в ИТ: старт — бесплатно, а после обучения — помощь с трудоустройством.
Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Источник: thecode.media
Кейс: Хабиб vs МакГрегор или Распознавание лиц на Python
Детекция (т.е. нахождение) и распознавание лиц — очень популярная задача в современном мире: в метро уже давно следят за нашими передвижениями, а в загородных домах все чаще ставят «умные дверные глазки».
Так уж сложилось, что сейчас уже нельзя просто написать программу для распознавания лиц и присвоить себе должность Senior Data Scientist — таких знаний требуют даже от начинающих специалистов.
Если Вы еще не игрались с распознаванием лиц, но хотите развиваться в области нейронных сетей (ну или просто Вам интересна эта область), то эксперты IT Resume подготовили для вас этот гайд — давайте вместе пройдем все шаги:
- научимся загружать и представлять фотографии в виде матриц;
- проведем обработку исходных фотографий;
- задетектим лица на фотографии;
- обработаем изображения нейронной сетью;
- посмотрим — сможет ли сеть понять, что мы ей дали два фото одного и того же человека.
Для работы нам потребуется:
- Google Colab — среда для работы с Python в браузере. Они еще доступ к GPU дают (а для нейронных сетей это очень нужно).
- И все
Этап 1. Подключение модулей
Перед тем, как начать работу, давайте сменим среду выполнения на «Ускорение GPU». В будущем нам это понадобится для работы нейронной сети. Для этого в Google Colab нажимаем «Среда выполнения» → «Сменить среду выполнения» → «Аппаратный ускоритель GPU».
Теперь подключим необходимые библиотеки. В Colab большинство библиотек уже установлено, поэтому нам осталось их только импортировать:
- cv2 — для загрузки и обработки изображений;
- dlib — для детекции лиц;
- numpy — для работы с матрицами.
Помимо этого, с помощью команды pip install face_recognition мы устанавливаем библиотеку face_recognition — с ее помощью мы будем обрабатывать лицо нейронной сетью.
Примечание Вообще сделать полную обработку можно всего за несколько строчек кода, потому что в библиотеке face_recognition многие процессы (например, детекция лиц) уже завернуты в функции. Но мы намеренно некоторые вещи будем делать «с нуля», чтобы вы лучше во всем разобрались.
Этап 2. Первичная настройка
Теперь нам нужно произвести небольшую настройку, чтобы потом полноценно использовать все инструменты и кодовую базу.
Начнем с настройки детектора лиц. Сначала скачиваем файл с готовой моделью с помощью команды wget (да, именно этой командой Цукерберг запустил Фэйсбук в фильме Социальная сеть) и распаковываем файл в формат .dat.
wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2 bunzip2 shape_predictor_68_face_landmarks.dat.bz2
Далее создаем детектор лиц и передаем скачанную модель в shape_predictor , который будет предсказывать ключевые точки человеческого лица — контур головы, глаза, нос и рот.
face_detector = dlib.get_frontal_face_detector() predictor = dlib.shape_predictor(‘shape_predictor_68_face_landmarks.dat’)
Отлично, теперь мы готовы переходить к содержательной части — обработке фотографий.
Этап 3. Загрузка и обработка фотографий
Перед тем, как загружать фотографию в переменную Python, ее надо загрузить в файловое хранилище Google Colab. Для этого достаточно нажать на иконку Папки на левом сайдбаре и выбрать Upload.