딥러닝을 이용한 강아지 조회 및 등록 비문인식 캡스톤 프로젝트
1.mp4
- iOS
- UIKit
- GCD (DispatchSemaphore)
- AVFoundation
- Vision
- CoreML
- Server
- Flask 2.0.0
- python 3.7.2
- AWS EC2 - t2.medium
- Database(MySQL,radis)
- Celery
- Machine Learning
- opencv-python 3.4.2.16
- scikit-learn 0.24.2
- Pytorch
-
Client에서 비문사진(5장) 전송 -> 서버에서 preprocess 과정-> 5장 중 1장으로 이미 등록된 강아지인지 classification 실행 -> (미등록 강아지일 경우) database에 사용자 및 강아지정보 등록 & client에 "등록 성공" message 전달 or (등록된 강아지일경우) client에 "이미 등록된 강아지" message 전달
-
Frontend로 부터 받은 5장의 사진을 EC2 서버에 저장한 후에 classification을 실행하는 로직은 결과값이 Database에 저장되어 있지 않기 때문에 예외가 발생합니다. 따라서 조회를 위한 사진은 따로 미리 저장해놓는 방식을 택했습니다.
-
이외에도 사용자(부모테이블)가 여러마리의 강아지(자식테이블)를 등록할 수 있기 때문에 사용자의 핸드폰 번호가 database에 등록되어 있는 경우엔 사용자가 이중 등록 되지 않으며 두 테이블은 Foreign key로 연결되어 있습니다.
Client에서 비문사진(1장) 전송 -> 서버에서 classification 과정 -> (등록된 강아지일 경우)database에서 고유값 select & client에 사용자 및 강아지정보 전달 or (미등록 강아지일 경우) client에 "미등록 강아지" message 전달
- 조회가 성공한 경우엔 uniqueue number를 반환하고 uniqueue number는 "등록된서버시간+등록된강아지이름초성+사용자핸드폰번호뒷자리" 로 만들어지기 때문에 중복되지 않습니다.
Flask는 프로세스를 동기적(Synchronous)으로 처리하기 때문에 사용자 요청(HTTP)에 무거운 연산(머신러닝 classification)이 포함되어있는 경우 웹 서버의 처리가 모두 마무리될 때까지 기다려야 합니다. 등록, 조회 API가 동시 호출 되는 경우를 처리하기 위해 비동기 작업 큐 라이브러리 celery 사용했습니다.
[Flask + Celery + redis]의 전반적인 아키텍처
- Celery Client : 백그라운드 작업을 요청하는데 사용합니다
- Celery Workers : Flask와 동일한 서버에서 백그라운드 작업을 실행하는데 사용합니다
- Message Broker :in-memory 데이터 저장 장치인 redis를 메시지 브로커 용도로 사용합니다
이름 | role |
---|---|
문수림 | flask 기반 서버,db 개발 및 AWS 배포,데이터 학습 |
이해석 | IOS 기반 Swift 앱 개발, 데이터 학습 |
김종훈 | preprocess,Classifier model 개발,데이터 학습 |