← Back to All Projects
CASE STUDY 10/2023.11.08 — 2023.11.09
얼굴 표정 기반 실시간 감정 인식과 감정 기록을 결합해 감정 분포 및 변화를 시각화하는 웹 서비스.

서버연습용 감정분석서비스

AI-Hub ‘한국인 감정인식을 위한 복합 영상’ 데이터셋과 해당 페이지에서 제공하는 ‘활용 AI 모델 및 코드’를 바탕으로 표정 인식 AI를 직접 학습·평가하고, 이를 Django 웹 서비스에 연동한 개인 프로젝트다. 사용자는 감정 기록을 작성·검색·관리할 수 있으며, 누적된 감정 데이터를 Chart.js 그래프로 확인할 수 있다.

Period2023.11.08 — 2023.11.09
Role & ContributionAI 학습·평가부터 웹·데이터 저장·캐시·배포 자동화까지 전체 개발개인 프로젝트 · 1명
Tech Stack
PythonDjangoDjango TemplateChart.jsSQLiteRedisPyTorchEfficientNet-b5JWTGoogle OAuth2GitHub Actions
01얼굴 표정 인식 결과와 감정 저장 기능이 있는 메인 화면
02감정 분포와 시간에 따른 변화를 보여주는 통계 화면
03감정 기록 목록과 검색 화면
04감정 기록 상세와 댓글 화면
05모델별 테스트 평가와 혼동행렬
01 / Project Details

만들게 된 배경

얼굴 표정에서 순간적인 감정을 인식하는 데 그치지 않고, 사용자가 자신의 감정을 기록하고 변화 추이를 확인할 수 있는 서비스를 만들고자 했다. 감정 인식 AI와 기록·통계 기능을 하나의 웹 서비스로 결합하는 개인 프로젝트로 진행했다.

개발 기간

2023.11.08 — 2023.11.09

02 / Project Details

해결하려던 문제와 목표

일회성 감정 인식만으로는 감정의 분포나 시간에 따른 변화를 파악하기 어렵다. 실시간 얼굴 표정 인식 결과를 확인하고, 사용자별 감정 기록을 작성·조회·검색하며, 기록을 시각적으로 분석할 수 있는 웹 서비스를 구현하는 것이 목표였다.

03 / Project Details

주요 기능

  1. 회원가입 및 로그인: 사용자 계정 생성, JWT 기반 인증 및 Google 계정 로그인.
  2. 실시간 표정 감정 인식: 얼굴 영역을 검출하고 학습한 AI 모델로 감정을 분류해 웹 화면에 표시.
  3. 감정 기록 관리: 감정 관련 게시물 작성·조회·수정·삭제와 댓글 작성.
  4. 감정 기록 탐색: 감정 목록 검색, 상세 조회 및 페이지네이션.
  5. 감정 통계 시각화: Chart.js 기반 감정별 빈도 막대그래프와 날짜에 따른 감정 변화 그래프.
04 / Project Details

내가 직접 구현하거나 담당한 부분

  • AI 학습·평가: AI-Hub의 한국인 감정인식을 위한 복합 영상 데이터셋과 공개 학습 코드를 활용해 얼굴 추출, 데이터 분할, 모델 학습·평가 수행.
  • 프론트엔드: 로그인·회원가입, 감정 인식, 기록 목록·상세·수정·삭제와 통계 화면 전체 구현.
  • 백엔드: Django 인증, 감정 기록·댓글과 데이터 모델 구성.
  • 저장·캐시: SQLite를 영속 저장소로, Redis를 세션 캐시로 구성.
  • 시각화·배포: Chart.js 그래프, 개인 서버 호스팅과 GitHub Actions CI/CD 구성.

팀 구성과 역할

개인 프로젝트(1명) / AI 모델 학습부터 웹 프론트엔드·백엔드, 데이터 저장·캐시 구성, 배포 자동화까지 전체 개발 담당

