Технология распознавания лиц становится все более популярной в последние годы. Она имеет различные применения в реальной жизни, такие как сбор данных _ известные нам большие данные_ и системы безопасности. В этой статье мы поможем вам создать собственный детектор лиц с использованием Python и OpenCV.

Во-первых, нам нужно импортировать необходимые пакеты. OpenCV, или библиотека компьютерного зрения с открытым исходным кодом; мощная библиотека компьютерного зрения, обеспечивающая доступ ко многим алгоритмам обработки изображений и видео. Мы будем использовать модуль cv2 OpenCV для нашего проекта.

import cv2

Далее нам нужно загрузить каскадный классификатор для распознавания лиц. Каскадный классификатор — это алгоритм машинного обучения, который обучается на большом количестве положительных и отрицательных изображений для обнаружения определенных особенностей изображения. Для нашего проекта по обнаружению лиц мы будем использовать файл «haarcascade_frontalface_default.xml», который поставляется с OpenCV. Вы должны найти путь к файлу «haarcascade_frontalface_default.xml» и вставить его.
например. ‘C:\Users\pc\PycharmProjects\pythonProject\venv\Lib\sitepackages\cv2\data\haarcascade_frontalface_default.xml’

face_cascade = cv2.CascadeClassifier(r'C:/path/to/haarcascade_frontalface_default.xml')

Теперь мы загрузим изображение, в котором мы хотим обнаружить лица, используя функцию «cv2.imread ()».

img = cv2.imread('image.png')

Чтобы обнаружить лица на изображении, нам сначала нужно преобразовать его в оттенки серого с помощью функции «cv2.cvtColor()».

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Теперь мы можем использовать функцию «detectMultiScale()» для обнаружения лиц на изображении в градациях серого. Функция принимает изображение в градациях серого, масштабный коэффициент, который компенсирует разницу в размерах лиц, и параметр minNeighbors, определяющий минимальное количество соседей, которые должен сохранить прямоугольник-кандидат. Мы установим scaleFactor на 1,1 и minNeighbors на 5 для нашего проекта.

faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)

Наконец, мы нарисуем прямоугольник вокруг каждого обнаруженного лица, используя функцию «cv2.rectangle()». Функция принимает исходное изображение, начальную и конечную координаты прямоугольника, цвет прямоугольника и толщину прямоугольника. Мы установим синий цвет и толщину 2 для нашего проекта.

for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)

Если вы хотите нарисовать круг вокруг каждой грани вместо прямоугольника, вы можете легко скопировать следующий код и заменить cv2.rectangle() на cv2.circle(). . Вы можете настроить центр и радиус круга.

for (x, y, w, h) in faces:
# Calculate the center and radius of the circle
center = (int(x + w / 2), int(y + h / 2))
radius = int((w + h) / 4)
# Draw the circle
cv2.circle(frame, center, radius, (255, 255,255), 5)

Для отображения изображения с обнаруженными лицами мы используем функцию «cv2.imshow()». Мы передадим исходное изображение и имя окна. Чтобы окно оставалось открытым, пока пользователь не нажмет клавишу, мы будем использовать функцию «cv2.waitKey()». Наконец, мы очистим окна с помощью функции «cv2.destroyAllWindows()».

cv2.imshow('img', img)
cv2.waitKey()
cv2.destroyAllWindows()

Весь код Детектора лиц

import cv2
# Load the cascade classifier for face detection
face_cascade = cv2.CascadeClassifier(r'C:\Users\pc\PycharmProjects\pythonProject\venv\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')

# Load the image
img = cv2.imread('IMG_6224 (1).png')

# Convert the image to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# Detect faces in the image
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)

# Draw a rectangle around each face
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)

# Display the image with faces detected
cv2.imshow('img', img)
cv2.waitKey()
cv2.destroyAllWindows()

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

import cv2

# Load the cascade classifier for face detection
face_cascade = cv2.CascadeClassifier(r'C:\Users\pc\PycharmProjects\pythonProject\venv\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml')

# Open a video capture device (0 is usually the built-in camera)
cap = cv2.VideoCapture(0)

while True:
    # Read a frame from the video capture device
    ret, frame = cap.read()

    # Convert the frame to grayscale
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Detect faces in the frame
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5)

    # Draw a rectangle around each face
    for (x, y, w, h) in faces:
        # Calculate the center and radius of the circle
        center = (int(x + w / 2), int(y + h / 2))
        radius = int((w + h) / 4)
        # Draw the circle
        cv2.circle(frame, center, radius, (255, 255,255), 5)
    # Display the frame with faces detected
    cv2.imshow('frame', frame)

    # Exit the loop if the 'q' key is pressed
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Release the video capture device and close all windows
cap.release()
cv2.destroyAllWindows()

Вот и все! С помощью всего нескольких строк кода мы создали детектор лиц, используя Python и OpenCV. Теперь вы можете экспериментировать с различными изображениями и настраивать параметры, чтобы увидеть, насколько хорошо работает детектор лиц.

Если у вас есть какие-либо вопросы, не стесняйтесь спрашивать. Я буду рад помочь вам.

Читать Подробнее на : ИИ — читай с вибрациями

Спасибо за прочтение