Back-end 구현사항
1️⃣ Client 구성
센서 정보를 받아 서버쪽으로 전송하기 위해 client를 구성합니다.
다음과 같이 구성하였을 때 카메라와 무게센서의 인식속도 차이가 존재합니다. 차이로 인해 영상의 인식속도가 떨어지게 됩니다.
인식속도가 떨어지는 것을 개선하기 위해 두 센서의 인식과정을 스레드로 분리해 인식속도를 개선합니다.
무게 측정과 영상 존송을 각각이 스레드로 구동 👉 영상 딜레이 ❌, 무게 측정 시간 영향 ❌
2️⃣ Server 구성
① 물체인식
서버에는 물체인식 과정이 진행됩니다.
물체인식을 위해 신경망 프레임워크인 다크넷, 영상처리 라이브러리인 OPCV, 객체인식모델인 YOLO 등과 같은 오픈소스를 사용하였습니다.
앞 모델학습에서 구한 모델을 다크넷 프레임워크에 적용한 뒤 다중 클라이언트 환경에 맞게 내부 함수를 재설계합니다.
② 데이터베이스 업데이트
데이터베이스 업데이트 알고리즘은 아래와 같이 진행됩니다.
- 새로운 프레임을 지속적으로 수신
- 물체인식, 무게인식이 모두 성공하면 무게증감 확인으로 이동
- 무게증감 확인을 통해 장바구니에 물건을 증가시키거나 감소
③ 검색을 통한 추천서비스
추천서비스는 영화 추천 오픈소스를 활용하여 주기적으로 데이터베이스의 연동 사항을 반영해 추천품목을 업데이트 하도록 구성하였습니다.
DB내 USERBASKET의 변동사항을 CSV에 저장 👉 추천목록 갱신 시 반영
데이터베이스에 변동사항을 파악하기 위해 주문번호를 이용해 정보만 반영하여 오버헤드를 최소화하였습니다.
3️⃣ QR 코드
QR코드는 카트에 qr코드를 인식하면 유저아이디를 통해 최신 주문번호를 받아옵니다.
① QR코드는 바코드 스캐닝 오픈소스 (ZXing Android Embedded)를 사용해 구성합니다.
② 카트에 qr 코드를 인식하면 데이터베이스에 유저아이디를 업데이트합니다.
③ 안드로이드 코드에 유저아이디를 php파일에 전달해 아이디가 일치하면 최신 주문번호를 받아옵니다.
@Override
public void onBackPressed() {
super.onBackPressed();
showResult2(USER_ID);
mArrayList = new ArrayList<>();
finish();
}
...
댓글남기기