Как написать программу для распознавания лиц по фото и видео
Выясняем, как устроено распознавание лиц на видео и фото, и пробуем самостоятельно создать собственный детектор вместе с программистом Александром Белозеровым.
Распознавание лиц. ИсточникГде нужно распознавание лиц?
Разработкой ПО для распознавания и улучшением алгоритмов занимаются программисты и дата-сайентисты. Эта технология нужна в разных сферах:
- Государство: видеоаналитика используется службами безопасности стран для пограничного контроля, а в Москве так находили нарушителей карантина. Службы безопасности организаций, имеющих дело с секретностью, также используют алгоритмы идентификации для контроля доступа сотрудников к секретным объектам.
- IT-индустрия: Microsoft, Google, Яндекс, ВКонтакте тоже разрабатывают собственные алгоритмы.
- Медицина: технология помогает выявить болезни и отслеживать прогресс в лечении.
- Банкинг: банки используют идентификацию по лицу, чтобы снять деньги в банкомате или получить кредит.
- Образование: распознавание лица помогает поймать тех, кто списывает, — сервисы подключаются к камере на компьютере студента и отслеживают его поведение и движение глаз.
- Персональные портативные устройства: на смартфонах помимо идентификации пользователя распознавание лица выполняет и развлекательную функцию — у приложений Samsung и Snapchat оно лежит в основе AR-фильтров и масок для лица.
Как работает распознавание лиц: метод Виолы-Джонса
Один из способов распознать образ — найти контур объекта и исследовать его свойства. По этому принципу работает метод Виолы-Джонса с использованием признаков Хаара, который придумал венгерский математик Альфред Хаар.
Признаки — это набор геометрических фигур с черно-белым узором, их еще называют маски. Они помогают найти границы какой-либо формы, например очертания лица, линии бровей, носа или рта.
Маски (признаки Хаара) накладываются на фотографии и «находят» на них лица. ИсточникВ алгоритме Виолы-Джонса маски накладываются на разные части кадра, а программа определяет, может ли в них находиться объект. Работает это так:
- Классификатор (алгоритм, который будет искать объект в кадре) обучают на фотографиях лиц и получают пороговое значение — его превышение будет сигнализировать о том, что в кадре есть лицо.
- В классификатор загружают изображение, на котором будут искать лицо.
- Классификатор накладывает на него маски и отдельно складывает яркость пикселей, попавших в белую часть маски, и яркость пикселей, попавших в черную часть маски. Потом из первого значения он вычитает второе.
Результат сравнивается с пороговой величиной.
Если результат меньше пороговой величины, значит, в части кадра нет лица, и алгоритм заканчивает свою работу. А если больше, он переходит к следующей части кадра.
Так происходит классификация: подобласть изображения, которая успешно проходит через весь каскад классификаторов f1, …, fn, классифицируется как лицоНа практике маски находят лицо на фотографии так:
Алгоритмы OpenCV
У изображения лица есть свои характеристики:
- Темные и светлые участки и зоны (темные — глаза, губы; светлые — лоб, щеки, подбородок).
- Лица всех людей устроены по одному принципу (глаза — на одной линии, под глазами — нос, под носом — губы, под губами — подбородок).
Это значит, что можно подобрать такой набор масок и составить такой классификатор, который будет учитывать эти особенности.
Для этого можно использовать OpenCV — библиотеку алгоритмов компьютерного зрения и обработки изображений. Реализована она на C/C++, также разрабатывается для Python, Java, Ruby, Matlab, Lua и других языков.
Инструкция: распознаем лицо на фото
Шаг 1. Скачайте готовый классификатор. Мы будем использовать классификатор OpenCV, обученный находить лица, а также глаза, улыбки и другие черты. Скачать его в виде xml-файлов можно с GitHub.
Шаг 2. Скачайте PyCharm.
PyCharmДля разработки мы советуем кроссплатформенную среду разработки PyCharm — в ней есть полезные инструменты для управления версиями пакетов, анализа кода и его отладки. Скачать ее можно тут.
Шаг 3. Создайте новый проект на Python, мы назвали его opencv_face_recognition.
Шаг 4. По правому клику на названии проекта в дереве каталогов добавьте новый файл main.py.
Шаг 5. Установите библиотеку. Для этого в настройках (Settings) проекта нужно найти вкладку с управлением конфигурацией интерпретатора, нажать на «+», вбить в поиск последовательно «
Это облегченная версия, которая использует для расчетов только процессор, но процесс установки все равно может занять до 15 минут.
Шаг 6. Чтобы использовать установленную библиотеку OpenCV, импортируйте модуль cv2:
import cv2
До тех пор пока мы не обратимся к каким-либо именам из него, он будет подсвечиваться серым, как неиспользуемый.
Шаг 7. Поместите ранее скачанный классификатор haarcascade_frontalface_default.xml в папку проекта
и загрузите его следующим образом:
import cv2.cv2 as cv2
face_cascade = cv2.CascadeClassifier(‘haarcascade_frontalface_default.xml’)
Обратите внимание, что в PyCharm для его корректной подсветки синтаксиса нам пришлось переписать первую строку с импортом.
Шаг 8. Загрузите изображение, на котором мы будем искать лицо, в режиме оттенков серого — информация о цвете алгоритму не важна, только его интенсивность:
import cv2.cv2 as cv2
face_cascade = cv2.CascadeClassifier(‘haarcascade_frontalface_default.xml’)
img = cv2.imread(‘xfiles4. jpg’)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Мы будем использовать кадр из сериала «Секретные материалы» с Малдером и Скалли; вы можете поместить в папку проекта любое другое фото.
Шаг 9. Напишите код. Для поиска лиц на изображении мы используем метод с сигнатурой (его именем и списком параметров)
cv2.CascadeClassifier.detectMultiScale (image [, scaleFactor [, minNeighbors [, flags [, minSize [, maxSize]]]]]):
import cv2.cv2 as cv2
img = cv2.imread(‘xfiles4.jpg’)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
Нам хватит первых трех параметров.
- В image надо будет передать 8-битную матрицу изображения.
- scaleFactor показывает, во сколько раз мы будем уменьшать исходное изображение, пытаясь обнаружить объект: это делается потому, что мы изначально не знаем, какого размера будет лицо. Чем меньше будет этот коэффициент, тем дольше будет работать алгоритм.
- minNeighbors влияет на качество обнаружения: чем больше его значение, тем меньше образов сможет обнаружить алгоритм, но тем точнее будет его работа.
Дефолтные значения для последних двух параметров — 1.1 и 3. Их можно заменить на любые другие и подобрать для конкретного случая, если на дефолтных значениях алгоритм будет работать плохо.
Шаг 10. Если лица будут обнаружены, функция вернет набор объектов типа Rect (x, y, w, h) — прямоугольников, начало которых задано парой координат (x, y), а ширина и высота — как w и h. В цикле for добавим эти прямоугольники в исходное изображение image при помощи cv2.rectangle(image, start_point, end_point, color, thickness) по координатам их противоположных вершин (x, y) и (x+w, y+h):
import cv2.cv2 as cv2
face_cascade = cv2. CascadeClassifier(‘haarcascade_frontalface_default.xml’)
img = cv2.imread(
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
Шаг 11. Для отображения результата и закрытия программы по нажатию клавиши добавим еще несколько строк: вывод картинки, ожидание нажатия любой клавиши и последующее закрытие окна. В итоге весь наш проект будет выглядеть так:
import cv2.cv2 as cv2
face_cascade = cv2.CascadeClassifier(‘haarcascade_frontalface_default.xml’)
img = cv2.imread(‘xfiles4.jpg’)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
cv2.imshow(‘img’, img)
cv2.waitKey(0)
cv2.
Шаг 12. Сочетанием клавиш Ctrl-Shift-F10 (Ctrl-Shift-R на MacOS) запустим скрипт:
Инструкция: распознаем лицо в видеопотоке с веб-камеры
Модернизируем наш код так, чтобы в реальном времени обнаруживать лица в кадре, например, на видео с веб-камеры.
Шаг 1. Создайте объект для захвата видеострима:
import cv2.cv2 as cv2
face_cascade = cv2.CascadeClassifier(‘haarcascade_frontalface_default.xml’)
capture_io = cv2.VideoCapture(2)
Число для cv2.VideoCapture() придется поперебирать, индексом нашей внешней веб-камеры оказалась двойка.
Шаг 2. Считывать кадры с видеоустройства будем в вечном цикле: cv2.VideoCapture.read() возвращает булево значение об успешном считывании из потока (оно нам не нужно) в паре с самой картинкой. Преобразуем ее в 8-битную матрицу так же, как и раньше:
import cv2.cv2 as cv2
face_cascade = cv2. CascadeClassifier(‘haarcascade_frontalface_default.xml’)
capture_io = cv2.VideoCapture(2)
while True:
_, img = capture_io.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Шаг 3. Остается переписать только конец цикла — чтобы у него было условие выхода, например, по нажатию на «q» (от quit, «выйти»). cv2.waitKey(time) 10 мс ожидает ввода с клавиатуры юникод-символа, который приведет к закрытию стрима и программы.
import cv2.cv2 as cv2
face_cascade = cv2.CascadeClassifier(‘haarcascade_frontalface_default.xml’)
capture_io = cv2.VideoCapture(2)
while True:
_, img = capture_io.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
cv2.imshow(‘img’, img)
if cv2.waitKey(10) & 0xFF == ord(«q»):
break
capture_io. release()
cv2.destroyAllWindows()
Шаг 4. Код готов, нажимаем Ctrl-Shift-F10 (Ctrl-Shift-R на MacOS) и наблюдаем результат вживую:
Как подписать селфи с парнем: подборка самых романтичных цитат
Любовь
- Фото
- Getty Images
Не знаешь, как подписать милую фотографию с бойфрендом? Мы поможем. Лови подборку подписей на все случаи жизни. Мы собрали для тебя романтичные, нежные и даже смешные цитаты. Наслаждайся!
- Фото
- Getty Images
Милые подписи
«Каждая история любви прекрасна, но наша — моя любимая».
«Твоя улыбка не способна изменить мир, но она изменила меня».
«Я хочу быть с тобой до последней страницы».
«Я видела тебя столько раз, а в моем животе все еще есть бабочки».
- Фото
- Getty Images
Забавные подписи
«Здесь не на что смотреть, просто парочка влюбленных чудаков».
«Тот неловкий момент, когда любовь всей твоей жизни спрашивает, кто тебе нравится».
«Все, что я хочу, это приготовить тако в твою честь».
- Фото
- Getty Images
Великие цитаты о любви
«Я люблю тебя не за то, кто ты, а за то, кто я, когда я с тобой». — Элизабет Браунинг
«Это удивительно, но только когда мы видим человека смешным, мы понимаем, насколько сильно мы его любим». — Агата Кристи
- Фото
- Getty Images
Цитаты из книг, фильмов и сериалов
«Я влюблен в тебя и не хочу отказывать себе в удовольствии говорить правду». — Джон Грин, Виноваты звезды
«Три слова, восемь букв. Скажи это, и я твоя». — Блэр Уолдорф, Сплетница
«Если ты птица, то и я птица». — Элли, Дневник памяти
- Фото
- Getty Images
Цитаты из романтичных песен
Песни о любви — идеальный источник цитат.
John Legend — All of Me
На английском языке:
- «You’re my end and my beginning / Even when I lose, I’m winning».
На русском языке:
- «Ты мой конец и мое начало / И, даже проигрывая, я побеждаю».
Ed Sheeran — How Would You Feel
На английском языке:
- «How would you feel, if I told you I loved you? / It’s just something that I want to do / I’ll be taking my time, spending my life falling deeper in love with you».
На русском языке:
- «Что бы ты почувствовала, если бы я сказал, что люблю тебя? / Я хочу провести всю свою жизнь, все сильнее влюбляясь в тебя».
Теперь ты во всеоружии. Скорее отправляйся делать фотографии, которые идеально подойдут под эти цитаты!
Подписывайся на theGirl!
в Telegram ◽ в Viber
в ВК ◽ в Zen
в ВК про Корею
Мария Зайцева
Теги
- селфи
- цитаты
- про любовь
Как вписать фото в сценарий?
Итак, ваш персонаж смотрит на фото , и вы хотите его описать. Или в сценарии есть фото, и камера на него панорамирует , и фото видят только зрители, а персонажи нет.
Если у вас есть одна из этих двух проблем, и вы не знаете, как ее описать, я вам помогу.
Как написать фото в сценарии? Вы пишете фото в сценарии, написав «ВСТАВИТЬ – ФОТО». Затем в следующей строке опишите, что мы видим. Наконец, начните новую строку и напишите «НАЗАД К СЦЕНЕ», чтобы обозначить, что мы больше не смотрим на картинку.
Пример 1:
Фотография выпадает из стопки. Джон смотрит на него.
ВСТАВКА - ФОТО
Те же трое мужчин в костюмах окружают Кейси.
НАЗАД К СЦЕНЕ
Вы также можете написать «INSERT-» и описать рассматриваемую фотографию в той же строке. Я использую эту версию для экономии места на странице и более длинных описаний.
В следующем примере мы возвращаемся назад во времени к моменту на фотографии, поэтому использование возврата к сцене устранило бы слишком сильное ожидание недоверия при чтении.
Но вы все же хотите, чтобы читатель знал, что мы меняем вид с того, что видит ваш персонаж, на изображение.
Пример 2:
Хайра стоит у горящего камина. Она пролистывает книгу, полную математических иллюстраций и рукописных заметок, испещренную кофейными пятнами. Выскакивает картинка. Она поднимает его.
ВСТАВКА - Изображение ОБНАЖЕННОЙ ЖЕНЩИНЫ, промокшей насквозь, в середине шага.
Ее единственная одежда - противогаз времен Второй мировой войны, закрывающий и скрывающий всю ее голову. За ней шлейф из луж.
Покупатели бомбардируют единственный выход из плексигласовой двери.
Хайра СЛЫШИТ женское дыхание. Каждый астматический вдох становится все труднее и труднее сделать.
ВОСПОМИНАНИЕ:
ВНУТР. ТОРГОВЫЙ ЦЕНТР – ДЕНЬ
Обнаженная женщина расхаживает, Каждый шаг подобен прыжку камня через мелкий пруд.
Я не буду приводить вам всю сцену, но суть вы поняли.
Да, вы можете вставить картинку в сценарий. В прошлом были сценарии с полными изображениями, дающими перерыв в словах.
Пример:
Это делается не часто и не должно делаться большинством. Каждый, кто когда-либо показывал картинку в сценарии, был сценаристом, уже получившим заказ, или актером, получившим средства от продюсерской компании. Непродюсированные сценаристы не должны пытаться это сделать.
Хотя в будущем мы можем видеть все больше и больше этого стиля написания сценариев, и он может стать приемлемым. Как я всегда говорю, Формат сценария меняется на 2% каждый год.
Ладно, сегодня был короткий.
Пришло время услышать от вас:
В вашем сценарии много изображений?
Как вы до этого додумались показать картинку в сценарии?
Каким бы ни был ваш ответ, давайте послушаем его в комментариях ниже.
Опубликовано в Справка по форматированию Автор D.K.WilsonОпубликовано
Лучший способ безопасно пометить фотографии
Лучший способ безопасно пометить фотографииМорин А. Тейлор
Мы склонны считать, что будущие поколения всегда будут знать, кто изображен на фотографиях, но (как вы, возможно, уже поняли) это не всегда так. Поэтому важно понимать, как безопасно маркировать фотографии, чтобы сохранить информацию на них.
Это общая проблема наших читателей. Один из них написал: «Прежде чем я понял это, все мои семейные фотографии были помечены шариковой ручкой на обороте. Повредит ли это им? Чернила в конце концов просочатся? Теперь у меня есть архивный маркер для будущих фотографий». Другой писал(а): “ Кажется, во всех статьях о реставрации фотографий говорится, что нельзя писать на обратной стороне фотографий ничем, кроме мягкого карандаша. Несколько лет назад я написал имена и т. д. на обратной стороне некоторых своих фотографий, используя водостойкий маркер с перманентными чернилами, который я купил в фотомагазине. Картины до сих пор в идеальном состоянии. Есть ли какая-то причина, по которой мне не следует пользоваться этим маркером?»
Оба этих вопроса касаются одной и той же проблемы: как безопасно маркировать фотографии, чтобы идентифицировать информацию, содержащуюся на них, для будущих поколений? Вам могут помочь фотобезопасные продукты, представленные на рынке, а также эти три совета по маркировке фотографий.
1. Напишите на обратной стороне фотографии мягким графитовым карандашом
Если можете, используйте мягкий графитовый карандаш, чтобы написать информацию, в том числе, кто изображен на фотографии, дату, когда и где она была сделана. на обратной стороне фотографии (где информация никогда не отделится от изображения). Мягкий грифель важен, потому что твердые карандаши оставляют вмятину. Положите фотографию лицевой стороной вниз на чистую сухую поверхность и пишите с легким нажимом.
Вы можете написать некоторые из следующих деталей на обратной стороне фотографии:
- имя (имена) лица (лиц), изображенного на фотографии, а также даты их рождения или смерти
- когда и где было сделано фото
- где вы нашли исходное изображение, или у кого было/было хранение изображения
2. Используйте маркеры с мягким наконечником для фотографий с покрытием
К сожалению, карандаши не будут работать с бумагой с покрытием, используемой для современных фотографий. Вместо этого купите водостойкий маркер с мягким наконечником без запаха (когда он высохнет). Просто будьте осторожны, чтобы чернила полностью высохли, прежде чем складывать или хранить изображение, потому что оно является постоянным.
Шариковые ручки и обычные фломастеры , а не являются хорошим выбором для маркировки фотографий: шариковые ручки размазывают и оставляют вмятины на фотографии, а фломастеры могут растекаться по изображению. Хорошей новостью является то, что в магазинах товаров для творчества и ремесленных мастерских есть множество вариантов безопасных инструментов для маркировки.
3. Отсканируйте фотографии с повреждениями
Если у вас есть фотографии, помеченные шариковой ручкой, все повреждения уже нанесены. Предыдущие поколения не имели доступа к фотобезопасным инструментам, которые есть у нас сегодня. Не беспокойтесь об этом слишком сильно. Вы можете отсканировать фотографии, чтобы сохранить изображение, и исправить пятна чернил цифровым способом, а также убедиться, что вы используете соответствующие продукты при идентификации ваших фотографий.