Git Product home page Git Product logo

auto_store's Introduction

딥러닝 기반의 무인 매장 시스템


Index


📖 프로젝트 개요

딥러닝 기반의 행동 인식 및 객체 인식 모델을 사용하여 매장에 입장한 고객이 별도의 계산 절차 없이 물건을 구매하고, 관리자는 GUI를 통해 출입 상태, 재고 상태 등을 확인할 수 있는 시스템

👨‍👧‍👦 팀원 및 역할

구 분 이 름 역 할
팀장 김준표 딥러닝 기반 고객 행동 인식 모델 학습 및 Test(Rule-based), 시스템 하드웨어 구성도 제작(일부), roslibpy 기반 영상 이미지 통신 및 PyQt 출력(일부)
팀원 강한얼 객체 인식 모델 YOLOv8 학습, 딥러닝 기반 고객 행동 인식 모델 학습, 중앙 시스템 Main 함수 설계, 시스템 구성도 / Use case/ Sequence diagram 제작
팀원 조태상 매대의 과일 종류별 수량 인식 딥러닝 모델(일부), 시스템 데이터 저장을 위한 DB 개발, 관리자 시스템 GUI 개발
팀원 조홍기 매대의 과일 종류별 수량 인식 딥러닝 모델 개발(전체), 무인 매장 시스템 - 중앙 관리 시스템간 통신 모듈 개발, 전체 시스템 통합
팀원 최규호 시스템 데이터 저장을 위한 DB 개발

📆 프로젝트 기간

2023.11.16 ~ 2023.12.15 (中 10일)

🎯 기술 스택

개발 환경 Git Github 언어
딥러닝 DB
GUI 통신 ROS2
커뮤니케이션 Jira Confluence Slack

🥇 프로젝트 소개

🥇 시스템 구성

기능 리스트

  • 매장 내 영상 인식 시스템

    • Action Recognition Program : 카메라 영상으로부터 고객의 구매 행동을 인식
    • Stand Counter Program : 카메라 영상으로부터 매대 위의 상품 수량을 카운트
  • 중앙 시스템

    • 통신 : ROS Bridge Server의 Topic을 Subscribe하여 Cam 영상 및 데이터 수신
    • Main : 매장 내 영상 인식 시스템의 인식 결과를 취합하여 처리
    • DB : 매장 이용 기록, 시스템 로그 저장
    • File storage : CCTV 영상을 저장
  • 사용자

    • System GUI : 관리자가 매장 상태, 구매 기록, 재고 상태 등을 조회
    • CCTV Viewer : CCTV 영상 조회

USE CASE Diagram

Sequence Diagram

  • 출입 시나리오

    • 고객이 신용 카드를 태그하여 매장에 입장
    • DB로부터 고객 정보를 조회하여 시스템 상의 가상의 장바구니를 생성
    • 고객 출입 기록을 저장
  • 쇼핑 시나리오

    • 고객이 매장 내 카메라에 인식 될 경우, 고객 행동을 인식하고 행동 로그를 기록
    • 고객의 구매 행동을 인식하는 경우, 매대 위 상품 수량 변화와 비교하여 불일치가 발생하는지 확인 (불일치 로그 기록)
    • 행동 인식 결과를 바탕으로 고객의 가상의 장바구니 업데이트
  • 퇴장 및 구매 시나리오

    • 고객이 출구에 신용 카드를 태그하여 매장에서 퇴장
    • 가상의 장바구니 내 품목별 가격을 DB에서 조회하여 총 금액 계산
    • 구매 기록을 DB에 저장
    • 고객의 퇴장 기록을 저장

🧠 딥러닝 인식 시스템

  • 매장 내 고객 구매 행동 인식
  • 매대 위 상품 카운트하여 재고 파악

구매 행동 인식 모델

수행 태스크

  • Task 1 : 고객 행동 인식
  • Task 2 : 집은 상품 인식

모델 선택

아래 3가지 Model architecture를 설계하여 가장 높은 성능을 보이는 Separated inference model을 선택 [세부 설명 (URL)]

  • Rule-basd model
  • Multi-task model
  • Separated-inference model

Separated-inference model architecture

Inference

  • 행동 인식

    • 카메라 영상을 입력으로 받음
    • Human pose estimation model, object detection model을 통해 관절 key points 좌표와 상품 좌표를 추출
    • 추출된 좌표 값들을 action recognition model인 LSTM의 input으로 사용
    • 50 frame(sequence length of LSTM)이 마다 고객 행동을 예측
  • 집은 상품 인식

    • 예측된 행동이 "Holding"이면 마지막 프래임(이미지)을 CNN의 입력으로 사용
    • CNN을 통해 고객이 집은 상품을 인식

Components

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

roslibpy

  • Non-ROS system에서 Topic, Service, Action 작업을 하기 위한 library
  • Cam 시스템 경량화를 위해 사용
  • Json 형태로 데이터 전송

ROS bridge

  • Non-ROS2 시스템과의 통신을 위해 사용

Custom Message - ImgNData

타입 변수명 비고
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하여 전송

🖌️ GUI

GUI 설명

① 특정 고객 ID 검색(ID가 없을 경우 검색되지 않음)

② 입장/퇴장 시간 선택(달력으로 년월일 선택)

③ 검색 결과 및 검색 필터(고객 ID, 입장/퇴장 시간) 초기화

④ 검색 : 현재 입력된 조건으로 DB 조회

⑤ DB 조회 결과 표시

⑥ 매대에 있는 과일과 결제된 과일의 불일치 로그 표시

⑦ 매대에 남아있는 종류별 과일 개수 표시

⑧ 과일이 팔린 시간, 종류, 개수를 DB에서 조회후 표시

⑨ CCTV 현재 화면

GUI 사용 방법

고객이 매장에 입장하면, DB에 고객정보가 update

입장한 고객을 결과화면에서 보고싶으면 search 버튼 클릭

고객이 원하는 과일을 고르고 매장 밖으로 나가면 DB에 결제할 과일이 update

고객이 결제한 과일과 매대에서 사라진 과일이 다르면 불일치 로그에 정보가 보임

매대에 남아있는 과일을 보고싶으면 search 버튼 push

팔린 과일의 log를 보고싶으면 search 버튼 push

cctv는 매대와 고객이 과일을 고르는 영상을 실시간으로 보고 있음


🏅 DBMS 구성도

ERD drawio

DB 테이블 기능

productIn : 입고되는 과일을 관리하기 위한 테이블

enterence : 고객이 입장하는 정보를 저장하기 위한 테이블

payment : 고객이 매장 밖으로 나가면 결제된 정보들을 저장하기 위한 테이블

fruits : 현재 매장에 남아있는 과일을 관리하기 위한 테이블

customer : 고객을 관리하기 위한 테이블

shoppingBasket : 고객이 매장에서 과일을 선택하고 매장밖으로 나가기 전까지 선택한 과일을 저장하는 테이블

actionRecognition : 고객이 구매를 하기위한 인식된 행동을 저장하는 테이블

productOut : 고객이 사간 과일의 정보를 저장하기 위한 테이블

actionType : 고객이 과일을 사기 위한 4가지 타입의 행동을 정의한 테이블

mistmatchActionStand : 고객이 사간 과일과 매대에서 사라진 과일의 종류와 개수가 다를 때 정보를 알기 위해 각 정보를 저장하는 테이블


🏁 발표 자료 링크

https://docs.google.com/presentation/d/1L9lDK6GptjHDVC1pk5et46PFg5JRmc-w_r4A61HhIeM/edit#slide=id.g263d5bba2a3_0_5


⚙️ 개발 환경 설정

OS : Ubuntu 22.04

Main PC

  1. install pytorch 2.1.1 (https://pytorch.org/get-started/previous-versions/)
  2. pip install -r requirements/main_requirements.txt
  3. install ros2 humble (https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html)
  4. sudo apt-get install ros-humble-rosbridge-server
  5. cd ros_ws
  6. source /opt/ros/humble/setup.bash
  7. colcon build
  8. source install/local_setup.bash
  9. 중앙 PC (cmd 1) -> ros2 launch rosbridge_server rosbridge_websocket_launch.xml
  10. 중앙 PC (cmd 2) -> ros2 run auto_store_package auto_store_subscriber

관제 PC

  1. pip install -r requirements/control_requirements.txt
  2. python3 UIController.py

Cam

  1. pip install -r requirements/cam_requirements.txt
  2. python3 -m main main.py

auto_store's People

Contributors

chohongki avatar haneol0415 avatar pogajoa avatar wildcatts avatar addinedu avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.