졸업을 앞두고 캡스톤 디자인 수업에서 만든 얼굴 인식 시스템을 보완했다. 처음에는 웹 앱과 머신러닝으로 사용자의 얼굴을 구분하고 버스 요금을 결제하는 시스템을 목표로 했다. 개발 인력이 한 명이었던 만큼 전체 기능을 완성하기는 어려웠고, 최종 구현 범위는 얼굴 검출과 구분으로 좁혔다.

시스템 구성

Node.js를 메인 서버로 사용하고, 머신러닝 처리는 별도의 Flask 서버로 분리했다. 사용자 정보와 이미지 경로는 MySQL에 저장하고, 이미지 파일은 로컬에 보관했다. Node.js 서버는 로그인과 이미지 등록을 처리하고 Flask 서버에 얼굴 처리 요청을 전달했다.

모델 개발에서 마주한 한계

웹 앱보다 어려웠던 부분은 머신러닝 모델이었다. 한 달 동안 모델을 검토했지만 서비스에 적용할 만큼의 성능을 확보하기는 어려웠다. 당시에는 정확도 0.6 이상을 얻는 것도 쉽지 않았다. 다만 이 수치는 당시 데이터와 평가 방식에 따른 결과이며, 데이터 구성과 평가 조건을 함께 기록하지 않아 일반적인 성능 지표로 해석하기는 어렵다.

최종 구현에서는 Haar cascade를 활용해 얼굴 영역을 검출했다. 여기서 얼굴이 있는 위치를 찾는 검출과 그 얼굴이 누구인지 판단하는 인식은 구분해야 한다. 원래 목표였던 결제 시스템까지 완성한 것은 아니었다.

구현 흐름과 회고

사용자가 로그인한 뒤 이미지를 등록하면, 서버는 파일을 보관하고 데이터베이스에 경로를 기록한다. Flask 서버는 등록된 이미지를 바탕으로 얼굴 처리 기능을 제공하고 클라이언트 카메라 입력을 분석하도록 구성했다.

이번 프로젝트를 통해 기능이 동작하는 것과 서비스 수준의 완성도를 갖추는 것은 다른 과제임을 확인했다. 모델 평가, 실패 상황 처리, 응답 시간까지 포함해 구현 범위를 정해야 했다.

코드