SNaiL


AI 기반 아동 인지능력 검사 서비스

2023 데이터청년캠퍼스 한국외국어대학교 주관 자연어처리 기반 딥러닝기술 융합과정

한국외국어대학교 내 3위 작품


팀 구성

image


Contents

  1. 소개
  2. 개요
  3. 개발
    1. Backend
    2. Frontend
    3. Modeling
  4. 결과

소개

개발동기


아동의 인지 발달에 관심이 많은 부모님들을 위해 SNaiL을 개발하게 되었다. 아동의 인지 발달은 그들의 학습, 사회성, 적응력 등에 영향을 미치는 중요한 요소인데, 현재 시중에 있는 인지 발달 검사는 비용이 비싸고, 시간이 오래 걸리고, 전문가의 도움이 필요한 경우가 많았다. 이런 문제점들로 인해 부모님들은 아동의 인지 발달 수준을 쉽게 알 수 없고, 적절한 피드백도 받기 어렵다는 생각이 들었다.

이러한 문제점을 해결하고자 SNaiL을 개발했는데, SNaiL은 모바일 기기만 있으면 언제 어디서나 인지 발달 검사를 할 수 있으며, AI 기술을 활용하여 정확하고 신뢰할 수 있는 결과를 제공한다. 또한 AI 피드백을 통해 부모님들이 아동의 인지 발달 수준과 특징을 이해하고, 보완할 점을 알 수 있도록 도와준다.

이 서비스는 부모님들이 Snail을 통해 아동의 인지 발달에 대한 관심과 지식을 높이고, 아동의 성장과 꿈을 응원하고 지원할 수 있도록 하는 것을 목표로 제작되었다.

개발목표


SNaiL을 개발함에 있어 아래의 5가지 핵심 가치를 중요하게 고려하여 목표를 설정했다.

  • 접근성: 모바일 기기만 있으면 언제 어디서나 인지 발달 검사를 할 수 있도록 하여 금전적, 시공간적 부담을 줄인다.
  • 신뢰성: 신뢰도와 타당도가 확보된 검사 도구를 사용하고, AI 기술을 활용하여 정확하고 객관적인 결과를 제공한다.
  • 다양성: 아동의 인지 발달에 영향을 미치는 다양한 역량(유연성, 주의력, 기억력, 처리 능력, 언어 능력)을 평가할 수 있는 다양한 검사를 제공한다.
  • 편리성: 아동의 음성과 시선을 이용하여 검사를 진행하므로 복잡한 조작이 필요하지 않다.
  • 유익성: AI 피드백을 통해 부모님들이 아동의 인지 발달 수준과 특징을 이해하고, 보완할 점을 알 수 있도록 도와준다.

추진배경


SNaiL을 개발하기에 앞서 다음과 같은 배경을 조사했다.

  • 아동 인지 발달에 대한 관심 증가: 최근에 아동의 인지 발달에 대한 관심이 크게 높아진 상태였고, 특히 코로나 19 팬데믹으로 인해 아동들의 발달이 뒤처질 수 있는 우려가 커지고 있었다. 조사 결과에 따르면, 부모의 70%가 코로나 19가 아동 발달에 영향을 미칠 것으로 생각하고 있었다. 또한 코로나 19와 관련된 실태 조사에 따르면, 어린이집 아동의 거의 절반 및 가정 양육 아동의 30%가 도움이 필요한 수준임을 밝히는 등의 자료들도 쉽게 찾을 수 있었다.

  • 인지 발달 검사의 문제점: 현재 시중에 있는 인지 발달 검사는 몇 가지 문제점을 가지고 있는데, 비용이 높아 부담스럽다는 점, 검사에 상당한 시간이 소요되며 아동의 집중력 유지와 부모의 시간 관리에 어려움을 줄 수 있다는 점, 전문가의 지원 없이는 해석에 어려움을 겪게 점 등이 있었다.

  • AI 기술의 활용 가능성: 인공지능 기술은 인지 발달 검사에 다양하게 활용될 수 있다. 이 서비스에 적용된 인공지능 기술을 예로 들면, 음성 및 시선을 통한 검사, AI 기반 피드백을 통한 결과 해석 등이 있겠다. 이러한 기술은 검사의 비용과 시간을 줄이는 데 도움을 주며, 부모들이 아동의 발달 상황을 더 잘 이해할 수 있도록 지원한다.

