OpenCV (41) --- обнаружение лица

OpenCV

функция распознавания лиц

В OpenCV для обнаружения лиц используется функция cv2.CascadeClassifier.detectMultiScale(), которая может обнаруживать все лица на изображении. Его полное определение выглядит следующим образом:

def detectMultiScale(self, image, scaleFactor=None, minNeighbors=None, flags=None, minSize=None, maxSize=None):

изображение: изображение, которое нужно обнаружить, обычно изображение в градациях серого.

ScaleFactor: указывает масштабирование окна поиска в двух последовательных сканированиях.

minNeighbors: указывает минимальное количество смежных прямоугольников, составляющих цель обнаружения. Значение по умолчанию — 3, что означает, что лицо считается существующим только при наличии более 3 меток обнаружения. Если вы хотите повысить точность обнаружения, вы можете установить это значение на большее значение, но в то же время некоторые лица могут не обнаруживаться.

flags: Необычные параметры, обычно опускаемые.

minSize: минимальный размер цели, цели меньше этого размера будут игнорироваться

maxSize: максимальный размер цели, цели больше этого размера будут игнорироваться

Возвращаемое значение этой функции представляет собой набор векторов прямоугольников целевого объекта.

Обнаружить N лиц на изображении

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

import cv2

img = cv2.imread("41.jpg")
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(gray, scaleFactor=1.15, minNeighbors=2, minSize=(5, 5))
print(faces)
print("该图一共有{0}人脸".format(len(faces)))
for (x, y, w, h) in faces:
    cv2.circle(img, (int((2 * x + w) / 2), int((2 * y + h) / 2)), int(w / 2), (0, 255, 0), 2)
cv2.imshow("result", img)
cv2.waitKey()
cv2.destroyAllWindows()

OpenCV уже поставляется с классификатором признаков Хаара для лиц, существует более 20 видов классификаторов, которые обеспечивают функции обнаружения для различных объектов, таких как носы и уши. Здесь мы выбираем классификатор распознавания лиц haarcascade_frontalface_default.xml.

То, что возвращается функцией detectMultiScale, — это прямоугольная группа векторов кадра лица, включая координаты верхнего левого угла (x, y), а также длину и ширину (w, h). Чтобы нарисовать круглую рамку лица, вам нужно только установить центр прямоугольника в качестве центра круга, а ширина прямоугольника обычно устанавливается в качестве радиуса.

После бега мы можем идентифицировать лица на изображениях ходячих мертвецов.