Самый простой в мире API распознавания лиц для Python и командной строки
В этой статье мы исследуем библиотеку face_recognition и реализуем систему распознавания лиц.
Схема:
- Шаг 1: установка
- Шаг 2: поиск лиц на изображении
- Шаг 3: Определение черт лица
- Шаг 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