이러한 배경을 바탕으로 SNaiL이 개발되었다. SNaiL은 부모들이 간편하게 아동의 인지 발달을 평가하고 AI 기술을 통해 정확하고 유익한 결과를 얻을 수 있는 서비스다.


개요

진행과정

image

시스템 구조도

image

서비스 플로우

image

화면구성

  • 검사화면

image

  • 결과화면

image


개발


Backend

개발환경

Server : AWS EC2(Node.js, Flask)

DB : AWS RDS/MariaDB

배포를 고려하여 프로젝트를 계획했기 때문에 클라우드 환경의 서버가 필요했다. 여러 클라우드 서버 옵션을 비교해 보고, AWS의 서비스가 가장 적합하다고 판단했다. 조건부로 프리티어 서버를 무료로 사용 가능하며 사용자가 많아 관련 자료가 많다는 점이 매력적으로 작용했다.

클라우드 서버


사용의 주요 목적은 서비스와 AI 모델 및 데이터베이스 간의 연결을 위한 REST API를 원격 서버를 통해 구현하는 것이었다. 초기 설계 단계에서는 REST API를 Flutter 서비스에 내장하여 사용하려고 했으나 호환성 문제로 인해 데이터를 서버에서 요청하고 가져오는 방식으로 변경하게 되었다. AI 모델의 튜닝 및 운영은 Python을 사용하였고, 데이터베이스 연동 및 외부 API 사용을 위해 JS를 활용했기 때문에, Flask와 Node.js를 각각 다른 포트에서 실행하여 통신했다. 이때, EC2 인스턴스의 엔드포인트 주소가 “ec2-OO-OOO-OOO-OO.ap-northeast-2.compute.amazonaws.com”와 같이 복잡하기 때문에 도메인을 구하여 쉽게 접근할 수 있도록 설정했다. 프티티어 서버를 사용하기 떄문에 부족한 물리 메모리는 Swap 메모리를 활용했다.

데이터베이스


AWS RDS로, MariaDB 엔진을 사용했다. 서버 인스턴스와 DB인스턴스는 같은 AWS 서비스이다보니 쉽게 연결이 가능했다. 다음은 DB Table 설계이다. 기본적으로 부모, 아동, 검사에 관한 정보를 저장하는 테이블 3개로 DB를 구성했다.

  • PARENT

    USER_ID USER_PW PARENT_ID
    VARCHAR(20) VARCHAR(20) CHAR(8)
    NOT NULL NOT NULL PRIMARY
  • CHILD

    PARENT_ID CHILD_ID NAME SEX BIRTH IMG
    CHAR(8) CHAR(8) VARCHAR(5) BOOL DATE INT
    NOT NULL PRIMARY NOT NULL      
  • RESULT

    RESULT_ID TEST_DATE EYETRACT STROOP IMG_DESC VOCA_RP LINE SENTENCE CHOSUNG FEEDBACK CHILD_ID
    CHAR(8) DATE FLOAT(5,2) FLOAT(5,2) FLOAT(5,2) FLOAT(5,2) FLOAT(5,2) FLOAT(5,2) FLOAT(5,2) VARCHAR(500) CHAR(8)
    PRIMARY NOT NULL                 NOT NULL

웹 호스팅


Github Page를 사용해 배포했다. Flutter는 build web 명령어를 통해 쉽게 웹 환경을 구성할 수 있는 기능을 제공해준다. 빌드된 소스들을 Github에 올리고 새로운 도메인인 web.snail23.kro.kr를 가져와 적용했다. 현재도 접속은 가능하지만 더이상 AWS 서버를 구동하지 않고 있기 떄문에, DB 접근이나 Api 사용 등이 불가능하므로 완전하 기능을 하지는 못한다.


Frontend

개발환경

Flutter, Figma

