[Питон автоматически надевает новогоднюю шапку] 01 Знакомство с библиотекой face_recognition

компьютерное зрение

В последние два-три года, каждый раз, когда дело доходит до Рождества, в кругу друзей появляются всевозможные «Официальный @WeChat, дай мне рождественскую шляпу». Не будем говорить о том, дал официальный WeChat или нет.Основываясь на идее «выпрашивать у других, лучше просить у себя», в этот раз воспользуемсяPythonНапишите скрипт, который автоматически надевает шапку Санты.

источник

Каждое Рождество круг друзей становится оживленным. Все торопятся попросить у официального представителя WeChat новогоднюю шапку:

Не говорите этого, официальный представитель WeChat действительно исполнил пожелания всех пользователей сети:

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

Примечание. Изображения в этом разделе взяты из Sina News->Chongqing Business Daily в2017年12月23日 12:35Статья, если есть какие-либо нарушения, пожалуйста, свяжитесь, чтобы удалить ее.

Кратко проанализируйте

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

Итак, что нужно сделать, чтобы новогодняя шапка автоматически ставилась на правильное место аватара (рассмотрим только случай, когда аватар содержит человеческое лицо)?

Вот шаги, на мой взгляд:

  1. Получить аватар, чтобы найти лицо
  2. Получите ключевые точки лица
  3. Получите правильное положение шляпы Санты
  4. Изменить размер шапки Санты
  5. Синтетический аватар

Распознавание лиц

Чтобы найти лица, мы должны поговорить о технологии распознавания лиц.

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

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

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

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

face_recognitionраспознавания лиц основано на ведущих в отрасли моделях глубокого обучения, вLabeled Faces in the WildВ наборе данных лиц есть до99.38%Единственная ложка дегтя в том, что точность распознавания детей и азиатских лиц еще предстоит улучшить. В реальных условиях на эффект обнаружения лица также влияет освещение и окклюзия лица, но мы также можем провести исследование.

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

Ниже приведены кадры или рекламные фотографии «Празднования более чем года», они действительно красивы и прекрасны:

Вот как его установить. так какface_recognitionзависит от библиотекиdlibПакет должен быть скомпилирован, студенты, которым лень возиться, могут напрямую скачать скомпилированный пакет..whlдля файлаpipКоманда для установки или ответ в фоновом режиме официального аккаунтаface_recognitionПолучать. Команда установки выглядит следующим образом:

pip install dlib-****.whl

определение положения лица

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

Во-первых, ввести соответствующие пакеты:

import face_recognition
import cv2

затем используйтеface_recognitionЧтобы прочитать картинку с лицом:

image = face_recognition.load_image_file('your-path-to-face')

Вот код ключа:

face_locations = face_recognition.face_locations(image)

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

for top, right, bottom, left in face_locations:
    cv2.rectangle(image, (left, top), (right, bottom), (0, 0, 255), 2)
    face_locations = face_recognition.face_locations(image)
cv2.imshow('rects_face', image[:,:,::-1])
cv2.waitKey(0)

Внимательный читатель может заметитьimage[:,:,::-1]. Причина в том, что при чтении изображений общий метод обычно соответствуетR,G,Bв порядке, иOpenCVвB,G,Rв порядке, поэтому вам нужно использовать последнее измерение::-1в обратном порядке.

Вот результат распознавания лиц:

Это очень просто, плюс введение пакета и отображаемый код всего 9 строк.

Обнаружение ключевых точек лица

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

Прежде чем получить координаты, нужно еще определить код лица аналогично приведенному выше:

image = face_recognition.load_image_file(face)
face_locations = face_recognition.face_locations(image)
face_landmarks = face_recognition.face_landmarks(image, face_locations)

Или код для решения проблемы.face_landmarksВ нем хранится подробное расположение черт лица. Возьмем, к примеру, «Фань Сянь».face_landmarksКонкретная информация следующая:

[{
	'chin': [(148, 100), (149, 117), (152, 133), (155, 148), (161, 163), (169, 177), (178, 189), (190, 198), (203, 200), (216, 198), (226, 189), (235, 178), (244, 165), (250, 151), (254, 136), (257, 120), (259, 104)],
	'left_eyebrow': [(162, 105), (172, 103), (182, 106), (191, 109), (202, 112)],
	'right_eyebrow': [(213, 114), (222, 110), (231, 106), (241, 103), (250, 106)],
	'nose_bridge': [(206, 121), (206, 131), (206, 141), (206, 151)],
	'nose_tip': [(195, 156), (200, 157), (206, 159), (211, 157), (216, 155)],
	'left_eye': [(173, 118), (179, 117), (187, 117), (192, 121), (185, 123), (178, 122)],
	'right_eye': [(220, 122), (226, 118), (233, 117), (239, 119), (234, 123), (227, 123)],
	'top_lip': [(187, 174), (194, 171), (201, 169), (206, 171), (211, 169), (216, 171), (223, 173), (220, 174), (211, 174), (205, 175), (200, 174), (191, 174)],
	'bottom_lip': [(223, 173), (216, 180), (210, 184), (205, 185), (200, 184), (193, 181), (187, 174), (191, 174), (200, 175), (205, 176), (211, 175), (220, 174)]
}]

Всего72ключевые точки, в которых находятся левая и правая брови5каждый, левый и правый глаз6один, нос5один, переносица4каждая, верхняя и нижняя губы12и щеки17Кусок.

Как и прежде, для интуитивного наблюдения нарисуйте эти точки кодом, код следующий:

for each in face_landmarks:
    for i in each.keys():
        for any in each[i]:
            points_face = cv2.circle(points_face, any, 3, (0,0,255), -1)

Результат выглядит следующим образом:

С помощью этих ключевых моментов мы можем легко определить положение рождественской шапки.

следующее уведомление

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

постскриптум

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

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

https://github.com/TitusWongCN/WeChatSubscriptionArticles

Ниже приведен мой официальный аккаунт, если интересно, можете его отсканировать: