Автор оригинала: Pankaj Kumar.
Распознавание лица – это технология тенденции в настоящее время. И сегодня мы собираемся изучать распознавание и обнаружение лица, используя библиотеку Python OpenCV.
Везде вы видите лица, вы смотрите в автономный мир и интернет-мир.
Лица, как на фотографиях, так и в фильмах. Наш мозг, конечно, быстро признает человека на фотографиях и видео.
Тем не менее, мы хотим компьютеры или мобильные телефоны, чтобы определить сами эти предметы. Итак, давайте поговорим о двух способах, что мы можем обнаружить лица на фотографиях.
Как работает распознавание лица?
Самый популярный способ для обнаружения лица и объекта, в целом, использует Классификаторы свиней Отказ
Свинья стоит для гистограммы ориентированных градиентов Отказ Суть вопроса находится в нахождении соответствующих дескрипторов функций для изображения, будь то лица или другие объекты.
В 2005 году функции гистограммы ориентированных градиентов (HOG) были реализованы наверным далалом и Биллами триггами.
Гистограмма ориентированных градиентов (боров) – это дескриптор функций, используемый в основном для распознавания объекта в обработке изображений. Дескриптор функций является представлением изображения или пластырь изображения, что, извлекая ценную информацию от нее, упрощает изображение.
Теория позади дескриптора гистограммы направленных градиентов состоит в том, что распределение градиентов интенсивности или направлений по краям определяют внешний вид и форму локальных объектов в изображении.
Производные деривативы X и Y изображения (градиенты) полезны, потому что из-за внезапного изменения амплитуды, Величина градиентов высоки вокруг краев и углов И мы знаем, что края и углы собирают намного больше деталей формы объекта, чем плоские регионы.
Поэтому гистограммы гистограммы градиента используются в качестве свойств этого дескриптора:
Шаги для расчета дескрипторов свиней для распознавания и обнаружения лица
- Изображение разделена на от 8 до 8 клеточных блоков, а для каждого от 8 до 8 измеряется гистограмма градиентов.
- Вектор 9 ведерных (чисел), соответствующих углам от 0 до 180 градусов, в основном гистограмма (приращение 20 градусов).
- Значения этих 64 клеток (8х8) вставляются в эти 9 ведер и кумулятивно вставлены.
- Это ограничивает 64 значения до 9 значений, в принципе.
Использование библиотеки Face_recognition для обнаружения граней
Существует библиотека под названием Face_recoзнание, которая оптимизировала код для обнаружения граней.
Мы устанавливаем и импортируем в той же строке, используя Python Pip и Import. Итак, давайте быстро сделаем это:
import PIL.Image import PIL.ImageDraw !pip install face_recognition import face_recognition as fr
Далее я скачал изображение из Интернета, у которого было много лиц:
Так что теперь мы можем загрузить вышеупомянутый файл:
img = fr.load_image_file("/content/boyband.jpg") print(img)
Когда мы запускаем вышеуказанный код, мы получаем этот вывод:
array([[[223, 218, 248], [223, 218, 248], [223, 218, 248], ..., [248, 248, 248], [248, 248, 248], [248, 248, 248]], [[223, 218, 248], [223, 218, 248], [223, 218, 248], ..., [248, 248, 248], [248, 248, 248], [248, 248, 248]], [[223, 218, 248], [223, 218, 248], [223, 218, 248], ..., [248, 248, 248], [248, 248, 248], [248, 248, 248]], ..., [[201, 28, 30], [205, 32, 34], [206, 32, 34], ..., [160, 14, 15], [179, 18, 23], [185, 18, 25]], [[201, 27, 29], [203, 29, 31], [204, 30, 32], ..., [152, 8, 8], [171, 12, 16], [181, 14, 21]], [[201, 27, 29], [201, 27, 29], [200, 27, 29], ..., [150, 8, 7], [167, 13, 15], [180, 15, 21]]], dtype=uint8)
Любое цветное изображение состоит из 3 каналов: синий, зеленый и красный. Это три матрица, присутствующие в приведенном выше массиве. Таким образом, цветное изображение 50 × 50 станет матрицей 50x50x3.
Мы можем получить количество лиц на фото, которая дает нам 10 :
face_loc = fr.face_locations(img) no_of_faces = len(face_loc) print(no_of_faces)
Таким образом, у нас есть 10 граней на фото. Давайте нарисуем прямоугольники на этих лицах, а затем выпустите его в файл:
pil_image = PIL.Image.fromarray(img) for face_location in face_locations: top,right,bottom,left =face_location draw_shape = PIL.ImageDraw.Draw(pil_image) draw_shape.rectangle([left, top, right, bottom],outline="red") pil_image.save("output.jpg")
дает нам:
Так что это довольно точнее. Теперь поговорим о другом методе.
Использование Python OpenCV для обнаружения граней
Python Opencv с другой стороны использует Haar Cascades для обнаружения его функций. Это немного медленнее, но очень точное!
import cv2 import matplotlib.pyplot as plt %matplotlib inline
Теперь я взял еще одну картину из Интернета:
image2 = cv2.imread("/content/MET-GALA.jpg") gray_img = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) plt.imshow(gray_img, cmap='gray')
дает нам:
Далее мы приносим каскадный классификатор для лица, который присутствует в OpenCV:
haar_face_cascade = cv2.CascadeClassifier('/content/haarcascade_frontalface_alt.xml') faces = haar_face_cascade.detectMultiScale(gray_img) print('Faces found: ', len(faces))
И это дает нам точно 8 Отказ
Так что теперь давайте нарисуем прямоугольник вокруг него:
for (x, y, w, h) in faces: cv2.rectangle(image2, (x, y), (x+w, y+h), (0, 255, 0), 2) plt.imshow(image2)
дает нам:
И VOILA! Вот и все сейчас.
Полный код для распознавания лица в Python
Полный код вместе со всеми необходимыми файлами изображения и XML можно найти в https://github.com/arkaprabha-majumdar/face_recog.
1. Первая реализация с использованием библиотеки Face_recognition
import PIL.Image import PIL.ImageDraw import face_recognition as fr import matplotlib.pyplot as plt image1 =fr.load_image_file("/content/boyband.jpg") image2 =fr.load_image_file("/content/MET-GALA.jpg") print(image1) plt.imshow(image1) pil_image = PIL.Image.fromarray(image2) for face_location in face_loc: top,right,bottom,left =face_location draw_shape = PIL.ImageDraw.Draw(pil_image) draw_shape.rectangle([left, top, right, bottom],outline="green") pil_image.save("output.jpg")
2. Вторая реализация с использованием OpenCV
import cv2 import matplotlib.pyplot as plt gray_img = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY) plt.imshow(gray_img, cmap='gray') haar_face_cascade = cv2.CascadeClassifier('/content/haarcascade_frontalface_alt.xml') faces = haar_face_cascade.detectMultiScale(gray_img) print('Faces found: ', len(faces)) for (x, y, w, h) in faces: cv2.rectangle(image2, (x, y), (x+w, y+h), (0, 255, 0), 2) plt.imshow(image2)
Убедитесь, что пути файлов верны, поэтому вы можете иметь точные выходы, поскольку имеем в наших примерах выше. Если вам нужна помощь, вы всегда можете ссылаться на репозиторий GitHub, упомянутый выше.
Завершение примечания
Если вам понравилось, читая эту статью и хочу прочитать больше, продолжать следовать журнал NeangeDev. Оставайтесь настроенными для многих таких интересных статей в ближайшие дни!
Счастливое обучение! 🙂.