와이어프레임 작성, 에셋 디자인 등은 Figma를 통해 진행했고, 서비스에 실제 사용될 UI 화면은 Flutter로 작성했다. Fimga 플러그인 중 Figma에서 그린 프레임을 Flutter 코드로 바꿔주는 Figma to Code를 사용했는데, Figma 사용경험이 적은 우리팀의 개발자들이 UI 화면을 구현하는데 많은 도움을 받았다.

기능은 크게 세 파트로 기초 정보, 검사, 결과로 나누어 개발을 진행했다. 아래 자료는 프로젝트 당시 사용한 Figma 화면의 일부이다.

image

기초정보


서비스의 시작화면으로 사용한 스플래쉬 화면부터 검사 가이드 시작 전 화면까지 구성되어있다.

  1. 스플래쉬
  2. 회원가입 및 로그인
  3. 아동 관리 및 선택: 아동의 정보를 추가/ 수정/삭제하거나, 검사를 시작/지난결과 조회를 위한 아동의 선택이 이루어짐.

검사


실질적인 검사 및 검사 가이드가 구성되어있다.

  1. 검사 통합 가이드: 웹캠과 마이크를 활용해야 하므로 관련 권한을 요청하고, 기능이 정상 작동하는지 확인.
  2. 여러가지 검사 및 가이드: 이 글의 작성 시점 기준으로 총 5개(스트룹, 단어 유창성, 선로 잇기, 단어 따라 말하기, 이야기 이해)의 검사로 이루어져 있으며, 검사 시작 전에 약 10초간 검사에 대해 설명하는 가이드가 포함됨.
  • 스트룹: 단어의 색깔과 다른 색깔이 적혀있는 단어를 보고 해당 단어가 어떤 색인지 맞추는 검사
  • 단어 유창성: 초성을 기준으로 존재하는 단어를 말하는 검사
  • 선로 잇기: 선로가 이어져 있지 않은 번호가 적혀져 있는 원들을 순서대로 잘 잇는 검사
  • 단어 따라 말하기: 들려준 단어들을 순서대로 기억하여 다시 말하는 검사
  • 이야기 이해: 3~4분 길이 정도의 동화를 보고 동화를 기반으로 생성된 질문에 답을 하는 검사
  • 시선 추적: 검사자의 시선이 얼마나 오래 검사화면을 정면 응시하는지 검사

결과


검사가 종료된 후 얻은 점수를 바탕으로 여러가지 상대지표들을 확인 할 수 있다.

  1. 검사 결과 저장: 검사 결과와 점수를 이용하여 GPT 피드백을 생성하고 결과를 저장.
  2. 검사 결과: 선택한 RESULT_ID를 기준으로 해당 검사의 결과를 확인.
  3. 검사 결과(대시보드): 여러 달에 걸쳐 인지 능력 지표의 변화를 한눈에 확인할 수 있는 대시보드를 제공.

유연성, 주의력, 기억력, 처리능력, 언어능력과 같은 다양한 능력을 측정한 이전 검사 결과를 기반으로 통계를 생성하여 자신의 능력치의 백분위를 파악할 수 있습니다. 각 점수를 종합하여 통합 백분위를 얻어내어, 아동이 상대적으로 어느 정도의 인지능력을 가지고 있는지를 판단할 수 있다.

DB에 결과 데이터가 쌓인 모습

image


Modeling

개발환경

Python

기본적으로 Python을 사용하여 AI 모델을 준비했고, Flutter 어플리케이션 내에서 Python을 구동하기에는 무리가 있어 Flask 서버를 두어 Api 통신으로 모델을 활용했다.

음성인식


음성 인식은 이 프로젝트의 매우 주요한 기능이기 떄문에, 음성인식 모델의 선택은 프로젝트를 진행하는 중요한 결정 사항이었다. 추가적으로, 우리의 서비스가 아동을 대상으로 하기 때문에 아동 발화 데이터를 효과적으로 다루는 모델이 필요했다. 이에 따라 모델 선택에 관한 여러 가지 고려 사항이 있었다.

