본문 바로가기
Project

[ML 미니 프로젝트] 얼굴 인식 및 제스처 기반 출퇴근 기록 시스템(MediaPipe, OpenCV, Face Recognition)

by JooRi 2024. 7. 15.
728x90
SMALL

 

얼굴 인식 및 제스처 기반 출퇴근 기록 시스템 (MediaPipe, OpenCV, Face Recognition)

: 캠을 통해 인식한 얼굴을 등록하고, 등록된 사용자는 손 제스처를 통해 출근, 퇴근, 외출, 복귀를 기록할 수 있다.

 

- 운영체제: Windows 11 64 bit

- 개발언어: Python

- 개발 툴: 아나콘다 Jupyter Notebook

- 라이브러리 및 도구: OpenCV, MediaPipe, Face Recognition, Numpy, TensorFlow, Scikit-learn

 

일정

 

* 기능적 요구사항명세서

ID 요구사항 내용 설명 우선
순위
R_01

사용자 인증 얼굴 인식을 통해 사용자를 인증한다. 얼굴 인식 및 눈 깜빡임, 입 벌림 감지를 통해
신뢰성이 높은 인증을 할 수 있다.
1
R_02 손 제스처 인식 손 제스처를 인식하여 가상 버튼을
활성화한다.
MediaPipe Hands 모델을 사용하여,
손의 랜드마크를 추출한다.
3
R_03

가상 버튼 출력 가상 버튼을 통해 출근, 외출, 복귀, 퇴근
동작을 수행한다.
손 제스처 인식 후 버튼 활성화 시,
해당 동작을 수행한다.
2
R_04 로그 기록 사용자의 출퇴근 기록을 로그 파일에
저장한다.
사용자 액션 발생 시 로그 파일에 현재 시간, 사용자, 상태를 파일에 기록하고 저장한다. 4
R_05

사용자
인터페이스 
사용자가 사용할 수 있는 화면을 표시한다. 버튼 및 텍스트를 출력한다. 5
R_06

움직임 감지 사람이 맞는지 확인하기 위해
움직임을 감지한다.
얼굴 인식 및 눈 깜빡임, 입벌림 감지를 통해
사람이 아닌 물체나 사진 등은 인증을 할 수 없다.
6
R_07 사용자 이미지 폴더 생성 웹캠에서 사용자 이미지를 저장한다. 웹캠에서 실시간으로 캡처한 이미지를 파일로 저장하여 사용자 이름으로 폴더를 변경할 수 있다. 7

 

* 시연 사진

1. 사용자 얼굴 캡처 및 등록

얼굴 캡처

 

웹캠을 통해 실시간으로 얼굴 이미지를 100개 캡처한다.

 

 

폴더명 입력

 

폴더 저장

 

폴더명을 입력받고 저장한다.

 

 

폴더 생성

 

폴더 내 저장된 얼굴 데이터

 

이미지 증강 기법

 

사진 하나당 10개의 데이터셋이 증가한 것을 확인할 수 있다.

 

 

2. 얼굴 데이터 학습

3명의 얼굴데이터 학습

 

한 명당 500장씩 총 1500개의 얼굴 사진 데이터를 학습시켰다.

 

 

3. 사용자 인증

등록된 사용자인지 얼굴을 확인하는 단계이다.

사용자 인증

 

등록된 얼굴 데이터가 있는지 확인한다.

 

 

인증 실패 시

 

인증 실패 시, "인증에 실패하였습니다. 다시 시도해 주세요."라는 메시지가 출력되며 프로그램이 종료된다.

 

 

인증 성공 시 인터페이스 출력

 

등록된 사용자 인증이 완료되면, 가상 버튼 인터페이스가 화면에 표시된다.

사용자는 손을 이용하여 '출근', '외출', '복귀', '퇴근' 버튼을 누를 수 있다.

 

 

4. 출근, 외출, 복귀, 퇴근 선택

출근, 외출, 복귀, 퇴근 선택 화면

 

사용자가 손으로 가리키면 '복귀하시겠습니까?'라는 메시지를 출력하고,

3초 이상 손을 대고 있으면 선택이 완료됨과 동시에 캠이 종료된다.

 

 

손이 아닌 것은 인식 X

 

커피나 핸드폰과 같은 손이 아닌 다른 것은 인식하지 않는 것을 확인할 수 있다.

 

 

5. 출퇴근 장부

출퇴근 장부

 

사용자가 출퇴근한 시간이 메모장에 자동 기록된다.

여기에는 이름, 시간, 출퇴근 상태가 저장되어 있다.

 

* 주요 라이브러리

얼굴 및 손 인식 라이브러리

 

 

face_recognition 

face_recognition은 파이썬에서 얼굴 인식을 간단하게 구현할 수 있도록 도와주는 라이브러리이다. 이 라이브러리는 dlib의 얼굴 인식 기능을 기반으로 하고 있다.

얼굴 인식 동작 원리는 아래와 같다.

동작 과정

1) 얼굴 검출

이미지나 비디오 프레임에서 얼굴의 위치를 찾아내고, 이는 OpenCV나 dlib 같은 라이브러리를 통해 구현된다.

예를 들어, 얼굴의 사각형 영역(바운딩 박스)을 찾아낸다.

 

2) 얼굴 랜드마크 검출

검출된 얼굴 내에서 눈, 코, 입 등의 주요 특징점을 찾아낸다. 

 

3) 얼굴 인코딩

얼굴의 고유한 특징을 숫자로 표현된 벡터로 변환한다. 이 벡터는 얼굴의 유니크한 아이디로 사용되며, 얼굴 인식을 위한 비교에 사용된다.

face_recognition 라이브러리는 얼굴을 128차원 벡터로 인코딩한다.

 

4) 얼굴 매칭

새로운 얼굴 인코딩을 데이터베이스에 저장된 얼굴 인코딩과 비교하여, 가장 유사한 얼굴을 찾는다.

주로 코사인 유사도나 유클리디안 거리 등을 사용하여 비교한다.

 

 

MediaPipe

MediaPipe Hands 모델을 사용하여 실시간으로 손의 위치와 모양을 추적하고, 이를 기반으로 제스처를 인식한다. MediaPipe Hands는 손의 21개 랜드마크를 실시간으로 추적할 수 있다.

 

 

 

1) 입력 데이터 수집 및 전처리

웹캠이나 파일로부터 실시간 비디오 프레임을 입력받은 후, 입력된 이미지 또는 비디오 프레임을 전처리하여 모델에 적합한 형태로 변환한다.(BGR 이미지를 RGB로 변환)

 

2) 손 랜드마크 검출

입력 이미지에서 손의 위치를 검출하고, 21개의 주요 손 랜드마크를 추적한다.

- 손 영역 검출: 이미지에서 손의 영역을 검출

- 랜드마크 추출: 검출된 손 영역에서 21개의 랜드마크를 추출

 

3) 제스처 인식

검출된 손 랜드마크를 기반으로 제스처를 인식한다.

예를 들어, 각 제스처는 손가락의 위치와 모양에 따라 정의되는데 "엄지 올리기" 제스처는 엄지 손가락이 위로 올라가고

나머지 손가락이 구부러진 형태로 인식될 수 있다.

 

4) 후처리 및 최종 출력

인식된 제스처를 후처리 하여 최종 출력을 생성한다.

인식된 제스처에 따라 특정 명령을 실행하거나 화면에 텍스트를 표시할 수 있다.

 

 

728x90
LIST

댓글