OpenCV를 사용한 얼굴 감지(완전한 인형용)

4720 단어 pythonopencv
이것은 얼굴 인식에 대한 완전한 초보자 소개를 의미하는 매우 멍청하고 간단한 자습서입니다. 이를 위해 OpenCV을 사용하고 단순성을 위해 Python을 사용하지만 확장을 원할 경우 C++로 다시 작성할 수 있습니다. Python은 프로토타이핑에 적합하므로 계속 사용하겠습니다.

종속성 설치



pypi에서 opencv-python를 가져올 수 있습니다. 이것은 CPU에서 작동하는 최적화되지 않은 버전입니다. 프로토타이핑에 충분합니다.

코드 작성



먼저 OpenCV를 가져오고 작업하려는 이미지를 로드하고 선택적으로 크기를 조정합니다. 추가 분류를 적용하기 전에 이미지를 회색조로 조정해야 합니다.

import cv2 as cv

img1 = cv.imread("band-small-faces.jpg")

# resize if needed
# img2 = cv.resize(img1, None, fx=0.3, fy=0.3, interpolation=cv.INTER_CUBIC)
img2 = img1  # not resizing in this case
img3 = cv.cvtColor(img2, cv.COLOR_BGR2GRAY)


다음은 입력으로 제공된 이미지입니다.



그런 다음 마술을 수행하는 Haar 분류기라는 것이 필요합니다.

haar_cascade_face = cv.CascadeClassifier("./data/haarcascades/haarcascade_frontalface_default.xml")


입력으로 작업할 모델이 필요합니다. 정면 얼굴을 감지하는 모델을 전달하고 있습니다. 다운로드할 수 있는 모델attached이 있습니다(분명히 Python 스크립트가 있는 폴더data/haarcascases를 생성해야 함).

다음과 유사한 오류가 발생하는 경우
cv2.error: OpenCV(4.5.5) ...opencv-python\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function 'cv::CascadeClassifier::detectMultiScale'
이는 일반적으로 xml에 대한 경로가 유효하지 않음을 의미합니다(유용한 메시지에 감사드립니다!).

그리고 모델 결과를 표시하려면 다음을 수행하십시오.

for (x, y, w, h) in faces_rects:
    cv.rectangle(img2, (x, y), (x + w, y + h), (0, 255, 0), 3)

cv.imshow("Display", img2)
k = cv.waitKey(0)





보시다시피 대부분의 얼굴이 감지되었습니다! 마지막 사람의 다리는 얼굴처럼 보입니다(이를 배제하려면 모델 매개변수를 가지고 놀아야 합니다). 정면이 아니기 때문에 마지막 얼굴이 감지되지 않았습니다! 더 많은 것을 감지해야 하는 경우 다른 모델을 사용할 수 있습니다.

OpenCV로 다른 것을 감지할 수 있는 것과 같은 방식으로 사전 훈련된 다른 모델을 제공하기만 하면 됩니다. 예를 들어, 얼굴 표정, 눈, 안경, 신체, 번호판 등.

좋은 웹페이지 즐겨찾기