우선, 아동 발화 데이터를 적절히 학습시킬 수 있는 모델을 선택해야 했다. 이를 위해 Flutter에서 지원하는 라이브러리를 사용하거나, AI Hub와 같은 데이터 소스에서 충분한 아동 발화 데이터를 확보하여 기존의 고성능 모델인 Whisper 모델을 추가로 학습시키는 방법을 고려했다. 모델 선택에서 고려해야 할 주요 요소는 성능, 처리 속도, 그리고 팀 리소스의 소비량이었는데, Flutter 지원하는 라이브러리를 사용하는 경우, 라이브러리가 이미 최적화되어 있어서 속도와 성능 면에서 이점을 가질 수 있었다. 그러나 라이브러리 사용시 녹음환경에 제한을 받게되어, 한 팀원에게 Whisper 모델을 추가로 학습시키는 작업을 병행했다.

Whisper 모델을 추가 학습시킨 결과

image

추가 학습된 모델의 성능은 매우 좋게 나왔지만, 최종적으로는 Flutter에서 지원하는 라이브러리를 사용했다. 프리티어 서버의 제약으로 처리 능력이 제한되어 트랜잭션 시간이 길어지는 문제가 발생하는 것이 주 원인이었다. 검사 특성상 빠른 STT 처리가 필요한 상황에서 이러한 문제를 해결할 수 없었으므로, Flutter에서 지원하는 라이브러리를 선택하게 되었다.

시선추적


여러 평가항목 중 집중력 항목의 점수를 얻어내기 위해 시선을 추적할 수 있는 모델을 사용했다. 얼굴 이미지에서 눈동자의 위치를 추적하고, 눈동자가 어떤 방향을 향하고 있는지를 판단하는 함수를 작성하여 구현하였다. shape_predictor_68_face_landmarks.dat은 얼굴을 감지하고 얼굴의 특징점을 예측하는 데 사용되는 데이터 파일인데, 얼굴 이미지에서 68개의 랜드마크를 감지할 수 있다.

# 랜드마크 추출
landmarks = predictor(img, face)

# 왼쪽 눈 위치 찾기
left_eye_x = min(landmarks.part(n).x for n in range(36, 42))
left_eye_y = min(landmarks.part(n).y for n in range(36, 42))
left_eye_w = max(landmarks.part(n).x for n in range(36, 42)) - left_eye_x
left_eye_h = max(landmarks.part(n).y for n in range(36, 42)) - left_eye_y

위 코드를 보면 36번부터 41번 랜드마크가 왼쪽 눈을 표현함을 알 수 있다. 이를 바탕으로 이미지 상의 눈의 좌표를 바탕으로 눈만 따로 추출하여, 그레이 스케일로 변환 후 가우시안 블러를 적용하여 특정 임계값(50)을 기준으로 눈동자를 찾았다.

# 눈 영역 설정
roi_left_eye = img[left_eye_y:left_eye_y+left_eye_h, left_eye_x:left_eye_x+left_eye_w]

# 왼쪽 눈 처리
gray_roi_left_eye = cv2.cvtColor(roi_left_eye, cv2.COLOR_BGR2GRAY)
gray_roi_left_eye = cv2.GaussianBlur(gray_roi_left_eye, (5,5), 0)

