Самый простой в мире API распознавания лиц для Python и командной строки

В этой статье мы исследуем библиотеку face_recognition и реализуем систему распознавания лиц.

Схема:

  1. Шаг 1: установка
  2. Шаг 2: поиск лиц на изображении
  3. Шаг 3: Определение черт лица
  4. Шаг 4: Определение известных лиц

Шаг 1. Установка:

Требования

  • Python 3.3+ или Python 2.7
  • macOS или Linux (Windows официально не поддерживается, но будет работать нормально)

Для Windows: сначала убедитесь, что у вас установлен dlib. Если у вас не установлен dlib. Выполните следующие действия.

  • Клонируйте код с GitHub:
git clone https://github.com/davisking/dlib.git
  • Установить с расширением Python:
cd ..
python3 setup.py install

После этого шага вы сможете успешно запустить import dlib.

После успешной установки библиотеки dlib установите face_recognition с помощью этой команды pip

pip3 install face_recognition

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

Шаг 2. Обнаружение лиц на изображении

мы начнем с импорта face_recognition библиотеки

import face_recognition

Использование встроенной функции load_image_file() для загрузки изображения. А затем с помощью face_locations(), который дает массив, в котором перечислены координаты каждой грани!

image = face_recognition.load_image_file("picture.jpg")
face_locations = face_recognition.face_locations(image)

Результат будет примерно таким!

I found 1 face(s) in this photograph.
A face is located at pixel location Top: 241, Left: 419, Bottom: 562, Right: 740

Шаг 3. Определение черт лица.

Функция face_landmarks() находит все ориентиры на лице и возвращает Словарь, содержащий ориентиры.

# Find all facial features in all the faces in a image face_landmarks_list = face_recognition.face_landmarks(image)
print(face_landmarks_list)

И на выходе будет примерно так!

[{'chin': [(429, 328), (426, 368), (424, 408), (425, 447), (437, 484), (460, 515), (490, 538), (524, 556), (562, 564), (600, 566), (630, 554), (655, 533), (672, 507), (684, 476), (694, 445), (702, 413), (707, 382)], 
'left_eyebrow': [(488, 294), (509, 279), (535, 278), (561, 283), (584, 296)], 
'right_eyebrow': [(622, 307), (646, 305), (670, 309), (691, 321), (698, 344)], 
'nose_bridge': [(601, 328), (599, 352), (598, 375), (596, 400)], 'nose_tip': [(555, 414), (570, 421), (586, 428), (601, 428), (614, 426)], 
'left_eye': [(512, 320), (528, 316), (544, 319), (557, 331), (541, 330), (525, 327)], 
'right_eye': [(629, 348), (647, 342), (661, 346), (672, 357), (659, 358), (644, 354)], 
'top_lip': [(519, 459), (545, 455), (566, 456), (580, 462), (595, 462), (610, 470), (627, 480), (620, 477), (593, 470), (579, 468), (564, 463), (527, 459)], 
'bottom_lip': [(627, 480), (606, 482), (589, 479), (575, 477), (560, 473), (540, 468), (519, 459), (527, 459), (563, 461), (577, 466), (592, 468), (620, 477)]}]

Шаг 4. Определение известных лиц.

Во-первых, нам нужны фотографии людей, которых мы хотим узнать.

  • Убедитесь, что на каждой фотографии изображен один человек

Теперь мы воспользуемся функцией face_encodings(), которая возвращает список результатов идентифицированных лиц. Обратите внимание, что мы будем использовать [0], чтобы получить Face Encoding от первого человека.

kohli = face_recognition.load_image_file("Virat Kohli.jpg")
kohli_face_encoding = face_recognition.face_encodings(kohli)[0]
ronaldo = face_recognition.load_image_file("Ronaldo.jpg")
ronaldo_face_encoding= face_recognition.face_encodings(ronaldo)[0]

Теперь создайте массивы известных кодировок лиц и их имен.

known_face_encodings = [kohli_face_encoding, ronaldo_face_encoding]
known_face_names = ["Virat Kohli" , "Ronaldo"]

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

unknown_image = face_recognition.load_image_file("Unknown.jpg")
face_locations = face_recognition.face_locations(unknown_image)
face_encodings = face_recognition.face_encodings(unknown_image, face_locations)

Преобразование изображения в изображение PIL-формата. Чтобы мы могли нарисовать ограничивающие рамки на изображении.

from PIL import Image, ImageDraw
pil_image = Image.fromarray(unknown_image)
# Create a Pillow ImageDraw Draw instance to draw
draw = ImageDraw.Draw(pil_image)

Теперь прокрутите каждое лицо на изображении и нарисуйте ограничивающие рамки:

for (t, r, b, l), in zip(face_locations, face_encodings):
  matches = face_recognition.compare_faces(known_face_encodings, face_encoding)
# Instead, use face_distance to calculate similarities
    face_distances = face_recognition.face_distance(known_face_encodings, face_encoding)
  best_match_index = np.argmin(face_distances)
  name = "Unknown"
  if matches[best_match_index]:
    name = known_face_names[best_match_index]
# Draw a box around the face using the Pillow module
  draw.rectangle(((l, t), (r, b)), outline=(0, 0, 255))
# Draw a label with a name below the face 
  width, height = draw.textsize(name)
  draw.rectangle(((l, b - height - 10), (r, b)), fill=(0, 0, 255),     outline=(0, 0, 255))
  draw.text((l + 6, b - height - 5), name, fill=(255, 255, 255, 255))
display(pil_image)

Вот и все!!!

Я надеюсь, что это даст вам более наглядное и практическое представление о том, как использовать face_recognition API.

Ссылка:

  • «Https://github.com/ageitgey/face_recognition АнаFace Recognition Face Detection Deep Learning Machine Learning Convolutional Neural Networks Data Science