인공지능

딥러닝을 이용한 실시간 감정 인식 오픈소스

닥스훈스 2019. 9. 2. 22:12

딥러닝을 이용하여 실시간으로 촬영되는 영상 속 인물 객체들의 표정을 분석하여 감정을 분류하는 프로젝트를 진행하고자 한다.

먼저, 영상보다는 이미지로부터 감정을 분석하는 오픈소스를 활용하여 기본적인 로직을 이해하고자 한다.

기본적으로 오픈소스에서 제공되는 데이터셋으로 학습을 하고, 직접 구현시에는 다양한 데이터셋을 활용할 예정이다.

 

※ 먼저, 아나콘다, 텐서플로우를 설치해야 한다. 아래 url참고.

https://dwfox.tistory.com/67

기본 용어들은 다음과 같이 이해하면 될듯 함...

Anaconda - 비쥬얼스튜디오, 이클립스와 같은 통합 개발 환경툴이라 생각하면 됨
Python - C#, VB Java, Javascript등과 같은 프로그래밍 언어 
Tensorflow - 딥러닝, 신경망 등의 처리를 모아 놓은 API 정도
Spyder - Anaconda에서의 프로그래밍 언어 편집기 

아나콘다는 python의 특성화된 패키지라고 정의할 수 있으며 python을 기반으로 머신러닝, 데이터 사이언스를 위해 가장 많이 사용되는 패키지들을 묶어서 배포하고 있으며 conda라는 의존성 패키지는 다양한 패키지를 제공하고 있어 python기반 개발시 많이 사용하고 있는 플랫폼이다.

 

프로젝트를 위한 자료조사 사이트는 다음과 같다.

 

1.  이미지 감정 인식

https://github.com/sunsmiling/facial-emotion-detector

데이터셋은 Kaggle에서 제공한 데이터를 사용하여 [얼굴인식]과 [표정분류]로 구분된 두 단계를 거치는 얼굴표정 자동 인식 시스템을 구축함.

사용된 파이썬 패키지 및 모듈은 다음과 같다.

  • Python3.6.1 : 파이썬 언어
  • Dlib Python Wrapper

    이미지 처리 및 기계학습, 얼굴 인식 등을 할 수 있는 C++로 개발된 고성능의 라이브러리

  • OpenCV Python Wrapper

    OpenCV
    Computer Vision library의 약자로 이미지 검수를 기계적으로 처리하도록 도와주는 이미지 처리 라이브러리
    영상처리 및 컴퓨터비전 관련 오픈소스, 기계 학습과 관련된 전통적인 알고리즘 뿐만 아니라 최첨단 알고리즘까지 갖추고 있다. 얼굴 인식, 객체의 3D모델 추출, 좌표 생성, 이미지 스티칭 영상 검색, 안구 운동 추적 등 다양한 응용 분야에 이용된다.
    ※참고 블로그: https://enjoyimageprocessing.tistory.com/?page=1

    OpenCV-Python
    OpenCV의 Python API로 파이썬은 스크립트 언어이기 때문에 C,C++와 같은 컴파일언어에 비해 속도가 느림
    따라서 성능적인 부분은 C/C++로 구현 후 이를 파이썬 Wrapper를 만들면 해결 가능

    ※얼굴인식에 관한 dlib가 강력한 기능을 보이고 있으며(99%이상..) dlib의 기능을 사용하기 위한 이미지 처리에 대해서는 opencv가 많은 역할을 한다고 한다.

  • SciP: 싸이파이

    과학 계산용 함수를 모아높은 파이썬 패키지
    고성능 선형대수, 함수 최적화, 신호처리, 특수한 수학 함수와 통계 분포등을 포함한 많은 기능 제공

  • Matplotlib: 맷플랏립

    대표적인 과학 계산용 그래프 라이브러리, 선 그래프, 히스토그램, 산점도 등을 지원하며 고품질 그래프를 그려준다.

  • Numpy: 넘파이

    파이썬으로 과학계산을 하기 위한 패키지로 다차원 배열을 위한 기능과 선형 대수 연산과 푸리에 변환 같은 고수준 수학함수와 유사 난수 생성기를 포함

  • Scikit-Learn

    파이썬으로 구현된 기계학습 오픈소스 라이브러리

  • pickle

    python에서 사용하는 객체들을 있는 그대로 저장하기 위한 모듈(import)

  • imutils

    OpenCV가 제공하고 있는 기능 중에 좀 복잡하고 사용성이 떨어지는 부분을 잘 보완해주는 패키지

  • glob, random, math, itertools, sys, os, argparse, pandas, warnings

Opencv-python라이브러리를 사용하여 OpenCV에서 제공하고 있는 cascade기반으로 미리 학습된 정면 얼굴 데이터를 다운받아 정면 얼굴을 식별함. cascade: https://m.blog.naver.com/PostView.nhn?blogId=samsjang&logNo=220699662173&proxyReferer=https%3A%2F%2Fwww.google.com%2F

얼굴 식별 후, 표정을 구분할 수 있도록 얼굴의 구성요소를 찾아야 하는데 dlib라이브러리의 68개의 점이 학습된 모델 파일을 다운받아 사용함(shape_predictor_68_face_landmarks.dat)

얼굴 식별(OpenCV cascade) → 얼굴의 구성요소(dlib library) → 표정 구분

 

2. 영상 실시간 감정 인식

https://jusonn.github.io/blog/2018/02/16/real-time-emotion-detection/

실시간으로 영상을 입력받으면 각 프레임마다 이미지를 모델에 넘기고 아웃풋을 받아 감정을 분류함

데이터모델: keras로 학습된 모델
표정데이터: kaggle
cv2와 imutils는 이미지를 처리하는 라이브러리로 영상을 뽑아내거나 영상에 파란 박스를 쳐주는 것들을 할 수 있음

 

3. OpenCV Python강의

https://www.youtube.com/watch?v=0KCTvoMXHPE&list=PLwfJJiO20qkDue05S5MNhgYNnClMVlagN

 

4. OpenCV - 동영상 파일에서 얼굴 인식  파이썬 예제 코드

https://blog.naver.com/chandong83/220829044388

 

OpenCV 얼굴인식 파이썬 예제 코드

이왕 이렇게 된 거 정리하는 차원에서 파이썬 코드도 작성하였다. 이전과 동일한 알고리즘(??)을 적용하였...

blog.naver.com

영상→얼굴 인식

OpenCV는 Open Source Computer Vision Library의 약자로 오픈소스 컴퓨터 비전 및 머신러닝 라이브러리이다.

얼굴을 인식하고, 물체를 식별하고 이미지를 결합하는 등의 작업이 가능하다.

 

opencv를 파이썬에서 설치하기 위해서는 아래 명령어로 실행한다.

pip install opencv-python

 

실제 모듈을 불러올 때는 cv2를 입력한다.  패키지명이 opencv지만 cv2로 불러온다.

import cv2

 

...추가예정

 

Reference

https://jaura.tistory.com/26