라즈베리파이 졸음운전방지 코드 - lajeubelipai jol-eum-unjeonbangji kodeu

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]

Team Logo

라즈베리파이 졸음운전방지 코드 - lajeubelipai jol-eum-unjeonbangji kodeu

팀소개 및 프로잭트 설명 동영상

졸음운전 여부를 판단하여 알림을 통해 사고를 예방하는 기기를 제작하는 팀입니다.

졸음운전의 단계를 drowsing, sleeping 두 단계로 나누어 각각의 상황에 조치를 해주는 시스템입니다.

온라인해커톤으로의 전환에 따라 부대에서 잘못된 부품,전선 및 센서들을 구매하고 확인하지 못하여 라즈베리 파이 프로토타입 제작 과정 중 하드웨어 구성을 완전하게 하지 못했습니다. 아래 영상은 라즈베리가 아닌 우분투 os 노트북 환경에서 실행한 프로젝트입니다.

  • 라즈베리 파이 부저알림 --> 얼굴을 감싸는 앵커 우측 하단에 "drowsing" 또는 "SLEEPING"으로 표시 및 터미널 출력
  • 그 외 기능 동일

기능 설계

라즈베리파이 졸음운전방지 코드 - lajeubelipai jol-eum-unjeonbangji kodeu
라즈베리파이 졸음운전방지 코드 - lajeubelipai jol-eum-unjeonbangji kodeu

컴퓨터 구성 / 필수 조건 안내 (Prerequisites)

  • Debian 계열 os
  • openCV 4.X 버전
  • (권장)라즈베리파이 3B+
  • 피에조 부저 필요(GPIO 16번 연결)

기술 스택 (Technique Used)

Drowsing detection

  • Real-Time Eye Blink Detection using Facial Landmarks(Tereza Soukupova and Jan ´ Cech외, 2016)의 방법을 따름

라즈베리파이 졸음운전방지 코드 - lajeubelipai jol-eum-unjeonbangji kodeu

사고예방

  • 100km/h 속도를 갖는 차량이 안전거리 100m를 유지하고 있다고 가정

고속도로를 달리는 차량을 가정하면 56m의 제동거리가 필요하므로 운전자는 44m의 여유가 있다.
1초에 27m를 이동하므로 시간으로 환산하면 운전자는 1.63초의 여유가 있는 셈이다. 반응속도 0.7초를 빼면 약 0.9초의 시간이 남는다.

눈을 감지않지 않은 상태를 not drowsing, 눈을 감은 상태를 drowsing 상태로 판단하고 opencv 객체 cap을 30fps로 설정했으므로 0.9초에 해당하는 27프레임동안 drowsing이 지속되면 sleeping으로 판단합니다. drowsing상태에서는 짧은 비프음, sleeping상태에서는 not drowsing상태가 될 때까지 비프음이 지속되게 합니다.

Raspberry GPIO control

사용자에게 가는 알림은 라즈베리파이 GPIO를 사용함.

설치 안내 (Installation Process)

dlib 라이브러리 필요:

git clone https://github.com/davisking/dlib.git
cd dlib
git clone https://github.com/osamhack2020/IoT_drowsinessCare_GyeongHoKim.git .

프로젝트 사용법 (Getting Started)

cmake 빌드

mkdir build&&cd build
cmake ..
cmake --build . --config Release

프로그램 실행 ./sleep_detection

라즈베리에서 실행할 경우
CMakeLists.txt 파일의 project name을 sleep_detectionForRaspberry로 고쳐야 함. 또, wiringPi 27번에 해당하는 GPIO 핀에 부저를 연결해야 함.

라즈베리파이 졸음운전방지 코드 - lajeubelipai jol-eum-unjeonbangji kodeu

gpio readall //wiringPi 27번에 해당하는 BCM 넘버를 찾아야 함

라즈베리파이 졸음운전방지 코드 - lajeubelipai jol-eum-unjeonbangji kodeu

팀 정보 (Team Information)

  • 김경호 (), Github Id: GyeongHoKim

References

  • sleep detection
  • drowsiness detection

저작권 및 사용권 정보 (Copyleft / End User License)

  • MIT

이번 저의 졸업논문과제는 라즈베리파이로 운전자의 졸음을 방지하는
소프트웨어를 만드는 것입니다.
처음에 open cv를 활용하여 여러가지를 해보고 싶었지만
open cv가 오픈소스라고는 ... 공부를 하지 않고서는 도저히 알고리즘을 이해할 수 없어요
아아 .. 공부를 한다고해도 이해가 안되더라구요 ㅠㅠ ...
그리고 어떻게 해서 이해했다고 쳐도 프로그램언어를 모두 아는것이 아니라면
이 오픈소스를 어떻게 가져다 쓸지.. 어떻게 연결을 해야할 지  ;; 난감해요

그래서  .. 막 유튜브나 구글링하다가 Open CV를 기반으로 라즈베리파이와 연결하여
운전자 졸음방지 하는 하드웨어를 만들면 어떨까하는 생각이 들더라구요

라즈베리파이 졸음운전방지 코드 - lajeubelipai jol-eum-unjeonbangji kodeu

open cv를 기반으로 이제 라즈베리파이에 소프트웨어와 갖가지 하드웨어를 설지해야하는데
라즈베리파이를 설치하는 것은 여기서 다루지 않을게요 . 정말 자세하게 다루어논 사이트가 있기 때문에
그쪽을 보면 더 쉽게 설치가 가능해요,

이 블로그에 가면 라즈베리파이설치부터 open cv설치까지 모두 나와있어요 
한글설치는 다른블로그에서 참고했어요 

결국 설치하는 법은 똑같지만 사람마다 설치하는 순서가 조금씩 달라서
에러가 나는 경우도 있기 때문에 여러사이트에서 시도해보는 것이 좋아요

라즈베리파이 졸음운전방지 코드 - lajeubelipai jol-eum-unjeonbangji kodeu

그리고 저는 라즈베리파이에 라즈베리파이 파이카메라를 이용했어요
다른 비싸고 좋은 캠도 있었지만 라즈베리와 가장 호환이 잘되기 때문이에요
가격 또한 일반 웹캠보다 싸서 더욱 좋아요 
파이카메라(Raspberry Pi Camera V2)의 스펙!!

파이카메라를 그냥 사서 끼운다고 해서 되는게 아니라
또 라즈베리파이에 설치를 해줘야해요 ...
그 설치또한 이런저런 에러가 많아서 제가 해보고 가능했던
링크를 몇개 찾아서 올려드렸어요
open cv 라즈베리파이를 활용한 졸음방지 시스템 #1 은 여기까지