본문 바로가기
Projects/OpenCV, Dlib

영상인식 기반의 졸음감지 블랙박스 시스템 개발

by 꾸준하곰 2022. 6. 8.

1) 개발환경

  • Linux OS
  • 라즈베리파이 3 B+
  • Python - OpenCV, Dlib

2) 구현할 기능

  • 눈 깜빡임 인식, 고개숙임 인식 알고리즘
  • 실시간 영상 스트리밍 애플리케이션 

 🌀 Python 오픈소스 사용 - OpenCV, Dlib

(1) 패키지 설치 Linux 시스템 장애 발생했고, 커널 설정 파일을 수정함으로써 해결.
OpenCV Contrib 설치가 안 되어 OpenCV Contrib Github 에서 clone 하여 해결.
(apt-get으로는 OpenCV 특정버전 이상 설치가 되지 않았다.)
(2) 알고리즘 개발 python 문법 학습 (조건문, 반복문)
(3) 오픈소스 분석 OpenCV
: Haar Cascasde 분류기를 사용해서 이미지/영상의 Object Detection 수행한다.

- 활용: OpenCV 를 사용할 때는 빅데이터로 학습되어진 분류기 xml 을 활용하였다.
- 단점: face 인식은 잘 되지만, eye 인식은 잘 되지 않았다.
Dlib
: 얼굴의 68개 점을 이용해서 Face Detection 수행한다.

- 활용: OpenCV보다 성능이 좋기 때문에 '눈 깜빡임 인식 기능' 을 구현할 때 활용하였다.

 

🌀 커널 설정 파일 수정

(1) 디바이스 인식 스피커, 카메라 연결 설정
- aplay 명령어로 스피커 번호 확인한다.
   그리고 asoundrc 설정파일에 스피커 연결정보를 작성한다
(2) 블루투스 설정 안드로이드 앱과 블루투스 연결 설정
- sudo bluetoothctl 명령어 입력하고,
  안드로이드 기기의 IP 주소로 기기 검색, 페어링 등을 완료한다.
(3) Dlib 설치 - 메모리분할 시도 Dlib 컴파일 메모리 용량 증가

라즈베리파이 RAM 크기가 작아 대용으로 Disk 영역을 활용하는 방법이 스왑 파일이다. 하지만, Disk 영역을 활용하는 만큼 read/write access 가 빈번하게 발생되면 성능이 급격하게 저하되기 때문에 스왑 크기를 늘린 상태로 동작시킬 수 없다.

- 문제발생: Dlib 가 많은 메모리를 사용해서 라즈비안 OS가 프로세스를 종료시켰다 (스왑파일 수정으로 문제를 해결한 블로그의 문제발생원인 참고)
- Sol: 스왑파일 증가 (100MB → 1024MB), 라즈베리파이가 GPU에 할당하는 메모리 감소(64MB → 16MB)
- GPU에 할당한 메모리를 감소시킨 이유: 컴파일을 위해 메모리를 회수하는 것이다.

1) sudo nano /etc/dphys-swapfile
2) CONF_SWAPSIZE=1024
     #CONF_SWAPSIZE=100
2) free 명령어로 Swap 파일 크기 확인
(4) Dlib 설치 - .service 확장자 수정 dphys-swapfile.service 수정

.service 는, 프로세스 설정 파일이다. Linux 에서 데몬을 실행하기 위한 설정파일이다. systemd 프로세스가 관리하고있다. systemd 는 1번 PID 즉, 가장 상위 프로세스이다.

- vim 명령어를 설치하여 write 한다. vi 명령어로 수정하면 오류가 발생하여 스왑파일을 삭제해 주어야한다.
(5) 영상스트리밍 서버  motion 서버 활용
- motion 설치
- motion.conf 수정: 화면크기 수정하여 졸음감지 성능 향상.

 

🌀 putty 로 서버 원격 접속

댓글