_, threshold_left_eye = cv2.threshold(gray_roi_left_eye, 50, 255, cv2.THRESH_BINARY_INV)
contours_left_eye, _ = cv2.findContours(threshold_left_eye, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contours_left_eye = sorted(contours_left_eye, key=lambda x: cv2.contourArea(x), reverse=True)

코드에서는 왼쪽 눈에 대한 처리만 했지만, 오른쪽 눈에 대해서는 랜드마크 범위를 42부터 48로 설정하고 동일하게 진행했다. 이 과정을 통하면 다음 자료와 같이 눈과 눈동자의 실시간 추적이 가능함을 볼 수 있다.

image

눈과 눈동자의 중심 좌표 간의 유클리드 거리로 계산된 점수는 주어진 얼굴 이미지에서 시선이 얼마나 정중앙을 바라보고 있는지를 나타내는데 사용되었다. 이 코드는 5개의 검사 중 선로잇기 검사를 제외한 나머지 검사에서 시선이 정중앙을 바라보아야 하는 상황을 고려하고 있는데, 만약 두 눈동자의 중심 간의 거리가 5 이하인 경우, 즉 눈 중앙에 눈동자가 위치하는 경우, 이는 시선이 정 중앙을 바라보고 있는 것으로 판단내렸다. 5개의 검사 중 선로잇기 검사를 제외한 검사에서 정중앙을 바라봐야 하는 검사이기 때문에 이 거리가 낮게 오래 유지된 경우 집중력이 높을것이라는 가정을 내렸다.

AI 피드백


이 연구에서는 초기에는 계획하지 않았던 GPT API를 활용하여 프로젝트의 경쟁력을 높이기로 결정했다. GPT가 당시 뜨거운 감자이기도 했고, 검사지를 받아본 부모가 각 지표를 비롯한 결과의 해석에 어려움을 겪을 수도 있을 것이라는 판단이 들었기 때문이다. 이를 위해 적절한 프롬프트 작성 규칙을 정하고, 이를 바탕으로 GPT API를 통해 적절한 답변을 생성했다. 이 과정에서 얻어낸 결과물을 분석하여 특징, 강점, 약점 등을 파악하였고, 이를 바탕으로 시험 결과에 대한 해석을 제공했다. 이러한 방법은 GPT API를 활용하여 피드백을 제공하는 데 있어 중요한 역할을 했다.

AI 피드백 제공 image

그러나, 이 방법에는 수정되지 않은 그대로의 GPT API를 사용하기에는 우리의 서비스에 특화되지 않는다는 문제와, 서버를 통해 API를 사용하는 환경에서 시간이 많이 소요된다는 문제가 남아있다. 그럼에도, 이 연구는 GPT API를 활용하여 피드백을 제공하는 방법을 제시했고, 이를 통해 검사 결과에 대한 해석을 가능하게 하였다. 이는 AI 기술을 활용하여 피드백 시스템을 개선하는 데 중요한 기여를 했다. 향후에는 이러한 방법을 개선하고 확장하여 더욱 효과적인 피드백 시스템을 구축할 수 있을것으로 기대된다.


결과

프로젝트를 통해 아동 인지 발달 검사 서비스인 SNaiL을 성공적으로 개발했으며 주요 결과와 성과는 다음과 같다.

주요 성과

  • 접근성 확보: 모바일 기기로 시간 장소 상관없이 인지 발달 검사를 수행할 수 있도록 하여 부모님들의 금전적, 시간적 부담을 축소.

  • 신뢰성과 정확성: 신뢰도와 타당성이 검증된 검사 도구를 사용하고, AI 기술을 활용하여 정확하고 객관적인 결과를 부모님들에게 제공.

  • 다양한 역량 평가: 아동의 인지 발달에 영향을 미치는 다양한 역량(유연성, 주의력, 기억력, 처리 능력, 언어 능력)을 평가할 수 있는 다양한 검사 제공.

  • 편리성 강화: 아동의 음성과 시선을 활용하므로 어려운 조작 없이 검사 진행 가능.

  • AI 피드백: AI 기반 맞춤 피드백을 통해 부모님에게 아동의 인지 발달 수준과 특징에 대한 이해 및 보완할 수 있는 가이드 제공.

향후 계획

  • 전문가와의 연계 강화: 앞으로 의료 기관과 전문가와의 연계를 통해 검사의 신뢰성과 타당성을 더욱 높이고, 검사 결과를 통해 전문가와의 상담 서비스 제공.

  • 다양한 연령층 대상 확장: 3-5세 어린이만을 대상으로 하는 현재 서비스를 확장하여 다양한 연령층에 대한 검사 기능을 추가하고, 이를 통해 ADHD나 치매 등의 질환 의심을 제안하는 등의 시장성 확장.

  • 역량별 검사 확대: 각 역량 별로 더 세부적이고 다양한 검사들을 추가해, 특정 역량에 대한 심도 있는 검사를 진행할 수 있도록 서비스를 확대.

SNaiL은 아동 인지 발달에 대한 관심과 지식을 높이며, 아동의 성장과 꿈을 응원하고 지원할 수 있는 서비스다. 아동과 부모님들이 함께 성장하는 과정에서 SNaiL은 계속해서 발전하고 확장 가능할 것이다.