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

Прекрасная область компьютерного зрения за последние годы выросла в отдельную лигу. Впечатляющее количество приложений уже широко используются по всему миру - и мы только начинаем!

Одна из моих любимых вещей в этой области - идея о том, что наше сообщество принимает концепцию открытого исходного кода. Даже крупные технологические гиганты готовы делиться новыми открытиями и инновациями со всеми, чтобы технологии не оставались «делом богатых».

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

Итак, вы готовы? Тогда читайте дальше!

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

Оглавление

  1. Возможные применения распознавания лиц

2. Настройка системы - требования к оборудованию / программному обеспечению
2.1 Настройка оборудования
2.2 Настройка программного обеспечения

3. Погружение в реализацию Python
3.1 Простое пошаговое руководство
3.2 Пример использования функции распознавания лиц

Перспективные применения распознавания лиц

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

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

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

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

Еще одно интересное применение обнаружения лиц - подсчет количества людей, посещающих мероприятие (например, конференцию или концерт). Вместо того, чтобы вручную подсчитывать посетителей, мы устанавливаем камеру, которая может захватывать изображения участников и давать нам общее количество человек. Это может помочь автоматизировать процесс и сэкономить массу ручных усилий. Довольно полезно, не правда ли?

Вы можете придумать еще много подобных приложений - не стесняйтесь делиться ими в разделе комментариев ниже.

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

Настройка системы - требования к оборудованию / программному обеспечению

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

В частности, для этой статьи я использовал и рекомендую использовать:

  • Веб-камера (Logitech C920) для создания детектора лица в реальном времени на ноутбуке Lenovo E470 ThinkPad (Core i5 7-го поколения). Вы также можете использовать встроенную камеру вашего ноутбука или камеру видеонаблюдения в любой подходящей системе для анализа видео в реальном времени вместо той настройки, которую я использую.
  • Использование графического процессора для более быстрой обработки видео - всегда бонус
  • Что касается программного обеспечения, мы использовали ОС Ubuntu 18.04 со всем необходимым программным обеспечением.

Давайте рассмотрим эти моменты более подробно, чтобы убедиться, что все настроено правильно, прежде чем строить нашу модель распознавания лиц.

Шаг 1. Настройка оборудования

Первое, что вам нужно сделать, это проверить, правильно ли настроена веб-камера. Простая уловка в Ubuntu - посмотреть, зарегистрировано ли устройство в ОС. Вы можете выполнить следующие действия:

  1. Перед подключением веб-камеры к ноутбуку проверьте все подключенные видеоустройства, перейдя в командную строку и набрав ls / dev / video *. Это напечатает видеоустройства, которые уже подключены к системе.

2. Подключите веб-камеру и снова запустите команду.

Если веб-камера успешно подключилась, команда отобразит новое устройство.

3. Еще вы можете использовать любое программное обеспечение для веб-камеры, чтобы проверить, правильно ли работает веб-камера. Для этого вы можете использовать «Cheese» в Ubuntu.

Здесь мы видим, что веб-камера настроена правильно. И это все, что касается аппаратного обеспечения!

Шаг 2: установка программного обеспечения

Шаг 2.1: Установите Python

Код в этой статье построен с использованием Python версии 3.5. Хотя есть несколько способов установить Python, я бы рекомендовал использовать Anaconda - самый популярный дистрибутив Python для науки о данных. Вот ссылка для установки Anaconda в вашу систему.

Шаг 2.2: Установите OpenCV

OpenCV (Open Source Computer Vision) - библиотека, предназначенная для создания приложений компьютерного зрения. Он имеет множество предварительно написанных функций для задач обработки изображений. Чтобы установить OpenCV, выполните установку библиотеки по пипу:

pip3 install opencv-python

Шаг 2.3: Установите face_recognition API;

Наконец, мы будем использовать face_recognition, получивший название самого простого в мире API распознавания лиц для Python. Установить:

pip install dlib 
pip install face_recognition

Давайте погрузимся в реализацию

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

Простое прохождение

Сначала создайте файл face_detector.py, а затем скопируйте приведенный ниже код:

# import libraries
import cv2
import face_recognition

# Get a reference to webcam 
video_capture = cv2.VideoCapture("/dev/video1")

# Initialize variables
face_locations = []

