Технология распознавания лиц становится все более популярной в последние годы. Она имеет различные применения в реальной жизни, такие как сбор данных _ известные нам большие данные_ и системы безопасности. В этой статье мы поможем вам создать собственный детектор лиц с использованием 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. Теперь вы можете экспериментировать с различными изображениями и настраивать параметры, чтобы увидеть, насколько хорошо работает детектор лиц.
Если у вас есть какие-либо вопросы, не стесняйтесь спрашивать. Я буду рад помочь вам.
Читать Подробнее на : ИИ — читай с вибрациями
Спасибо за прочтение