"코로나로 홀로 집에서 공부하는 나, 잠자면 안되는 데 깨워줄 누구 없나?"
나와 똑같이 코로나로 인해 집안에서 공부하는 수험생들, 취준생들이 같은 마음을 갖을 사람을 위해
'의지를 갖고 할 수 있게' 도와주고, 스스로를 채찍질을 하는 프로그램을 만들어보자.
최종적인 목표는 해당 객체 (사람)가 졸고 있는 상태인지 깨어 있는 상태인지를 파악하는 것입니다.
눈이 몇 초 이상 감기면 졸고 있다고 판단합니다. 그러면 우선 눈의 위치를 파악하여 눈이 감긴 상태인지 떠있는 상태인지 판단하는 게 먼저입니다.
저는 실시간으로 웹캠을 따와 얼굴을 인식하는 라이브러리 dlib를 사용하여 눈으로 판단되는 좌표 값을 얻어냈습니다. 그런 다음 해당 눈의 상태를 파악하는 것으로 구성하였습니다. deeplearning으로 해당 눈 영역을 잘라내기 위해 눈의 좌표값을 얻어내는 과정에서 dlib를 사용하였습니다.
전처리를 하는데, 흑백 -> 이미지 크기 resize 해서 실시간으로 눈을 감았는지 떴는지를 확인하기 위해 모델을 넣어서 분석하도록 만들었습니다.
*단, 두 눈이 모두 감겨야 하며, 손으로 눈을 가리더라도 감은 걸로 인정되도록 했습니다.
OS: Ubuntu 18.04 LTS
Language: python 3.8.3
Interpreter: pip3
Library
numpy
opencv-python
dlib
matplotlib
imutils
keras
datetime
sklearn
seaborn
imutils
pygame
Dataset: npy 파일 형식의 눈 데이터
약 78%
cnn은 즉, 합성곱 신경망(Convolutional Neural Network)은 딥러닝의 가장 대표적인 방법으로 이미지를 인식하는 데 주로 사용되고 있습니다.
특히 자율 주행 자동차, 얼굴 인식 애플리케이션과 같이 객체 인식과 컴퓨터 비전이 필요한 분야에서 CNN을 많이 사용합니다. 응용 분야에 따라 CNN을 처음부터 만들 수도 있고, 데이터셋으로 사전 학습된 모델을 사용할 수도 있습니다.

cnn은 간단히 말하면, 다음과 같이 3가지로 나누어져 생각하면 됩니다.
input rayer(인풋 정보 정의)
저의 경우에는 이미지의 크기(x축, y축), 채널을 지정해주었습니다.
hidden rayer(conv갯수에 따라 몇층인지)
convolutional 층을 쌓아 filter 크기(3*3), strides filter가 몇칸씩 이동하는지, padding same은 공간 정보 유지를 정합니다.
output rayer(3차원데이터를 분류하기 편한 1차원으로 변경 및 활성화함수로 분류)
활성화함수인 relu를 이용해 음수면 0 양수면 1로 변경하고
결과를 도출하는 층, 활성화함수 sigmoid 사용 why 이진분류 if 다중분류 softmax 사용했습니다.
토이 프로젝트 구상중인데 아이디어 참 재밌는거 같습니다.