Распознавание лиц с Python и OpenCV: готовая модель

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

Подготовка: Натренированная модель

Готовые натренированные модели можно найти на официальной странице OpenCV. Здесь представлены файлы для распознавания различных объектов: глаз, всего тела человека, номерных знаков автомобилей, улыбок и других. Для распознавания лиц нужна модель frontalface_default. Она представляет собой XML-файл, содержащий весовые коэффициенты нейронной сети. Скачайте его (кнопка Raw на странице загрузки) и сохраните как .xml (например, face.xml).

Код программы

  1. Загрузка и преобразование изображения:
img = cv2.imread('images/image1.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  1. Загрузка модели:
face_cascade = cv2.CascadeClassifier('face.xml')
  1. Обнаружение лиц: Метод detectMultiScale() находит координаты лиц. scaleFactor определяет, насколько крупнее лица могут быть найдены по сравнению с теми, на которых тренировалась модель. minNeighbors задаёт минимальное количество соседей у найденного объекта.
faces = face_cascade.detectMultiScale(gray, scaleFactor=2, minNeighbors=3)
  1. Отображение результатов: Цикл перебирает найденные лица и отрисовывает прямоугольники вокруг них на цветном изображении.
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 3)
cv2.imshow('Faces', img)
cv2.waitKey(0)

Обработка для обнаружения лиц ведётся на серых изображениях, но результаты отображаются на исходном цветном.

Настройка параметров

Значения scaleFactor и minNeighbors могут потребовать подстройки для достижения оптимальных результатов на разных изображениях.

Использование натренированных моделей OpenCV позволяет легко реализовать распознавание лиц и других объектов. Принцип работы с другими моделями аналогичен.

Что будем искать? Например,программа