소스 뷰어
입술 영역 및 머리 영역 검출¶
from header.utils import * # 전처리 및 영역 검출 함수 임포트
face_cascade = cv2.CascadeClassifier("data/haarcascade_frontalface_alt2.xml") # 정면 검출기
eye_cascade = cv2.CascadeClassifier("data/haarcascade_eye.xml") # 눈 검출기
image, gray = preprocessing(34) # 전처리
if image is None: raise Exception("영상 파일을 읽기 에러")
faces = face_cascade.detectMultiScale(gray, 1.1, 2, 0, (100, 100)); # 얼굴 검출
if faces.any() :
x, y, w, h = faces[0]
face_image = image[y:y+h, x:x+w] # 얼굴 영역 영상 가져오기
eyes = eye_cascade.detectMultiScale(face_image, 1.15, 7, 0, (25, 20)) # 눈 검출
if len(eyes) == 2:
face_center = (x + w//2, y + h//2)
eye_centers = [[x+ex+ew//2, y+ey+eh//2] for ex,ey,ew,eh in eyes]
corr_image, corr_center = correct_image(image, face_center, eye_centers ) # 기울기 보정
rois = detect_object(face_center, faces[0]) # 머리 및 입술영역 검출
cv2.rectangle(corr_image, rois[0], (255, 0, 255), 2)
cv2.rectangle(corr_image, rois[1], (255, 0, 255), 2)
cv2.rectangle(corr_image, rois[2], (255, 0, 0), 2)
cv2.circle(corr_image, tuple(corr_center[0]), 5, (0, 255, 0), 2)
cv2.circle(corr_image, tuple(corr_center[1]), 5, (0, 255, 0), 2)
cv2.circle(corr_image, face_center, 3, (0, 0, 255), 2)
cv2.imshow("correct_image", corr_image)
else:
print("눈 미검출")
else:
cv2.imshow("image", image)
cv2.waitKey(0)