05 / Project Details

설계 구조와 기술

서비스 구조: Django가 웹 페이지와 서버 로직을 담당한다. User를 기준으로 EmotionPost와 Comment를 연결하고, 기록·댓글은 SQLite, 세션 캐시는 Redis에 분리했다.

학습·평가: AI-Hub 데이터와 공개 학습 코드로 얼굴 추출 → 데이터 분할 → 학습 → 평가를 진행했다. 라벨 판별이 일치하지 않은 73,264개 이미지를 별도로 분류하고, 429,957개 이미지를 학습 343,967개·검증 42,995개·테스트 42,995개로 나눴다. EmotionNet·ResNet·VGG·EfficientNet을 비교했으며 EfficientNet-b5(img-large)는 50 epochs 학습 후 테스트 정확도 83.028%를 기록했다.

서비스 추론: Haar Cascade로 얼굴을 검출·전처리한 뒤 직접 학습한 EfficientNet-b5(img-large)로 감정을 분류해 화면에 표시했다.

시각화·배포: Chart.js로 감정별 분포와 시간 흐름을 표현하고, GitHub Actions 자동화와 개인 서버 호스팅을 구성했다.

기술 구성

  • Frontend: Django Template(HTML), Chart.js
  • Backend: Python, Django, JWT, Google OAuth2
  • Database / Cache: SQLite(Django ORM, 영속 데이터 저장), Redis(세션 단위 캐시)
  • AI: PyTorch, Haar Cascade, PIL(Pillow), AI-Hub ‘한국인 감정인식을 위한 복합 영상’ 및 제공 학습 코드(EmotionNet 포함), CNN·ResNet·VGG·EfficientNet 계열 비교·평가, EfficientNet-b5(img-large) 최종 서비스 적용
  • Infrastructure / 개발 환경: GitHub Actions, Windows Server 2022, NVIDIA Quadro RTX 8000(모델 개발·테스트 환경)
06 / Project Details

주요 개발 과제

개발 과제: Django 기록 서비스에 Redis 캐시와 Chart.js를 통합하는 것.

문제의 원인: 익숙하지 않은 도구를 도입하면서 관계형 저장소·세션 캐시의 역할을 나누고, 저장된 기록을 그래프에 연결해야 했다. 대규모 이미지 학습 데이터도 개발 자원에 부담을 줬다.

처리 방식: Django ORM으로 사용자·게시물·댓글 관계를 구성하고 기록은 SQLite, 세션 캐시는 Redis로 분리했다. Chart.js로 감정별·시간별 그래프를 연결했다.

결과: 감정 기록 CRUD, 댓글, 검색·페이지네이션과 통계 그래프를 구현했다.

07 / Project Details

최종 결과 / 실제 사용 여부

회원 인증, EfficientNet-b5 기반 실시간 감정 인식, 기록 관리·통계 시각화를 구현하고 시연 자료를 제작했다. GitHub Actions와 개인 서버 환경도 구축했으나 현재 서버 운영은 중단된 상태다.

08 / Project Details

배운 점

AI-Hub의 공개 학습 코드를 실제 데이터에 적용하며 얼굴 영역 추출, 불확실한 라벨 분리, 학습·검증·테스트 데이터 분할과 여러 모델의 성능 비교를 수행했다. 이를 통해 공개 모델의 활용과 본인이 직접 수행한 데이터 처리·학습·평가 작업을 구분하는 경험을 얻었다. Django의 영속 데이터와 Redis의 세션 캐시를 역할에 따라 분리하고, Chart.js로 기록을 분석 결과로 표현하는 흐름을 구현했다. GitHub Actions를 사용해 웹 서비스의 배포 자동화도 경험했다.

09 / Project Details

개선 방향

캐시 만료·무효화와 인증 흐름 테스트를 보강하고, AI 추론 속도·메모리 사용량을 측정해 안정성을 개선할 수 있다.