이전 글에서 다룬 기획 의도로 구현한 작품에 대한 설명을 해보겠다.

작품 개요

    사용자가 언제 어디서든 쉽게 사용할 수 있도록 하는 것이 중요한 사안이었기 때문에 웹페이지에 접속해 검사를 진행할 수 있도록 프로그램을 구현하였다. 웹페이지에 접속을 하게 되면 사용자는 사용하고 있는 전자기기에 따라 PC의 웹 카메라 또는 스마트폰의 전면 카메라를 통해 자신의 얼굴 사진을 캡처 하고 이 사진은 서버에 전송된다. 장고 웹 프레임워크를 사용하는 서버에 전달된 사진은 머신 러닝으로 학습된 함수 값에 따라 안면 비대칭에 근거한 뇌졸중 의심 여부를 판단하여 사용자가 분석 결과를 볼 수 있도록 웹페이지에 출력된다.

    웹페이지와 UIReact라는 JS 라이브러리를 사용하여 구현하였으며 검사를 위한 사진 캡처, 프로그램에 대한 설명과 같은 기능을 제공한다. 사용자는 웹페이지에 접속하자마자 별 다른 과정 없이 간편하게 사진 캡처를 하고 결과 분석을 열람할 수 있다.

    사용자가 자신의 얼굴을 캡처한 사진을 제출하게 되면 이는 장고 웹 프레임워크로 구현한 서버로 전송된다. 해당 사진은 서버의 DB에 저장되며 python으로 구현한 분석 함수의 입력 값으로 주어지게 된다. 분석 결과가 함수로부터 반환되면 이는 서버로부터 다시 웹페이지로 전송되어 사용자가 볼 수 있도록 결과와 함께 설명이 출력된다.

캡처한 사진이 담고 있는 얼굴을 분석하기 위해 이미지를 처리하는 라이브러리인 OpenCVdlib를 사용하였다. 이 중 사진에서 얼굴을 인식하는 face detector와 눈, , 입 등 얼굴의 주요 부위를 인식하는 landmark predictor라는 기능을 사용하였다. Landmark predictor는 사진에서 인식한 얼굴의 주요부위를 68개의 좌표 값으로 출력하며 해당 값들을 통해 얼굴의 전체적인 비대칭 비율을 계산하였다.

    뇌졸중으로 인한 안면 마비 증상을 보이는 환자들의 얼굴 사진들과 정상인의 얼굴 사진들을 미리 구해 앞서 언급한 비대칭 비율을 계산하여 logistic regressionclassification을 활용해 학습 과정을 진행하였다. 학습된 결과를 바탕으로 새로운 얼굴 사진이 주어졌을 때 sigmoid 함수를 이용해 뇌졸중 의심 여부를 판단하여 결과 값을 반환한다.

 

시스템 구성도

프로그램은 크게 세 가지로 이루어진다. 리액트를 이용한 웹 페이지와 장고를 이용한 웹 서버와 머신러닝, 딥러닝 API를 이용한 학습 및 예측으로 구성되어 있다. 이 세 가지가 서로 동작하는 방법은 위 그림과 같이 이루어진다.

 

사용한 API

얼굴의 landmark detection을 위해 구글링을 통해 얼굴을 인식하고 눈, 코 입 등의 좌표를 얻을 수 얻을 수 있는 API를 찾을 수 있었다.
링크 : http://matthewearl.github.io/2015/07/28/switching-eds-with-python/

 

Switching Eds: Face swapping with Python, dlib, and OpenCV - Matt's Ramblings

Switching Eds: Face swapping with Python, dlib, and OpenCV Image credit Introduction In this post I’ll describe how I wrote a short (200 line) Python script to automatically replace facial features on an image of a face, with the facial features from a s

matthewearl.github.io

여기서 제공하는 코드에서 dlib, OpenCV를 이용하여 얼굴을 인식하고 아래 그림과 같이 눈, 코, 입의 좌표를 얻을 수 있다.

다음에는 이 좌표를 가지고 뇌졸중의 증상 중 하나인 안면마비로 인한 안면 비대칭을 logistic regression을 이용하여 학습하고 예측하는 방법을 적어보겠다.

+ Recent posts