OpenCV 눈 깜빡임 인식 - OpenCV nun kkamppag-im insig

for (x, y, w, h) in cars:
	cv2.rectangle(temp, (x, y), (x + w, y + h), (0, 255, 255), 2)
	center = offset(left_fit_line[0] , 180 , right_fit_line[0])
 	if abs(center) > 1.5:
   		center_x = int(640 / 2.0)
   		center_y = int(360 / 2.0)
   		thickness = 2
   		location = (center_x - 200, center_y - 100)
   		font = cv2.FONT_HERSHEY_SIMPLEX;
  		fontScale = 3.5
    		cv2.putText(temp, 'Warning', location, font, fontScale, (0, 0, 255), thickness)
       		color = [0, 0, 255]

딥러닝 모델을 이용한 졸음 감지 서비스

딥러닝 모델을 이용한 졸음 감지 서비스와 함께 눈 건강 보호, 일정 관리 등의 부가 서비스를 제공하는 프로젝트

1. 개발 환경 및 사용 라이브러리

  • OS : Window 10
  • Language : Python 3.8, HTML5, JavaScript, CSS
  • Framework : Django
  • DBMS : MySQL
  • Library : Python Channels, Web Socket, OpenCV, imutils, dlib

2. 구성도

OpenCV 눈 깜빡임 인식 - OpenCV nun kkamppag-im insig

3. 주요기능

  • 졸음감지 및 알림 기능
  • 눈동자 깜빡임 횟수 측정
  • 졸음 통계 제공

4. 결과물

4.1 얼굴인식

OpenCV 눈 깜빡임 인식 - OpenCV nun kkamppag-im insig

4.2 졸음감지경고

OpenCV 눈 깜빡임 인식 - OpenCV nun kkamppag-im insig
OpenCV 눈 깜빡임 인식 - OpenCV nun kkamppag-im insig

4.3 눈 깜빡임 경고

OpenCV 눈 깜빡임 인식 - OpenCV nun kkamppag-im insig

4.4 투두리스트(ToDo-List)

OpenCV 눈 깜빡임 인식 - OpenCV nun kkamppag-im insig

4.5 통계제시

OpenCV 눈 깜빡임 인식 - OpenCV nun kkamppag-im insig

4.6 각종 게시판

OpenCV 눈 깜빡임 인식 - OpenCV nun kkamppag-im insig
OpenCV 눈 깜빡임 인식 - OpenCV nun kkamppag-im insig
OpenCV 눈 깜빡임 인식 - OpenCV nun kkamppag-im insig

4.7 졸음 방지 및 눈 건강 보호 해결책

OpenCV 눈 깜빡임 인식 - OpenCV nun kkamppag-im insig

5. 구성원 및 역할분담

이름담당업무
최영환 풀스택, 프로젝트 총괄 / 팀장
이지상 프론트엔드 / 프론트엔드장
정영도 프론트엔드
이현수 풀스택 / 백엔드장
오수지 백엔드

<느낀점>

  • 처음 진행하는 팀프로젝트 였습니다. 웹개발을 잘 할 수 있을지에 대한 막연한 두려움이 있었지만 막상 해보니까 물론어려웠지만 하나하나 해결해가며 결국 사이트를 만들 수 있었습니다. 저는 프론트엔드를 담당했으며 웹에 대한 전반적인 이해와 원리를 이해하는 저의 첫걸음이 담긴 프로젝트입니다.

눈깜빡임 감지기 만들기

2019-06-11 23:39:35

딥러닝(CNN)을 사용하여 사람의 눈을 뜨고 있는지 감고 있는지 감지하는 인공지능 모델을 만들어봐요!

Source code(Github): https://github.com/kairess/eye_blink_detector

Dependencies:
- Python
- numpy
- Keras
- matplotlib

Download dlib shape_predictor model: https://github.com/davisking/dlib-models/blob/master/shape_predictor_68_face_landmarks.dat.bz2

Dataset (Closed Eyes in the Wild): http://parnec.nuaa.edu.cn/xtan/data/ClosedEyeDatabases.html

Original Blog: http://alexoglou.webpages.auth.gr/wordpress/?p=65

저번 포스트에서는 웹캠을 통해 얼굴의 위치를 찾는 코드를 구현해보았다.

이번 포스트에서는 해당 코드에서 이어 인식된 얼굴에서 눈의 위치를 찾는 것을 구현해보도록 하겠다.

먼저 사람의 얼굴을 68개의 점으로 표현한 데이터가 있다.

OpenCV 눈 깜빡임 인식 - OpenCV nun kkamppag-im insig
shape_predictor_68_face_landmarks.dat

위처럼 표현된 사람의 얼굴을 통해 사람의 눈의 위치를 찾도록 하겠다.

import cv2
import numpy as np
import dlib #68개의 점으로 얼굴을 인식한다
cap = cv2.VideoCapture(0)
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

while True:
	_, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = detector(gray)
    for face in faces:
      # x, y = face.left(), face.top()
      # x1, y1 = face.right(), face.bottom()
      # cv2.rectangle(frame, (x, y), (x1, y1), (0, 255, 0), 2)
    
    landmarks = predictor(gray, face)
    left_point = (landmarks.part(36).x, landmarks.part(36).y)
    right_point = (landmarks.part(39).x, landmarks.part(39).y)
    hor_line = cv2.line(frame, left_point, right_point, (0, 255, 0), 2)
    
cv2.imshow("Frame", frame)
key = cv2.waitKey(1)
if key == 27:
	break
        
cap.release()
cv2.destroyAllWindows()

predictor .dat파일을 설정한 후 위처럼 얼굴을 68개의 점으로 활용할 수 있도록 landmarks 변수에 지정한다.

위의 그림처럼 눈의 끝 꼬리의 점인 36번과 39번을 line으로 연결하여 나타내었다.

실행 결과 아래와 같이 눈의 끝과 끝을 잘 검출하는 것을 알 수 있었다.

OpenCV 눈 깜빡임 인식 - OpenCV nun kkamppag-im insig
실행 결과

다음 포스트에서는 눈의 깜빡임 감지를 구현해보겠다.