функция распознавания лиц
В 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). Чтобы нарисовать круглую рамку лица, вам нужно только установить центр прямоугольника в качестве центра круга, а ширина прямоугольника обычно устанавливается в качестве радиуса.
После бега мы можем идентифицировать лица на изображениях ходячих мертвецов.