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

Существуют различные модели оценки, основанные на количестве точек-ориентиров лица. Модель с 5 точками — самая простая, которая определяет только края каждого глаза и нижнюю часть носа.

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

Оценка ориентиров лица помогает создавать приложения для нанесения цифрового макияжа или виджетов.

Создайте приложение для оценки черт лица

Мы будем использовать сборку модели face_recognition с использованием библиотеки dlib для нашего приложения. «dlib» — это в основном библиотека C++, однако мы можем использовать ряд ее инструментов для приложений Python. face_recognition — это модель глубокого обучения с точностью 99,38%.

Для получения более подробной информации и ссылок, пожалуйста, посетите:

face_recognition имеет встроенные функции для выполнения задач по обнаружению, распознаванию и идентификации лиц. Сначала мы загрузим изображение в массив NumPy и применим функцию face_landmarks. Функция face_landmarks возвращает список всех лиц на изображении. Каждое лицо дополнительно имеет «имя» и «список точек» для всех черт лица. Используя ориентиры каждой черты лица (глаза, нос, губы и т. д.), мы нарисуем линии красного цвета вокруг черт лица.

Примечание. Для приведенного ниже кода требуются три внешние библиотеки Python: подушка, face_recognition и dlib.

#import external libraries 
import PIL.Image
import PIL.ImageDraw
import face_recognition

# Load the jpg file into a numpy array
image = face_recognition.load_image_file("people.jpg")

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

number_of_faces = len(face_landmarks_list)
print("I found {} face(s) in this photograph.".format(number_of_faces))

# Load the image into a Python Image Library object so that we can draw on top of it and display it
pil_image = PIL.Image.fromarray(image)

# Create a PIL drawing object to be able to draw lines later
draw = PIL.ImageDraw.Draw(pil_image)

# Loop over each face
for face_landmarks in face_landmarks_list:

    # Loop over each facial feature (eye, nose, mouth, lips, etc)
    for name, list_of_points in face_landmarks.items():

        # Print the location of each facial feature in this image
        print("The {} in this face has the following points: {}".format(name, list_of_points))

        # Let's trace out each facial feature in the image with a line!
        draw.line(list_of_points, fill="red", width=2)

pil_image.show()

Ниже приведен вывод приведенного выше кода на разных изображениях.

Как вы можете видеть на изображениях выше, черты лица обозначены очень точно. Мы можем дополнительно расширить наше приложение, чтобы применить цифровой макияж, виджеты (очки, маски и т. д.) и так далее. Автор face_recognition и ссылки на эту статью, Адам Гейтгей, предоставил множество примеров в своем репозитории GitHub. Всем настоятельно рекомендую пройти его курс.

Читайте также: Оценка лицевых ориентиров в прямом эфире

Ссылка:

Глубокое обучение: распознавание лиц Адама Гейтги

Получайте лучшие предложения программного обеспечения прямо в свой почтовый ящик