while True:
    # Grab a single frame of video
    ret, frame = video_capture.read()

    # Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses)
    rgb_frame = frame[:, :, ::-1]

    # Find all the faces in the current frame of video
    face_locations = face_recognition.face_locations(rgb_frame)

    # Display the results
    for top, right, bottom, left in face_locations:
        # Draw a box around the face
        cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)

    # Display the resulting image
    cv2.imshow('Video', frame)

    # Hit 'q' on the keyboard to quit!
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Release handle to the webcam
video_capture.release()
cv2.destroyAllWindows()

Затем запустите этот файл Python, набрав:

python face_detector.py

Если все работает правильно, появится новое окно с запущенным распознаванием лиц в реальном времени.

Подводя итог, вот что сделал наш приведенный выше код:

  1. Сначала мы определили оборудование, на котором будет проводиться анализ видео.
  2. Исходя из этого, мы захватили видео в реальном времени, кадр за кадром.
  3. Затем мы обработали каждый кадр и извлекли местоположения всех лиц на изображении.
  4. Наконец, мы визуализировали эти кадры в видео вместе с местоположениями лиц.

Просто, не правда ли? Если вы хотите вдаваться в подробности, я включил комментарии в каждый раздел кода. Вы всегда можете вернуться и посмотреть, что мы сделали.

Сценарий использования функции распознавания лиц

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

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

Как мы это делаем? Первым шагом является создание системы, которая идентифицирует человека (лиц) на видео и фокусируется на местонахождении говорящего.

Посмотрим, как мы можем это реализовать. Для этой статьи я взял видео с Youtube, на котором спикер выступает во время конференции DataHack Summit 2017.

Сначала импортируем необходимые библиотеки:

import cv2 
import face_recognition

Затем прочтите видео и получите длину:

input_movie = cv2.VideoCapture("sample_video.mp4")
length = int(input_movie.get(cv2.CAP_PROP_FRAME_COUNT))

После этого мы создаем выходной файл с требуемым разрешением и частотой кадров, который аналогичен входному файлу.

Загрузите образец изображения говорящего, чтобы идентифицировать его на видео:

image = face_recognition.load_image_file("sample_image.jpeg")
face_encoding = face_recognition.face_encodings(image)[0]

known_faces = [
face_encoding,
]

Все это завершено, теперь мы запускаем цикл, который будет делать следующее:

  • Извлечь кадр из видео
  • Найдите все лица и определите их
  • Создайте новое видео, чтобы объединить исходный кадр с аннотированным лицом говорящего.

Посмотрим на код для этого:

# Initialize variables
face_locations = []
face_encodings = []
face_names = []
frame_number = 0

while True:
    # Grab a single frame of video
    ret, frame = input_movie.read()
    frame_number += 1

    # Quit when the input video file ends
    if not ret:
        break

    # Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses)
    rgb_frame = frame[:, :, ::-1]

    # Find all the faces and face encodings in the current frame of video
    face_locations = face_recognition.face_locations(rgb_frame, model="cnn")
    face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)

    face_names = []
    for face_encoding in face_encodings:
        # See if the face is a match for the known face(s)
        match = face_recognition.compare_faces(known_faces, face_encoding, tolerance=0.50)

        name = None
        if match[0]:
            name = "Phani Srikant"

        face_names.append(name)

    # Label the results
    for (top, right, bottom, left), name in zip(face_locations, face_names):
        if not name:
            continue

        # Draw a box around the face
        cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)

        # Draw a label with a name below the face
        cv2.rectangle(frame, (left, bottom - 25), (right, bottom), (0, 0, 255), cv2.FILLED)
        font = cv2.FONT_HERSHEY_DUPLEX
        cv2.putText(frame, name, (left + 6, bottom - 6), font, 0.5, (255, 255, 255), 1)

    # Write the resulting image to the output video file
    print("Writing frame {} / {}".format(frame_number, length))
    output_movie.write(frame)

# All done!
input_movie.release()
cv2.destroyAllWindows()

Затем код даст вам следующий результат:

Какая же потрясающая вещь - распознавание лиц! 🙂

Заключение

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

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

Как всегда, не стесняйтесь обращаться, если у вас есть какие-либо вопросы / предложения в разделе комментариев ниже!

Первоначально опубликовано на www.analyticsvidhya.com 10 декабря 2018 г.