Quantcast
Channel: Медиа Нетологии: об образовании в диджитале
Viewing all articles
Browse latest Browse all 2506

Создание модели распознавания лиц с использованием глубокого обучения на языке Python

$
0
0

Переводчик Елена Борноволокова специально для блога Нетологии адаптировала статьюФайзана Шайха о том, как создать модель распознавания лиц и в каких сферах ее можно применять.

Обучение в онлайн-университете: профессия "Python-разработчик"

Введение

За последние годы компьютерное зрение набрало популярность и выделилось в отдельное направление. Разработчики создают новые приложения, которыми пользуются по всему миру.

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

Одна из таких технологий - распознавание лиц. При правильном и этичном использовании эта технология может применяться во многих сферах жизни.

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

Распознавание лиц: потенциальные сферы применения

Приведу несколько потенциальных сфер применения технологии распознавания лиц.

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

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

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

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

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

Я использовал следующие инструменты, которые рекомендую вам:

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

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

Шаг 1: Настройка аппаратного обеспечения

Проверьте, правильно ли настроена камера. С Ubuntu это сделать просто: посмотрите, опознано ли устройство операционной системой. Для этого выполните следующие шаги:

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

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

3. Также вы можете использовать ПО веб-камеры для проверки ее корректной работы. В Ubuntu для этого можно использовать программу "Сheese".

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

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

Код, указанный в данной статье, написан с использованием Python (версия 3.5). Для установки Python рекомендую использовать Anaconda - популярный дистрибутив Python для обработки и анализа данных.

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

OpenCV - библиотека с открытым кодом, которая предназначена для создания приложений компьютерного зрения. Установка OpenCV производится с помощью pip:

pip3 install opencv-python

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

Мы будем использовать face_recognition API, который считается самым простым 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()

Код даст вам вот такой результат:

Читать еще: "5 ошибок при внедрении глубокого обучения в компании"


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


Viewing all articles
Browse latest Browse all 2506

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>