일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Machine learning
- Raspberry Pi
- Facial expression recognition
- deep-learning
- Data Load
- tf.saver()
- Embedded System
- preprocessing
- CNN
- I.MX6Q
- OpenCV
- ARM Processor
- Machine Vision
- Homomorphic Filter
- VGGnet
- cross compile
- IOT
- TensorFlow
- tf.train.match_filenames_once()
- Python
- tf.train.string_input_producer()
- porting
- Today
- Total
Austin's_Lab
[Embedded System]얼굴 표정인식을 통해 사용자의 감정을 케어해주는 시스템 본문
[Embedded System]얼굴 표정인식을 통해 사용자의 감정을 케어해주는 시스템
Ausome_(Austin_is_Awesome) 2017. 7. 12. 15:584학년 1학기에 있었던 Embedded System과 Pattern Recognition 수업에서 병행하여 진행한 프로젝트이다.
개요
I.MXQ6 보드에서 사용자의 얼굴을 검출하여 서버로 보내면 서버에서는 학습기가 얼굴 표정을 분석하여 사용자의 현재 감정상태를 검출한다. 검출된 감정은 다시 보드에 전달되고, 보드는 사용자의 감정 상태에 따라 보드에 내장된 기능들을 사용해 적절한 조치를 취함으로써 사용자의 감정을 케어해준다.
개발환경
server O/S : Ubuntu 14.04
Programming language : C++, python 3.5
Library : tensorflow 0.12.0, opencv 2.13(I.MX6Q) / 3.1 (server), numpy
Network protocol : TCP/IP
Training model : VGGnet 19 응용
Training image source : CMU, Jaffe, Yale 등의 open source와 얼굴인식 연구하셨던 교수님 연구실 자료, 팀원들과 친구들 얼굴
기능 및 구현
1. I.MX6Q 보드에 연결된 카메라를 통해 사용자를 촬영하고 opencv의 haar cascade를 사용해 얼굴 영역을 검출한다.
2. 10~15초 간격으로 얼굴 이미지를 캡쳐하여 resizing한 뒤 서버로 전송하여 감정을 검출한다. (학습기를 CNN으로 구현해서 실시간 검출이 어려움.)
3. 서버는 학습된 모델에 얼굴 이미지를 넣어 감정을 검출한다. 감정은 행복, 슬픔, 화남, 평상 4개의 class가 있다.
4. 서버는 검출된 감정을 보드에 signal을 주고, 보드는 응답받은 감정상태에 맞게 LED, Dot matrix, CLCD 등을 조작하여 현재 감정상태를 표현하고, 현재 감정상태를 케어해줄 수 있는 음악을 재생한다. 음악은 사용자가 해당 감정상태일 때 자주 듣는 음악들을 각 감정 디렉토리에 미리 넣어둔 상태라고 가정한다.
5. 감정상태가 변하지 않을 경우 아무런 동작도 하지 않는다. 사용자의 선택에 따라 사용자는 현재 감정상태와 다른 감정 디렉토리의 음악을 플레이 할 수 있다.
6. 버튼을 통해 감정상태 검출 on/off, 화면 전환을 할 수 있다.
7. 카메라 촬영 화면 모드일 경우 GUI는 동작하지 않는다. 감정상태 검출 on 모드에서는 카메라 촬영 화면에서 얼굴 영역에 빨간 ROI를 표시하고, GUI화면 모드에서도 백그라운드로 얼굴 영역 검출 및 표정인식을 수행한다.
8. CLCD의 첫번째 줄은 현재 플레이되고 있는 음악의 제목과 음악이 속한 디렉토리의 이름이 출력되고, 두번째 줄은 현재 감정상태와 감정 검출 on/off 여부를 출력한다.
구현 이슈
- 보드의 컴퓨팅 파워가 생각만큼 따라주지 않아서 코드를 최적화시킬 필요가 있었다.
2017/08/03 - [Embedded System] - [I.MX6Q]얼굴표정 인식을 통한 사용자의 감정케어 시스템 보드편(1)
- VGGnet19 모델을 요즘 딥러닝 트렌드에 맞게 보완해서 사용했다.
- 학습 이미지 및 테스트 이미지의 normalize를 위해 homomorphic filter와 histogram equalization을 사용해 전처리를 진행했다. 2017/07/10 - [Machine Vision] - [Image processing] Homomorphic Filter 구현 in python
원본 사진 전처리 사진
- 데이터 모으는 게 쉽지 않았다. Keras를 이용해서 data augmentation을 수행하여 약 20배 정도 데이터를 늘렸다.
augmentation된 사진
시연 영상
동영상에 나오는 목소리는 항상 이상함...
수업에서 간단하게 프로젝트로 진행한 거라 class도 적고, 약간 과장된 표정만 학습시켰기 때문에 애매한 표정은 잘 검출하지 못한다는 단점이 있지만 아이디어 좀 덧붙이고 보완하면 상업적으로도 꽤 괜찮은 시스템이 될 수도 있을 것 같다.
'Embedded System' 카테고리의 다른 글
[I.MX6Q]얼굴표정 인식을 통한 사용자의 감정케어 시스템 보드편(1) (3) | 2017.08.03 |
---|---|
[I.MX6Q] Opencv Porting on I.MX6Q (ARM based board) (3) | 2017.05.01 |
[Capston Design]CNN을 이용한 병충해 검출 자동화 시스템 프로젝트 (0) | 2017.04.25 |