728x90
반응형
오늘은 Haar Cascade를 이용해서 detection을 해보자
일단 아래 주소에서 사용하고 싶은 모델 파일을 받아준다.
https://github.com/opencv/opencv/tree/master/data/haarcascades
import cv2
import os
import glob
from tqdm import tqdm
# 모델 경로
base_dir = '/my_dir/models/'
face_model_path = base_dir + 'haarcascade_frontalface_default.xml'
eye_model_path = base_dir + 'haarcascade_eye.xml'
# Haar Cascade 분류기 로드
face_cascade = cv2.CascadeClassifier(face_model_path)
eye_cascade = cv2.CascadeClassifier(eye_model_path)
# 이미지 경로
src = '/my_dir/images/'
output_dir = '/my_dir/output/'
os.makedirs(output_dir, exist_ok=True)
# 이미지 목록 가져오기
image_list = glob.glob(src + '*.*')
for image_path in tqdm(image_list):
filename = os.path.basename(image_path)
ext = os.path.splitext(filename)[1].lower() # 확장자를 소문자로 변환
if ext not in ['.jpg', '.png']:
print(f'Unsupported image format: {ext}')
continue # 지원되지 않는 형식의 이미지를 건너뛰기
image = cv2.imread(image_path)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 얼굴 탐지
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# 얼굴 및 눈 탐지
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = image[y:y+h, x:x+w]
eyes = eye_cascade.detectMultiScale(roi_gray)
for (ex, ey, ew, eh) in eyes:
cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2)
# 결과 저장
output_path = os.path.join(output_dir, f'detected_{filename}')
cv2.imwrite(output_path, image)
print("Processing complete.")
오늘은 여기까지
728x90
반응형
'OpenCV' 카테고리의 다른 글
[OpenCV] 이미지 처리 (concat) (0) | 2024.08.18 |
---|---|
[OpenCV] 이미지 처리 (색상변환) (0) | 2024.08.18 |
[OpenCV] 이미지 처리 (Feature Extraction) (0) | 2024.08.18 |
[OpenCV] 이미지 처리 (GrabCut) (0) | 2024.08.18 |
[OpenCV] 이미지 처리 (Canny) (0) | 2024.08.18 |