인공지능(21일 오블완)

컴퓨터 비전 프로젝트 따라하기 - OpenCV를 활용한 간단한 얼굴 인식 프로젝트

@thiskorea 2024. 11. 22. 19:40



컴퓨터 비전이란?

컴퓨터 비전은 AI가 이미지를 이해하고 처리할 수 있도록 돕는 기술로, 얼굴 인식, 객체 탐지, 이미지 분류 등 다양한 작업에 활용됩니다. 이번 포스트에서는 OpenCV를 활용해 간단한 얼굴 인식 프로젝트를 따라하며 컴퓨터 비전의 기본 원리를 체험해 보겠습니다.

1. 프로젝트 개요

목표

OpenCV의 얼굴 인식 기능을 사용하여 실시간으로 웹캠에서 얼굴을 탐지하고 표시합니다.

준비물

1. Python이 설치된 환경
2. OpenCV 라이브러리
3. Haar Cascade 파일(얼굴 탐지 모델)

2. OpenCV 설치 및 준비

(1) OpenCV 설치

먼저 OpenCV를 설치합니다. 다음 명령어를 실행하세요.

pip install opencv-python

(2) Haar Cascade 파일 다운로드

OpenCV에서 제공하는 Haar Cascade 파일은 얼굴 탐지에 사용됩니다. 다음 링크에서 haarcascade_frontalface_default.xml 파일을 다운로드하세요.
• Haar Cascade 다운로드 링크

3. 얼굴 인식 코드 작성

아래 코드는 OpenCV를 활용해 실시간으로 얼굴을 인식하는 간단한 예제입니다.

import cv2

# Haar Cascade 파일 로드
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# 웹캠 초기화
cap = cv2.VideoCapture(0)

while True:
    # 프레임 읽기
    ret, frame = cap.read()
    if not ret:
        break

    # 그레이스케일 변환 (얼굴 탐지 성능 향상)
    gray = cv2.cvtColor(frame, 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(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)

    # 결과 출력
    cv2.imshow('Face Detection', frame)

    # 'q' 키를 누르면 종료
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 리소스 해제
cap.release()
cv2.destroyAllWindows()

4. 코드 설명

(1) Haar Cascade 파일 로드

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

Haar Cascade 파일을 사용해 얼굴 탐지 모델을 로드합니다.

(2) 프레임 읽기

ret, frame = cap.read()

웹캠에서 실시간으로 프레임을 캡처합니다.

(3) 그레이스케일 변환

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

이미지를 그레이스케일로 변환하여 탐지 성능을 향상시킵니다.

(4) 얼굴 탐지

faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

detectMultiScale 메서드를 사용하여 얼굴을 탐지합니다.
• scaleFactor: 이미지 크기를 얼마나 줄일지 설정합니다. 기본값은 1.1입니다.
• minNeighbors: 탐지 결과를 필터링하는 기준입니다. 값이 클수록 엄격하게 탐지됩니다.
• minSize: 탐지할 얼굴의 최소 크기를 설정합니다.

(5) 얼굴 표시

cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)

탐지된 얼굴 영역에 사각형을 그립니다.

5. 실행 결과

예상 결과

1. 프로그램을 실행하면 웹캠이 활성화됩니다.
2. 웹캠 화면에서 탐지된 얼굴에 사각형이 표시됩니다.
3. ‘q’ 키를 누르면 프로그램이 종료됩니다.

6. 확장 아이디어

이 프로젝트를 확장하여 다음과 같은 기능을 추가해볼 수 있습니다.

(1) 눈과 웃음 탐지

• OpenCV의 haarcascade_eye.xml 또는 haarcascade_smile.xml 파일을 사용하여 눈과 웃음을 탐지할 수 있습니다.

(2) 얼굴 저장 기능

• 탐지된 얼굴을 별도의 이미지 파일로 저장하는 기능을 추가할 수 있습니다.

cv2.imwrite('detected_face.jpg', frame[y:y+h, x:x+w])

(3) 딥러닝 모델 활용

• Haar Cascade 대신 딥러닝 기반 모델(예: DNN, YOLO)을 사용해 얼굴 탐지 정확도를 높일 수 있습니다.

(4) 마스크 착용 여부 탐지

• 딥러닝 모델과 추가 데이터를 활용하여 마스크 착용 여부를 탐지하는 프로젝트로 확장할 수 있습니다.

결론

이 프로젝트를 통해 OpenCV를 활용한 얼굴 인식의 기본 개념을 익혔습니다. 실시간으로 얼굴을 탐지하는 과정을 이해하고, 컴퓨터 비전 기술의 가능성을 확인할 수 있었습니다. 더 나아가 딥러닝 기반 모델을 활용하거나 다양한 응용 사례로 확장해보세요!

다음 포스트에서는 자연어 처리 프로젝트 따라하기를 주제로, 간단한 텍스트 분류 프로젝트를 안내하겠습니다.

이 포스트는 OpenCV를 활용한 컴퓨터 비전 프로젝트를 초보자도 쉽게 따라 할 수 있도록 구성되었습니다. 프로젝트를 통해 AI 기술을 직접 경험해 보세요!