스위캠
한 줄 소개
학습자 행동분석을 통한 학습 모니터링 서비스를 제공하는 Android 앱
진행 기간
Oct 1, 2021 → Dec 1, 2021
담당 Skills & 사용 Libraries
팀 구성
Android 개발자 1, 백엔드 개발자 1, AI 개발자 2
Related to Awards (Property)
🔍 프로젝트 설명

‘스위캠’은 자기 주도 학습을 하고자 하는 모두에게 도움을 주고자 하여, 학습자의 시간 관리 및 모니터링 서비스를 제공하는 Android 앱 입니다. 학습시간 관리, 학습 태도 분석(집중 여부 판단), 사용자의 학습 관련 데이터 통계 자료 제공이 ‘스위캠’의 주기능 입니다. 학습자의 집중 여부는 하품 여부로 판단되며 현재 눈과 입을 인식하여 눈을 감고 입을 벌린 상태가 일정 시간 지속되는 경우 하품으로 판단합니다.
2021년도 동국대학교 ‘컴퓨터 공학 종합설계1’의 프로젝트로 진행하였으며, 설계를 마치고 MVP(Minimum Viable Product)를 구현하는 것을 1차 목표로 하여 현재 타이머 기능, 카메라를 이용한 실시간 분석 기능 개발을 완료했습니다. 현재 집중 여부의 정확한 판단을 위해 AI 모델 성능 개선 및 데이터 저장, API 연결 등의 추가 기능을 구현하고 있습니다.
🛠️ 사용 기술 및 라이브러리
- Android, Kotlin
- CameraX
- Retrofit2, Moshi
- Firebase
📱 담당한 기능 (Android)
- UI 설계 및 전체 화면 개발
- Firebase Auth를 이용한 구글 로그인 기능
- 타이머 기능
- CameraX 라이브러리를 이용한 Preview 기능
- Firebase ML을 이용한 커스텀 Tensorflow-lite 모델 관리
- Tensorflow-lite 모델과 카메라 연결을 통한 실시간 이미지 분석 기능
- MPAndroidChart 라이브러리를 이용한 통계 기능
- 서버에 데이터 저장
💡 깨달은 점
- ViewModel을 이용하면 UI 컨트롤러와 데이터가 분리할 수 있다.
- Firebase ML : Firebase를 사용해 커스텀 Tensorflow-lite 모델을 앱과 함께 패키징 할 수 있다.
- 앱에 ML Kit SDK를 포함하면 ML Kit가 사용자의 모델을 최신 버전으로 유지하여 모델 업데이트가 용이하다.
- 커스텀 Tensorflow-lite 모델의 용량은 40MB로 제한된다.
- CameraX는 Android Jetpack 라이브러리로 카메라 기능 개발을 쉽게 할 수 있도록 도와준다.
cameraProvider.bindToLifecycle()
메서드로 카메라의 수명 주기를 지정할 수 있다.- imageAnalyzer를 설정하여
bindToLifecycle()
에 해당 인스턴스를 추가하여 이미지 프로세싱을 할 수 있다. - CameraX의 결과물로 생성된 이미지는 YUV 형태이며 Bytebuffer 형태로 변환하여Tensorflow-lite 모델에 입력값으로 사용할 수 있다.
- Android 9.0부터는 보안 상의 문제로
http
관련 호출을 차단하며UnknownServiceException
이 발생한다.https
로 호출하는 방법으로 해결할 수 있다.
- Moshi는 대세 JSON Converter로 GSON에 비해 Kotlin 친화적이며 빠르고 안정적이다.
- MPAndroidChart 오픈소스 라이브러리를 이용하여 막대 그래프, 원형 그래프, 꺾은선 그래프 등 다양한 그래프를 나타낼 수 있다.