이 튜토리얼은 OpenCV와 Pi-Cam을 사용해 라즈베리파이에서 실시간 얼굴 인식 시스템을 구축하는 과정을 안내합니다. 하드웨어 설정부터 인식기 훈련까지 모든 단계를 명확한 코드 스니펫과 실용적인 팁과 함께 제시합니다.
아래에서 Pi-Cam이 실시간으로 얼굴을 감지하는 라이브 데모를 확인할 수 있습니다.
이 프로젝트는 실시간 성능에 최적화된 오픈소스 OpenCV 라이브러리에 의존합니다. 라즈비안 실행 라즈베리파이에 초점을 맞추지만, 동일한 코드가 macOS와 Windows에서도 약간의 조정만으로 실행됩니다.
3단계
완전한 얼굴 인식 워크플로는 세 가지 뚜렷한 단계로 나눌 수 있습니다:
얼굴 감지 및 데이터 수집
인식기 훈련
실시간 얼굴 인식
아래 다이어그램은 이 단계들을 요약합니다.
1단계: BOM – 자재 명세서
필수 구성 요소:
라즈베리파이 3 – $32.00
5MP 1080p OV5647 미니 카메라 모듈 – $13.00
2단계: OpenCV 3 설치
Adrian Rosebrock의 가이드를 따라 라즈비안 스트레치에 OpenCV 3을 깨끗하게 설치하는 것을 권장합니다. 튜토리얼 완료 후 전용 파이썬 가상 환경을 활성화하세요:
source ~/.profile
workon cv
환경 내부에서 파이썬 버전과 OpenCV 설치 확인:
python
>>> import cv2
>>> cv2.__version__
3.3.0 이상 버전 번호가 보여야 합니다.
3단계: 카메라 테스트
카메라가 감지되지 않으면 드라이버를 활성화하세요:
sudo modprobe bcm2835-v4l2
다음 파이썬 스니펫은 Pi-Cam 스트림을 열고 컬러와 그레이스케일로 표시하며 수직으로 뒤집습니다(카메라 방향이 다르면 조정):
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
while True:
ret, frame = cap.read()
frame = cv2.flip(frame, -1)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame', frame)
cv2.imshow('gray', gray)
if cv2.waitKey(30) & 0xff == 27:
break
cap.release()
cv2.destroyAllWindows()
python simpleCamTest.py로 실행하세요 (프로젝트 GitHub에서 사용 가능). ESC로 종료.
4단계: 얼굴 감지
OpenCV의 Haar Cascade 분류기는 얼굴을 감지하기 위한 경량 머신러닝 접근법입니다. 사전 훈련된 XML 파일(haarcascade_frontalface_default.xml)을 다운로드해 Cascades 폴더에 넣으세요. 다음 스크립트는 바운딩 박스와 함께 실시간 얼굴 감지를 시연합니다:
import cv2
faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
while True:
ret, img = cap.read()
img = cv2.flip(img, -1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(
gray, scaleFactor=1.2, minNeighbors=5, minSize=(20, 20)
)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.imshow('video', img)
if cv2.waitKey(30) & 0xff == 27:
break
cap.release()
cv2.destroyAllWindows()
detectMultiScale 파라미터는 감도를 제어합니다: scaleFactor는 반복마다 이미지 크기를 줄이고, minNeighbors는 거짓 양성을 필터링하며, minSize는 감지 가능한 최소 얼굴 크기를 설정합니다.