В последние два-три года, каждый раз, когда дело доходит до Рождества, в кругу друзей появляются всевозможные «Официальный @WeChat, дай мне рождественскую шляпу». Не будем говорить о том, дал официальный WeChat или нет.Основываясь на идее «выпрашивать у других, лучше просить у себя», в этот раз воспользуемся
Python
Напишите скрипт, который автоматически надевает шапку Санты.
источник
Каждое Рождество круг друзей становится оживленным. Все торопятся попросить у официального представителя WeChat новогоднюю шапку:
Не говорите этого, официальный представитель WeChat действительно исполнил пожелания всех пользователей сети:
Не говоря уже о том, верит ли кто-нибудь в это, актерское мастерство этой волны пользователей сети определенно заслуживает наивысшей оценки.
Примечание. Изображения в этом разделе взяты из Sina News->Chongqing Business Daily в
2017年12月23日 12:35
Статья, если есть какие-либо нарушения, пожалуйста, свяжитесь, чтобы удалить ее.
Кратко проанализируйте
В духе «сделай сам, хватит еды и одежды» я планирую написать сценарий ношения новогодней шапки, ведь чиновники WeChat действительно заняты заботой о потребностях такого количества людей.
Итак, что нужно сделать, чтобы новогодняя шапка автоматически ставилась на правильное место аватара (рассмотрим только случай, когда аватар содержит человеческое лицо)?
Вот шаги, на мой взгляд:
- Получить аватар, чтобы найти лицо
- Получите ключевые точки лица
- Получите правильное положение шляпы Санты
- Изменить размер шапки Санты
- Синтетический аватар
Распознавание лиц
Чтобы найти лица, мы должны поговорить о технологии распознавания лиц.
Исследования по обнаружению и распознаванию лиц были очень горячими, и есть много зрелых приложений. В большинстве мест вы можете использовать свое лицо, чтобы войти на станцию, садясь в поезд, и даже в некоторых местах некий 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
Ниже приведен мой официальный аккаунт, если интересно, можете его отсканировать: