- 📖 프로젝트 개요
- 👨👧👦 팀원 및 역할
- 📆 프로젝트 기간
- 🎯 기술 스택
- 🥇 프로젝트 소개
- 🧠 딥러닝 인식 시스템
- 📶 통신 모듈
- 🖌️ GUI
- 🏅 DBMS 구성도
- DB 테이블 기능
- 🏁 발표 자료 링크
- ⚙️개발 환경 설정
딥러닝 기반의 행동 인식 및 객체 인식 모델을 사용하여 매장에 입장한 고객이 별도의 계산 절차 없이 물건을 구매하고, 관리자는 GUI를 통해 출입 상태, 재고 상태 등을 확인할 수 있는 시스템
구 분 | 이 름 | 역 할 |
---|---|---|
팀장 | 김준표 | 딥러닝 기반 고객 행동 인식 모델 학습 및 Test(Rule-based), 시스템 하드웨어 구성도 제작(일부), roslibpy 기반 영상 이미지 통신 및 PyQt 출력(일부) |
팀원 | 강한얼 | 객체 인식 모델 YOLOv8 학습, 딥러닝 기반 고객 행동 인식 모델 학습, 중앙 시스템 Main 함수 설계, 시스템 구성도 / Use case/ Sequence diagram 제작 |
팀원 | 조태상 | 매대의 과일 종류별 수량 인식 딥러닝 모델(일부), 시스템 데이터 저장을 위한 DB 개발, 관리자 시스템 GUI 개발 |
팀원 | 조홍기 | 매대의 과일 종류별 수량 인식 딥러닝 모델 개발(전체), 무인 매장 시스템 - 중앙 관리 시스템간 통신 모듈 개발, 전체 시스템 통합 |
팀원 | 최규호 | 시스템 데이터 저장을 위한 DB 개발 |
2023.11.16 ~ 2023.12.15 (中 10일)
개발 환경 | 언어 | ||
딥러닝 | DB | ||
GUI | 통신 | ||
커뮤니케이션 |
-
매장 내 영상 인식 시스템
- Action Recognition Program : 카메라 영상으로부터 고객의 구매 행동을 인식
- Stand Counter Program : 카메라 영상으로부터 매대 위의 상품 수량을 카운트
-
중앙 시스템
- 통신 : ROS Bridge Server의 Topic을 Subscribe하여 Cam 영상 및 데이터 수신
- Main : 매장 내 영상 인식 시스템의 인식 결과를 취합하여 처리
- DB : 매장 이용 기록, 시스템 로그 저장
- File storage : CCTV 영상을 저장
-
사용자
- System GUI : 관리자가 매장 상태, 구매 기록, 재고 상태 등을 조회
- CCTV Viewer : CCTV 영상 조회
-
출입 시나리오
- 고객이 신용 카드를 태그하여 매장에 입장
- DB로부터 고객 정보를 조회하여 시스템 상의 가상의 장바구니를 생성
- 고객 출입 기록을 저장
-
쇼핑 시나리오
- 고객이 매장 내 카메라에 인식 될 경우, 고객 행동을 인식하고 행동 로그를 기록
- 고객의 구매 행동을 인식하는 경우, 매대 위 상품 수량 변화와 비교하여 불일치가 발생하는지 확인 (불일치 로그 기록)
- 행동 인식 결과를 바탕으로 고객의 가상의 장바구니 업데이트
-
퇴장 및 구매 시나리오
- 고객이 출구에 신용 카드를 태그하여 매장에서 퇴장
- 가상의 장바구니 내 품목별 가격을 DB에서 조회하여 총 금액 계산
- 구매 기록을 DB에 저장
- 고객의 퇴장 기록을 저장
- 매장 내 고객 구매 행동 인식
- 매대 위 상품 카운트하여 재고 파악
- Task 1 : 고객 행동 인식
- Task 2 : 집은 상품 인식
아래 3가지 Model architecture를 설계하여 가장 높은 성능을 보이는 Separated inference model을 선택
- Rule-basd model
- Multi-task model
- Separated-inference model
-
행동 인식
- 카메라 영상을 입력으로 받음
- Human pose estimation model, object detection model을 통해 관절 key points 좌표와 상품 좌표를 추출
- 추출된 좌표 값들을 action recognition model인 LSTM의 input으로 사용
- 50 frame(sequence length of LSTM)이 마다 고객 행동을 예측
-
집은 상품 인식
- 예측된 행동이 "Holding"이면 마지막 프래임(이미지)을 CNN의 입력으로 사용
- CNN을 통해 고객이 집은 상품을 인식
Components | Model | Training |
---|---|---|
Human pose estimation model | Mediapipe | Pre-trained |
Object detection model | YOLOv8 | From scratch |
Action recognition model | LSTM | From scratch |
CNN model | MobileNet-V3 | From scratch |
YOLO v8 기반 SuperVision 사용
utils/make_ROI.py
로 매대 영역의 Polygon을 제작하여 save_roi.txt로 저장 후 Polygon 영역 내의 객체 개수 인식.
자세한 내용
- 사용 모듈
- ROS2
- ROS bridge(Websocket Server)
- roslibpy
- Non-ROS system에서 Topic, Service, Action 작업을 하기 위한 library
- Cam 시스템 경량화를 위해 사용
- Json 형태로 데이터 전송
- Non-ROS2 시스템과의 통신을 위해 사용
-
sensor_msgs/msg/CompressedImage 기반, 매대 Data, 행동 Data를 추가한 Custom Message 제작
-
CompressedImg를 만들어서 보내고 수신하여 이미지로 만드는 일련의 과정 라이브러리 참고하여 직접 구현
-
참조 :
-
구조
타입 | 변수명 | 비고 |
---|---|---|
uint16 | img_width | |
uint16 | img_width | |
uint16 | img_width | |
uint8[] | img_data | 320 x 320 resize 후 전송 |
string | action_data | dict를 str로 dump하여 전송 |
string | stand_data | dict를 str로 dump하여 전송 |
① 특정 고객 ID 검색(ID가 없을 경우 검색되지 않음)
② 입장/퇴장 시간 선택(달력으로 년월일 선택)
③ 검색 결과 및 검색 필터(고객 ID, 입장/퇴장 시간) 초기화
④ 검색 : 현재 입력된 조건으로 DB 조회
⑤ DB 조회 결과 표시
⑥ 매대에 있는 과일과 결제된 과일의 불일치 로그 표시
⑦ 매대에 남아있는 종류별 과일 개수 표시
⑧ 과일이 팔린 시간, 종류, 개수를 DB에서 조회후 표시
⑨ CCTV 현재 화면
고객이 매장에 입장하면, DB에 고객정보가 update
입장한 고객을 결과화면에서 보고싶으면 search 버튼 클릭
고객이 원하는 과일을 고르고 매장 밖으로 나가면 DB에 결제할 과일이 update
고객이 결제한 과일과 매대에서 사라진 과일이 다르면 불일치 로그에 정보가 보임
매대에 남아있는 과일을 보고싶으면 search 버튼 push
팔린 과일의 log를 보고싶으면 search 버튼 push
cctv는 매대와 고객이 과일을 고르는 영상을 실시간으로 보고 있음
productIn : 입고되는 과일을 관리하기 위한 테이블
enterence : 고객이 입장하는 정보를 저장하기 위한 테이블
payment : 고객이 매장 밖으로 나가면 결제된 정보들을 저장하기 위한 테이블
fruits : 현재 매장에 남아있는 과일을 관리하기 위한 테이블
customer : 고객을 관리하기 위한 테이블
shoppingBasket : 고객이 매장에서 과일을 선택하고 매장밖으로 나가기 전까지 선택한 과일을 저장하는 테이블
actionRecognition : 고객이 구매를 하기위한 인식된 행동을 저장하는 테이블
productOut : 고객이 사간 과일의 정보를 저장하기 위한 테이블
actionType : 고객이 과일을 사기 위한 4가지 타입의 행동을 정의한 테이블
mistmatchActionStand : 고객이 사간 과일과 매대에서 사라진 과일의 종류와 개수가 다를 때 정보를 알기 위해 각 정보를 저장하는 테이블
OS : Ubuntu 22.04
Main PC
- install pytorch 2.1.1 (https://pytorch.org/get-started/previous-versions/)
- pip install -r requirements/main_requirements.txt
- install ros2 humble (https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html)
- sudo apt-get install ros-humble-rosbridge-server
- cd ros_ws
- source /opt/ros/humble/setup.bash
- colcon build
- source install/local_setup.bash
- 중앙 PC (cmd 1) -> ros2 launch rosbridge_server rosbridge_websocket_launch.xml
- 중앙 PC (cmd 2) -> ros2 run auto_store_package auto_store_subscriber
관제 PC
- pip install -r requirements/control_requirements.txt
- python3 UIController.py
Cam
- pip install -r requirements/cam_requirements.txt
- python3 -m main main.py