- OpenCV 와 haarcascade를 이용한 얼굴 인식
<개요>
1. 사전 학습된 분류기인 haarcascade_frontalface_alt.xml 을 로드합니다.
2. 객체 탐지 알고리즘인 detectMultiScale 을 실행하기 위해 이미지 프로세싱을 합니다.
3. detectMultiScale 과 rectangle 함수를 이용하여 원본 이미지에 bbox를 그려줍니다.
# harrcascade
기계학습을 이용한 객체 탐지 알고리즘입니다.
CNN과 같은 신경망이 아닌, 하르 특징 (Haar Features) 계산을 통해 객체를 찾습니다.
<코드 설명>
# 얼굴 찾는 모델
model_file = "face_det_pretrained/haarcascade_frontalface_alt.xml"
# 모델 로드
clf = cv.CascadeClassifier(model_file)
# 이미지 로드
src = cv.imread("images/iu.png")
img = src.copy()
# gray 스케일 변경
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY
모델과 이미지를 로드하고 이미지는 gray 스케일로 변경합니다.
# haarcascade 얼굴 탐지 알고리즘
results = clf.detectMultiScale(gray, # 입력 이미지
scaleFactor=1.2, # 인접 객체 최소 거리 픽셀
minNeighbors=1, # 인접 객체 최소 거리 픽셀
minSize=(25, 25) # 탐지 객체 최소 크기
)
print(results)
detectMultiScale 을 통해 객체 탐지 알고리즘을 실행해줍니다.
for box in results:
x, y, w, h = box
# bbox 그리기
cv.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), thickness=2)
cv.imshow("src", img)
cv.waitKey(0)
cv.destroyAllWindows()
rectangle 함수를 이용해 bbox 를 그려줍니다.
<전체 코드>
import cv2 as cv
model_file = "face_det_pretrained/haarcascade_frontalface_alt.xml"
clf = cv.CascadeClassifier(model_file)
src = cv.imread("images/iu.png")
img = src.copy()
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
results = clf.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=1, minSize=(25, 25))
print(results)
for box in results:
x, y, w, h = box
cv.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), thickness=2)
cv.imshow("src", img)
cv.waitKey(0)
cv.destroyAllWindows()
<실행 화면>
- Just Do It -
반응형
'Python > Machine_vision' 카테고리의 다른 글
[Python] YoloV5 custom dataset 학습 (0) | 2021.08.14 |
---|---|
[Python] 손 글씨 인식 (0) | 2021.07.24 |