본문 바로가기

프로젝트

오픈소스를 활용한 안면인식 도어락

개발 배경


기존의 안면인식 도어락은 일반적인 사용자들이 사용하기에는 가격이 부담스럽습니다. 또한 기존에 설치되어있는 도어락을 제거하고, 이를 설치하여야 하기때문에 부담이 더욱 큽니다. 

그래서, 기존의 도어락은 유지한채 얼굴인식 기능을 추가하는 방법으로 현대인의 필수품인 스마트폰을 활용하여 경제적 부담을 덜어낸 안면인식 도어락을 개발하자 생각하였습니다.

 

서비스 구상도


사용자는 Application을 통해 본 서비스를 이용할 수 있습니다. 사용자는 회원가입시 본인의 사진 5장을 올립니다. 이를 firebase가 저장하고, Server는 이를 받아 학습합니다. 사용자가 이미지를 전송하고, 서버에게 허가요청을 보냅니다. 이런 메시지와 이미지는 firebase에 저장됩니다. Server는 firebase의 Database에 사용자가 보낸 허가요청 메시지를 받으면 firebase의 Storage에 있는 사진을 받아와 학습한 이미지들과 비교하여, 허가요청결과를 firebase에 보냅니다. 허가되었다면 도어락이 열립니다.

 

사용한 오픈소스


 

결과 화면


로그인 성공화면
로그인 실패화면
도어락과 연결화면
기존의 사진선택
새롭게 찍은 사진
사진을 선택한 후 열기

기존의 사진선택의 경우 사용자얼굴을 학습하기 위한 용도로 사용하기 위해 추가되어있습니다.

 

참여한 부분


앱에서 회원가입 부분과 Firebase부분, 앱과 서버를 연결하고, 서버와 아두이노를 연결하는 부분을 맡았습니다. Firebase중에서도 Realtime Database와 Storage를 사용하였습니다. Firebase를 회원가입에 사용한 이유는 Firebase Authentication과 통합되어 있어서 단순하고 직관적으로 회원가입을 이용할 수 있을 것 같아 사용하였습니다. 그리고 Firebase는 모바일 환경에 최적화 되어있으며, 사용법에 대한 자료가 많아 접근성이 높다고 생각하여 선택하였습니다.

각 사용자의 Uid를 통해 사용자별 메시지를 구분할 수 있으며, 안에 메시지의 내용을 담았습니다.
사용자가 찍은 사진과 사용자가 안면인식에 등록된 사진들과의 비교를 위해 Firebase Cloud Storage에 사용자가 등록한 사진과 찍은 사진을 저장하여 주었습니다. 이로 인해 사용자는 사용을 계속할수록 좀 더 나은 성능의 안면인식을 사용할 수 있게 됩니다. Cloud Storage는 사용자별로 폴더를 만들어 관리하였습니다.

Firebase와 연결해주는 코드
사진을 Upload하는 코드
문열기 요청 코드

서버는 Python을 사용하였습니다. Python에서 Firebase를 사용하기위해 Pyrebase를 사용하였습니다. child를 통해 Firebase구조에 쉽게 접근할 수 있어 사용함에 큰 불편함은 없었습니다.

Pyrebase 초기화
Pyrebase를 이용해 Firebase에 접근
사용한 도어락과 아두이노

기존의 도어락에 블루투스를 추가하여 작동하였습니다. 서버에서 사용자가 업로드한 사진과 기존의 사진들과 유사도를 검사하고 유사하면 블루투스 신호를 보내 문을 열어주게되고 일정시간이 지나면 자동으로 닫기게 하였습니다.

 

느낀점


이전에 TCP/IP 소켓통신 채팅앱을 제작할 때, Firebase를 공부해 본 적은 있었지만, 실질적으로 사용은 처음으로 해보았습니다. SDK 문서 역시 정리가 잘 되어있었고, 사용하면서 불편함을 느끼지 못하였습니다. 개발자가 신경 써야 할 보안이나 DB의 설계 부분을 많이 줄여주어서 좋았습니다. 회원가입과 로그인을 Authentication을 이용했는데, 이 부분이 굉장히 편했고, 구글 계정 연동까지 되는 부분은 많은 도움이 되었습니다. 그리고 관리자로서도 사용자들의 계정을 관리하기 편해서 좋았습니다.

아쉬웠던 부분은 이미지 파일의 관리였습니다. 서버 측에서 사용자별로 사진을 따로 저장해두고 존재하지 않는 파일만 Firebase에서 받았더라면 서버 측에서 문을 열어주는 반응이 좀 더 빠를 수 있었는데, 이를 해결하지 못한 부분이 아쉬웠습니다.

서버, 아두이노, 앱까지 3단계로 이루어진 프로젝트였습니다. 도어락 특성상 사용자의 요구에 앱과 아두이노가 빠르게 반응하여야했는데, 이를 해결하기 위한 방법에 대한 고민이 많이 부족하였던것 같습니다. 

 

Github


https://github.com/solyeah/photolock

'프로젝트' 카테고리의 다른 글

Kotlin을 이용한 데이터 수집앱과 데이터 분석  (0) 2019.11.06
TCP/IP Socket Programming 번역 채팅앱  (0) 2019.11.06
Location Based AR  (0) 2019.11.06