Рубрики
Без рубрики

Распознавание и обнаружение лица с помощью Python Opencv

Распознавание лица – это технология тенденции в настоящее время. И сегодня мы собираемся изучать признание и обнаружение лица, используя Python Opencv.

Автор оригинала: Pankaj Kumar.

Распознавание лица – это технология тенденции в настоящее время. И сегодня мы собираемся изучать распознавание и обнаружение лица, используя библиотеку Python OpenCV.

Везде вы видите лица, вы смотрите в автономный мир и интернет-мир.

Лица, как на фотографиях, так и в фильмах. Наш мозг, конечно, быстро признает человека на фотографиях и видео.

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

Как работает распознавание лица?

Самый популярный способ для обнаружения лица и объекта, в целом, использует Классификаторы свиней Отказ

Свинья стоит для гистограммы ориентированных градиентов Отказ Суть вопроса находится в нахождении соответствующих дескрипторов функций для изображения, будь то лица или другие объекты.

В 2005 году функции гистограммы ориентированных градиентов (HOG) были реализованы наверным далалом и Биллами триггами.

Гистограмма ориентированных градиентов (боров) – это дескриптор функций, используемый в основном для распознавания объекта в обработке изображений. Дескриптор функций является представлением изображения или пластырь изображения, что, извлекая ценную информацию от нее, упрощает изображение.

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

Производные деривативы X и Y изображения (градиенты) полезны, потому что из-за внезапного изменения амплитуды, Величина градиентов высоки вокруг краев и углов И мы знаем, что края и углы собирают намного больше деталей формы объекта, чем плоские регионы.

Поэтому гистограммы гистограммы градиента используются в качестве свойств этого дескриптора:

Шаги для расчета дескрипторов свиней для распознавания и обнаружения лица

  1. Изображение разделена на от 8 до 8 клеточных блоков, а для каждого от 8 до 8 измеряется гистограмма градиентов.
  2. Вектор 9 ведерных (чисел), соответствующих углам от 0 до 180 градусов, в основном гистограмма (приращение 20 градусов).
  3. Значения этих 64 клеток (8х8) вставляются в эти 9 ведер и кумулятивно вставлены.
  4. Это ограничивает 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. Оставайтесь настроенными для многих таких интересных статей в ближайшие дни!

Счастливое обучение! 🙂.