Рассказывает команда IT Resume
Детекция (т.е. нахождение) и распознавание лиц — очень популярная задача в современном мире: в метро уже давно следят за нашими передвижениями, а в загородных домах все чаще ставят «умные дверные глазки».
Так уж сложилось, что сейчас уже нельзя просто написать программу для распознавания лиц и присвоить себе должность Senior Data Scientist — таких знаний требуют даже от начинающих специалистов.
Если Вы еще не игрались с распознаванием лиц, но хотите развиваться в области нейронных сетей (ну или просто Вам интересна эта область), то эксперты IT Resume подготовили для вас этот гайд — давайте вместе пройдем все шаги:
Для работы нам потребуется:
Итак, начнем.
Перед тем, как начать работу, давайте сменим среду выполнения на «Ускорение GPU». В будущем нам это понадобится для работы нейронной сети. Для этого в Google Colab нажимаем «Среда выполнения» → «Сменить среду выполнения» → «Аппаратный ускоритель GPU».
Теперь подключим необходимые библиотеки. В Colab большинство библиотек уже установлено, поэтому нам осталось их только импортировать:
cv2
— для загрузки и обработки изображений;dlib
— для детекции лиц;numpy
— для работы с матрицами.Помимо этого, с помощью команды pip install face_recognition
мы устанавливаем библиотеку face_recognition
— с ее помощью мы будем обрабатывать лицо нейронной сетью.
Примечание Вообще сделать полную обработку можно всего за несколько строчек кода, потому что в библиотеке face_recognition
многие процессы (например, детекция лиц) уже завернуты в функции. Но мы намеренно некоторые вещи будем делать «с нуля», чтобы вы лучше во всем разобрались.
Теперь нам нужно произвести небольшую настройку, чтобы потом полноценно использовать все инструменты и кодовую базу.
Начнем с настройки детектора лиц. Сначала скачиваем файл с готовой моделью с помощью команды wget
(да, именно этой командой Цукерберг запустил Фэйсбук в фильме Социальная сеть) и распаковываем файл в формат .dat.
wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2 bunzip2 shape_predictor_68_face_landmarks.dat.bz2
Далее создаем детектор лиц и передаем скачанную модель в
, который будет предсказывать ключевые точки человеческого лица — контур головы, глаза, нос и рот.
face_detector = dlib.get_frontal_face_detector() predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
Отлично, теперь мы готовы переходить к содержательной части — обработке фотографий.
Перед тем, как загружать фотографию в переменную Python, ее надо загрузить в файловое хранилище Google Colab. Для этого достаточно нажать на иконку Папки на левом сайдбаре и выбрать Upload.
Мы, например, загрузим фотографию Конора МакГрегора.
Отлично, теперь надо «прочитать» изображение в переменную Python. Это можно сделать несколькими способами, но нам удобнее представить изображение сразу в виде матрицы. Это можно сделать с помощью функции imread
из модуля cv2
.
Если вы загружаете цветную картинку, то «матрица» будет иметь размерность 3*height*width
, где 3 — количество цветовых каналов (RGB), а width
и height
— размерность картинки в пикселях. Проверить это можно с помощью метода shape
. Каждое число в матрице — значение пикселя по конкретному цветовому каналу.
img = cv2.imread('conor.jpg') img.shape #проверяем размерность матрицы #(434, 770, 3)
Кстати говоря, если вы хотите посмотреть на загруженную картинку, то вам нужно:
cv2_imshow
: from google.colab.patches import cv2_imshow
.cv2_imshow
нужную картинку: cv2_imshow(img)
.В некоторых задачах имеет смысл обрабатывать не цветное изображение, а черно-белое. Например, на детекцию лиц наличие цвета мало влияет — контуры лица и так хорошо видны. А вот для нейронной сети это может быть принципиальный момент — мало ли, люди выглядят одинаково, а цвет кожи разный.
Поэтому давайте переведем нашу цветную картинку в черно-белую:
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Теперь переходим к следующему этапу — детекция лица.
Детектор лиц у нас уже настроен, поэтому можем переходить непосредственно к детекции. Делать это будем в 2 этапа:
С помощью detector
мы получим координаты нужного прямоугольника. Если лиц несколько, то и наборов точек будет несколько. Чтобы выбрать конкретное лицо, нужно указать индекс (в нашем случае — ноль).
face_rect = detector(img, 1)[0]
Чтобы посмотреть на результат, можно нарисовать рамку вокруг лица с помощью метода rectangle
и посмотреть фото с помощью cv2_imshow
. Только будьте осторожны — рамка останется на фото навсегда, так что лучше потом загрузить изображение заново.
Теперь по найденным квадратам нужно «предсказать» ключевые точки лица. Для этого используем predictor
, а потом извлекаем координаты точек.
points = predictor(img, face_rect) landmarks = np. array([*map(lambda p: [p.x, p.y], points.parts())])
Здесь, чтобы получить координаты точек, мы использовали сразу несколько полезных операций Python:
- лямбда-функции;
- функцию
map
;- распаковку.
Если вы планируете связать свою работу с Python, то обязательно освойте все эти приемы — они сильно упростят вам жизнь.
На выходе у нас получилось 68 точек. Не будем сильно в этом гайде заморачиваться с тем, как нанести это на фото, но получится что-то в таком духе:
Теперь у нас есть вся необходимая информация, чтобы обработать изображение нейронной сетью — и изображение, и ключевые точки лица. Переходим к следующему этапу.
Основная идея обработки сетью заключается в том, что из исходного «большого» изображения выделяются только ключевые признаки, которые впоследствии и помогут нам отличить одного человека от другого. Другими словами, многомерная матрица-картинки преобразуется в относительно небольшой числовой вектор, который характеризует лицо с картинки.
Итак, получить итоговый вектор очень просто — достаточно вызвать функцию face_encodings
.
vector = face_recognition.face_encodings(img)[0]
Примечание Обратите внимание, что в качестве аргументов мы передали только изображение, а полученные ранее ключевые точки мы не использовали. Причина очень проста — функция face_encodings
делает все те же самые действия, которые мы с вами проделали вручную ранее для понимания процесса «изнутри».
На выходе мы получаем вектор размерности 128, т.е. 128 чисел, которые описывают лицо на фотографии. Что значит каждое из этих чисел — неизвестно: это некоторая абстракция, восстановить и осмыслить которую невозможно — слишком уж много математических преобразований лежит внутри этого процесса.
Однако, от этого вектора нам толку мало — чтобы оценить эффективность «нейросетевых технологий», нужно сравнить два вектора для двух разных фотографий. Давайте немного поэксперементируем — будем подавать разные фото на вход и сравнивать с нашим изначальным фото МакГрегора.
Чтобы сравнивать лица между собой, мы будем действовать следующим образом:
Встает вопрос — что значит «сравнить вектора»? Самый простой способ — посчитать расстояние в некоторой метрике. Мы выберем обычную евклидову метрику. Вычислять ее без лишнего кода нам позволит функция pdist
из scipy.spatial.distance
.
Итак, сначала загрузим еще одну фотографию Конора.
Сохраняем полученный вектор для первой фотографии в vector1
, для второй — в vector2
и вычисляем расстояние:
from scipy.spatial.distance import pdist pdist([vector1, vector2], 'euclidean')
Получаем ответ — 0,48. Это достаточно близкое расстояние, из чего делаем вывод, что это один и тот же человек. Сеть справилась отлично!
Ну хорошо, еще пару экспериментов — давайте возьмем снова Конора, но усложним задачу — пусть он будет в очках.
Результат — 0,56. Снова в яблочко (разработчик библиотеки face_recognition
рекомендует придерживаться порога 0,6 — если больше 0,6, то это другой человек).
Ну что ж, а может сеть просто всех определяет как Конора? Давайте подсунем ей другого бойца — Хабиба Нурмагомедова. Что наша сеть на это скажет?
Снова проводим уже известную процедуру и ответ… — 0.72. По утвержденному ранее порогу, делаем вывод: Хабиб — не Конор. Сеть снова нас не подвела, и мы со спокойной душой можем переходить к более сложным проектам.
Мы с вами разобрали основной инструментарий, который вам понадобится для старта в области face recognition (да и в нейронных сетях, в целом). Однако это далеко не предел — мы затронули лишь верхушку айсберга, опустив очень много моментов как программных, так и математических.
Вот несколько вещей, которые мы рекомендуем вам сделать, чтобы прокачаться в области Computer Vision (компьютерное зрение):
face_recognition
). Начните хотя бы с изучения исходников этой библиотеки на GitHub — там ничего сверхсложного нет.Есть много и других точек роста, но начните с этих — остальные мысли придут в процессе 🙂
Желаем удачи и будем рады помочь в комментариях!
P.S. Наш ноутбук с кодом в Google Colab Вы можете найти здесь.
В настоящее время искусственный интеллект все больше внедряется в повседневную жизнь, тем самым облегчая и ускоряя некоторые процессы. Распознавание объектов есть одним из ключевых моментов в ИИ, а именно это необходимо для того, чтобы программа понимала что перед ней находится и что с этим дальше делать. Это, скажем требование, уже используется довольно таки часто во многих средах с участием ИИ, например: ведение автотранспорта без участия человека, в поиске определенных людей или же вещей, и многое другое где это применяется и еще может применяться. Чтобы выполнить такую задачу, уже достаточно имеется программ которые могут это выполнять и постоянно этот список пополняется. Исключением не стало и данное ПО под названием AIGod.
AIGod — программа с графическим интерфейсом, которое облегчит использование продукта любому пользователю, написанная на языке Python. Программа использует известный метод распознавания YOLOv5, но немного изменена под задумку разработчика. AIGod имеет большой спектр распознавания различных объектов, начиная от людей и транспорта, доходя до определения возникновения пожара по дыму. Так же есть модель распознавания лиц людей, номерных знаков автомобилей, и даже есть модель затрагивающая военную тематику. На момент публикации обучается модель по определению обнаружено настоящее лицо или же фальшивое, иными словами распознавание deepfake, face2face, faceswap и другие. Раз затронули тему лиц, программа имеет возможность не просто определить лицо человека, но сохранить его и если нужно сравнить его с пользовательской базой других лиц и узнать есть ли схожие.
ИИ умеет работать с изображением и видео, а так же с прямой трансляцией с веб-камер, и ссылками на видео в ютуб. Результат анализа можно увидеть сразу, так и позже, так как вся проделанная работа сохраняется.
Некоторые возможности были уже описаны, добавлю еще не большим перечнем:
просмотр результата распознавания можно глянуть из установленным программ на вашей ОС или же уже встроенным методом в программе;
мультипроцессинг в режиме распознавания лиц или же авто номеров в онлайн трансляции;
поддержка нескольких языков;
проверка истории распознавания, да бы избежать лишнюю трату времени на абсолютно ту же задачу с тем же самым файлом.
Программа разрабатывается одним человеком и на слабом ноутбуке, это конечно не плюс, но в то же время программа сможет запуститься и работать на большом количестве устройств, все лишь упирается в скорость работы. Так же программа поддерживает кроссплатформенность и имеет версии компиляции под Windows и Linux ОС, что сможет затронуть большинство желающих ею воспользоваться. Большим плюсом является то, что продукт распространяется под лицензией GNU, ее исходный код открыт для любого желающего и так же является абсолютно бесплатной. Разработчик не собирает и не пересылает никуда информацию пользователя, так же в продукте отсутствует реклама.
Пример результата анализа изображения на распознания объектов на ней.
результат поиска объектов
Никому не секрет, что людей могут обманывать СМИ, что те же люди могут совершать правонарушения, или же, что человек хочет ускорить различные процессы в своей жизни и работе, да бы добиться значимых результатов, зафиксировать и найти нарушителя, проверить правдивость информации и кем она предоставляется с экранов, этот проект нацелен именно на это. Да, ИИ не всегда точный, но к этому всегда стремятся. Данный продукт интересен своим спектром возможностей, которые собраны в один проект, имеет графический интерфейс и абсолютно бесплатен для любого пользователя. Есть и свои недостатки, это то что проект развивается медленно, так как разрабатывается одним человеком, тем самым может являться далеко не идеальным, но проект активный и всегда актуален для различных задач.
Исходный код
Релизы
Как давнему жителю Абу-Даби, мне потребовалось всего несколько месяцев, чтобы осознать, что ласкательные слова в арабском языке часто используются здесь как в личных, так и в профессиональных кругах. .
Будь то встреча за ужином или деловая встреча за завтраком, друзья и коллеги обмениваются нежными прозвищами, что, возможно, было бы неуместно в западных странах.
Я понял это на горьком опыте во время моей последней поездки обратно в Австралию, где я вырос, когда во время ужина с «мальчиками» я начал дискуссию с «моим дорогим Мурадом». Мурад был совершенно сбит с толку.
Тем не менее, даже в более спокойных социальных сферах региона существуют правила взаимодействия.
Например, вы не можете сбросить водородную бомбу (хабиби или хабибти) в первый же присест.Кроме того, в арабском обществе, где старшинство уважается, есть несколько почетных знаков, которые вы можете использовать, чтобы заслужить признание и уважение старших.0003
Вот 15 терминов, которые можно использовать для расширения вашего разговорника ОАЭ: 1. Akhy и ukhtyОзначая «мой брат» и «моя сестра» соответственно, этот дескриптор больше, чем семья. Поскольку дружба в арабском мире является премией, не удивляйтесь, если ваш друг в мгновение ока повысит вас до статуса «ахы» и «ухты». Оба термина также имеют духовный вес: мусульман поощряют называть единомышленников братом или сестрой.
2. Ааму и аммати (Аа-му и Ам-ма-ти)Это означает дядя или тетя, и их следует использовать с людьми, с которыми вы знакомы. Те, кто примерно на 20 лет старше вашего возраста, имеют право на получение статуса ааму или амати. Любого человека более старшего возраста следует называть джадду или джаддати, что означает дедушка и бабушка соответственно.
3. Баш мухандис (Bash mu-han-dis)Старая и очаровательная ручка из Египта, в основном используемая для мужчин, которая восходит к бывшему османскому владычеству в стране. Баш — это сокращение от «баша», термин, используемый турками для лиц высокого ранга, а мухандис — это арабское слово, означающее инженер. Bash muhandis изначально использовался для обращения к квалифицированным инженерам и архитекторам — теперь его используют для всех, кто умеет обращаться с отверткой.
4. БоссУважительное обращение к тем, кто часто оказывает услуги, трудоемкие или в индустрии гостеприимства. Например, вы могли бы назвать обслуживающего персонала, заполняющего ваш бензобак, или официанта «боссом».
5. Дуктур (мужской) и дуктур (женский)В арабском мире не обязательно быть медицинским работником, чтобы быть врачом. С большим уважением к образованию, привитому культурой, это обозначение также используется для награждения тех, кто получил докторскую степень. Этот титул сразу же вызывает уважение к интеллигенции общества.
6. Хаджи (мужчины) и хаджи (женщины)Уважительное обращение к тем, кто совершил исламское паломничество в хадж. Когда они возвращаются из путешествия, их принято называть хаджи или хаджа, а затем называть их по имени. Например, Хаджи Ахмед или Хаджа Фатима. Со временем вы можете прибегнуть к обычному имени, но в течение первых нескольких недель придерживайтесь термина. Человек только что выполнил одну из самых важных и изнурительных задач своей веры, поэтому он заслуживает уважения.
7. Ya omriХотя его буквальное значение — «моя жизнь», оно выполняет ту же функцию, что и «О, милый» или «О, милый». Неудивительно, что этот термин используется в арабских мыльных операх либо в романтических разговорах, либо в сценах, когда партнер умоляет о прощении.
8. Habibi (мужской) и habibti (женский)Оба означают «любимый», и их можно использовать с друзьями и хорошими коллегами. Это один из наиболее широко используемых терминов ласки в регионе, и, скорее всего, это первые арабские слова, которые выучил новоприбывший. Но не бросайте его слишком небрежно. Знакомство не обязательно означает близость, и все же существует кодекс уважения, которого следует придерживаться. Не называйте своего менеджера или профессионального знакомого хабиби или хабибти, если вы не уверены в качестве ваших отношений.
9. Ya sahby и Ya sahbetyЭто вежливый и немного странный способ сказать «мой друг» мужчинам и женщинам соответственно. Разумный и вечнозеленый, его можно использовать в большинстве социальных сетей, однако рекомендуется использовать его с людьми вашей возрастной группы.
10. Дорогой мойНазвание звучит довольно архаично и тяжело для спокойной беседы. Следовательно, это хорошая идея, чтобы быть консервативным в его использовании. Его следует применять в каждом конкретном случае и только для тех, кто первым обращается к вам с использованием этого термина.
11. Я муалемАрабская версия хип-хоп термина «OG». Обычный и крутой способ сказать «учитель» (примечание: все это в доставке), «муалем» — это тот гризли, у которого есть свой собственный зарезервированный столик и который держит суд в своей местной кофейне. Младший кот также может получить титул либо за кажущуюся мудрость, либо за то, что он лучший в своем деле.
12. Устадхи (мужской) и устадхати (женский)Переводится как «мой учитель». Вы можете использовать его отдельно или добавить к имени человека. Например, «Шукран устадхи/устадхати» или «Устади Ахмед/устадхати Фатима».
13. Ya albi или ya roohiВ то время как habibi/habibti обычно являются панарабскими терминами, ya albi или ya roohi в основном используются выходцами из Леванта. Но опять же, поскольку ya albi означает «мое сердце», а ya roohi «моя душа», их следует использовать только с близкими друзьями и единомышленниками.
14. Я райал (ya ray-yal)Эмиратский термин, часто используемый в разговорах между мужчинами. В переводе на «о, чувак», это часто можно услышать в дружеской шутке или как выражение раздражения во время споров.
15. Я РагельЭто региональная версия «Я Райал». Его обычно можно услышать во время шумной ночной карточной игры в кафе, поэтому лучше использовать его среди друзей и подальше от офисной среды.
Потоковое + Скачать
Включает неограниченную потоковую передачу через бесплатное приложение Bandcamp, а также высококачественную загрузку в формате MP3, FLAC и других форматах.
Можно приобрести с подарочной картой
Компакт-диск (CD) + цифровой альбом
Falasteen, Habibti («Палестина, любовь моя») — это сборник песен, связанных с палестинской борьбой, которые я написал в период с 2000 по 2014 год. Песни с разных компакт-дисков были мастерски ремастированы для этого компакт-диска Билли Оскаем в Big Red Studio в Корбетте, штат Орегон.
Включает неограниченную потоковую передачу Falasteen Habibti через бесплатное приложение Bandcamp, а также высококачественную загрузку в форматах MP3, FLAC и других форматах.
отправляется в течение 5 дней
Подписаться теперь получать все новые музыка Дэвид Ровикс создает, включая 28 выпусков бэк-каталога, мгновенно доставлены вам через приложение Bandcamp для iOS и Android. Узнать больше.
28
выпуска
Получить все 28 релизов Дэвида Ровикса доступен на Bandcamp и сохраните 70% .
Включает неограниченное потоковое вещание через бесплатное приложение Bandcamp, а также высококачественные загрузки Убийство Посланника, Первое мая, Прошел год, Повстанческие песни, Скажи их имена, Заметки из неудавшегося государства, вирусная солидарность, Незнакомцы и друзья, и еще 20. , и , .
За исключением выпусков только для подписчиков.
Можно приобрести с подарочной картой
География Израиля 101
Нетаньяху взволнован, его глаза полны ненависти
Он сказал, что проблема этих арабов в том, что они не признают еврейское государство.
Он сказал, что эти палестинцы просто не придут
За принятие еврейского правления на их святой земле
Он сказал, что арабы не принимают своих новых соседей в районе
Эти неблагодарные режимы не уважают нас должным образом
Что ж, я не хочу никого расстраивать или чрезмерно брать на себя ответственность
Но если государство хочет признания, кажется разумным спросить
Где твои границы?
Я слышал, как он выступал перед Конгрессом, заняв 29-е место в рейтинге.