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 로 서버 원격 접속
댓글