Skip to content

hemoi/parkingManager_cps

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

75 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

parkingManager_cps

CPS 팀원

  • 유정규
  • 정두영
  • 최중현
  • 홍석현

DIR구조

  • src
    ㄴ flask_server.py: 웹과 연결
    ㄴ plate_recognizer.py: 번호판 이미지를 받아서 string 값을 추출함
    ㄴ wallet.py: local blockchain과 통신

  • web
    ㄴ index.html, database.html: 웹 페이지를 위한 기본적인 틀
    ㄴ button_control.js: 프로그램의 전체적인 기능을 위한 파일(서버 통신, 주차 기능, 정보 저장, 주차공간 시각화 등)
    ㄴ clock.js: 메인 페이지에서 시계 기능을 위한 파일(Date)
    ㄴ db_button.js, dbList.js: database 페이지를 위한 파일(데이터베이스 초기화, 데이터베이스 내용의 시각화 등)
    ㄴ css파일들: UI 및 주차공간 시각화를 위한 파일들

  • truffle(삭제예정)

Version

  • ubuntu 18.04
  • python 3.7.2
  • opencv-python 4.2.0.34
  • web3 5.9.0
  • Flask 1.1.2
  • Flask-restful 0.3.8

Flow

python flask_server.py : flask 서버 실행

진입

  1. 번호판 이미지 pakring 폴더에 생성
  2. watchdog library를 이용, 이미지의 생성을 감지함
  3. 이후 plate_recognizer.py 이용, 생성 된 이미지에서 string을 추출
  1. plateProcessor에서 이미지 전처리가 일어남
  2. plateRecognizer에서 pytesseract library를 이용해서 text를 추출
  1. 추출한 번호판의 정보를 유저의 정보(지갑)과 연결
  • 만약 지갑이 없을 경우, 사용 가능한 wallet을 번호판 정보와 연결
  1. parkingUser 클래스의 객체를 생성
  • 해당 클래스에는 현재 시간, 주차 장소, 유저 정보가 들어감
  1. parkingUserList 리스트에 추가
  • 이후 웹에서는 해당 정보를 json 형식으로 받는다.

주차

  1. 서버로부터 1초마다 json을 받아 정보를 처리함.
  1. local Storage에 중복 저장되지 않도록 검사함
  2. 중복되지 않도록 저장함
  3. 만약 서버에서 삭제된 경우(출차한 경우) local Storage 삭제
  1. 데이터 베이스(local Storage)에 저장된 정보들을 표시함
  1. 시각화된 주차 공간을 색칠하여 자리를 표현함
  2. 화면의 콘솔 창에 주차정보들을 출력함
  3. Database 페이지에 이를 출력(저장)함

출차

  1. 웹에서 나가는 이벤트 발생
  1. 해당 차의 정보를 이용해 delete 요청을 서버로 보냄
  2. local Storage에서 해당 차량의 정보를 삭제
  3. 화면 주차 공간을 색을 지움
  4. 화면 콘솔에 출차 정보를 출력
  1. 서버는 해당 요청을 받음
  1. 해당 parkingUser 객체에서 user 정보 확인
  2. 연결된 wallet을 확인
  3. 현재 시간과 들어 온시간을 비교해서 주차 시간 계산
  4. 요금 계산
  1. 계산된 요금과 연결된 wallet을 이용 블록체인을 통해 요금을 정산한다.
  1. rawTx를 만듦
  2. 보관 중인 개인키를 통해서 서명
  3. 블록체인 네트워크(ganache)로 전송
  1. 이후 parkingUser 객체 삭제
  • 웹에서 이를 감지해서 반영


Report

Alt text

구현 방법

차량 진입 인식 후, 차량 번호판 캡쳐 및 번호 추출

  • 이미지 전처리: python opencv를 사용
  • 번호 값 추출: pytesseract를 사용

차량 주차 인식 후, 위치정보 전송

  • 차량 주차 인식: 센서 등을 활용하여 정보를 가져왔다고 상정
  • 웹 연결: flask-rest를 사용 예정

서버 내, 데이터 관리

  • 데이터 관리 및 처리: flask, Browser local storage 활용 예정

실제 서비스보다 작은 시연 상황의 규모를 고려, Database 구축은 지양함

시연을 위한, 동작 과정 시각화

  • 웹 구현: HTML, CSS, JavaScript(Vanilla) 사용

세부 동작 과정은 Browser console log를 웹 페이지에 시각화

고객 단말기 UI

  • 화상회의 프로그램(ZOOM)을 통한 시연 과정의 특성을 고려. Client-side UI 구현은 지양

블록체인을 통한 결제

  • 블록체인 플랫폼: 이더리움

  • 로컬 네트워크: ganache 사용

  • 웹 연동: web3.py 사용 예정 (server-side)

  • 세부 과정

  1. 사용자가 해당 플랫폼에 사전 가입한 상태로 상정 (사용자 식별정보 및 차량번호 획득)
  2. 출차 시, 들어온 시간과 나간 시간을 이용해서 이용시간 산정
  3. 이용시간을 계산한 후 raw 트랜잭션을 만듦
  4. 기기에 등록되어있다고 가정, 개인키를 통해서 해당 트랜잭션에 자동으로 서명
  5. 차량이 나가면 결제가 완료되며 관리자의 주소로 돈이 입금

비 구현 범위

  • 하드웨어 내장 소프트웨어

실질적인 하드웨어 내장 소프트웨어의 구현의 경우, 해당 기기 및 관련 API, 라이브러리 등의 구비 어려움으로 인해, 그 구현을 지양

  • CCTV 카메라 내장 소프트웨어

차량 번호판을 포함한 사진을 서버에서 전송받은 상태로 상정

  • 적외선 센서 내장 소프트웨어

차량의 위치 고유번호를 서버에서 전송받은 상태로 상정

  • LED 램프 내장 소프트웨어

LED 램프 점등을 통한 차량위치 알림 서비스의 경우, 그 기능적 표현을 웹 브라우저 내 이미지로 대체

  • 비 핵심기능 소프트웨어

동일한 기능을 해당 툴/기술을 활용하여 구현할 수 있다는 전제 하에, 비 핵심기능의 구현은 프로젝트 규모를 고려하여, 기능의 시연이 가능한 정도로 한정하여 다른 툴/기술로 대체 구현

  • DB 시스템

시연을 위해 활용되는 데이터가 양적 측면에서 소규모인 것을 고려하여, 웹 브라우저내 Local Storage로 대체하여 구현


Review

프로젝트 강점

현존 서비스와의 차별화 (UI 단일화)

기존 스마트 주차장 서비스와 제공하는 기능을 동일 혹은 유사하다고 볼 수 있다. 하지만 시스템에서 사용되는 다양한 UI자원을 사용자의 단말기, 즉, 스마트 폰으로 단일화하는데 그 특장점이 있다고 볼 수 있다. 기존 스마트 주차장 서비스의 경우 별도의 키오스크 기기나 출입 게이트에 비치된 결제요금 정산기 등 다양한 사용자 접점이 산재되어 있다. UI를 단일화함으로써 사용자의 접근성과 편이성을 개선할 수 있다. 더불어 서비스를 비 대면화하여, 현재 C19으로 인해 요구되는 다양한 시의적 가치를 충족시킬 수 있다.

기능적 역할 분담

전체 서비스를 기능적으로 모듈화하여, 각 기능 코드의 구현을 담당자 별로 명확히 분리했다. 이후 작성된 각 코드를 연계했다. 실제 현업에서 개발업무 시, 전체 코드를 작성하기 보다는 기획단계에서 기능 단위로 분리하여 그 업무를 분배한다. 이를 모방하여 업무를 분배함으로써, 실제 현업에서 겪을 수 있는 상황과 문제에 대해 임의로 체험할 수 있었다.

수업을 통해 얻은 지식의 활용

본 프로젝트가 진행된, 사이버물리시스템보안 교과를 통해 1학기간 파이썬 기반의 다양한 코드를 작성하는 실습을 진행해 왔다. 학습한 언어의 다양한 활용경험을 수행하기 위해, 팀원 모두 가능한 파이썬 기반의 코드를 작성하여 필요한 기능을 구현하고자 했다.

TODO

  • 차량 전체 이미지내, 낮은 번호 인식률

차량 전체 이미지를 인자로 활용하여 이미지내 차량번호 추출 시, 다소 낮은 인식률을 보였다. 이를 개선하기 위해, 관련 라이브러리나 알고리즘을 활용하는 등 다양한 해결책을 시도해 봤다. 하지만 유의미한 인식률 개선은 이루어지지 않았다. 하여 임의의 해결책으로서, 차량 전체 이미지가 아닌 번호판 이미지 만을 활용하여 인식률을 개선할 수 있었다.

  • 해시함수 적용

차량 번호는 개인 혹은 법인과의 직접적 소유관계로 결부된 차량을 식별할 수 있는 정보이다. 따라서 이를 활용하여 개인의 식별이 가능함으로 법률적 개인정보 혹은 민감정보라고 할 수 있다. 민감정보 활용에 뒤따르는 개인정보침해 이슈를 미연에 방지하기위해, 차량번호의 직접활용 대신 차량번호의 해시 값을 활용하고자 했다. 하지만 솔트 값을 넣지 않는다면 해시를 하는 것이 무의미하다고 판단했고, 솔트값을 랜덤하게 주려고 시도를 했다. 하지만 이 과정에서 지갑과 연결하는 별도의 과정이 필요했고 한정된 시간안에 완료를 하는 것이 리스크가 크다고 판단했다. 결국 해시화 하지 않은 상태로 네트워크에 저장했다.

  • 부가 서비스 구현

시스템 내에서 보관되는 차량번호, 출입 시간 등 다양한 정보를 활용한 부가 서비스 구현을 시도했다. 빌딩식 자동 주차장이라 상정하여 스마트폰을 통한 사용자의 호출 시 차량을 자동으로 출차 시키거나, 출입 기록을 효과적으로 관리할 수 있는 관리자용 어플리케이션 등 다양한 아이디어가 제시되었다. 하지만 제한된 프로젝트 기간과 인력으로 인해, 실질적 구현을 포기하였다.

발전 방향

번호 추출 기능 개선

프로젝트 수행기간 중 개선하지 못한 차량 전체 이미지 내 번호 추출 기능의 인식률을 개선하고자 한다. 더 나아가, 영상 내의 실시간 번호추출을 목표로 프로젝트 역량을 개발해 가고자 한다.

해시함수 적용

해시함수를 활용하여, 기존에 시스템내 저장되던 차량정보, 결제관련 정보 등 다양한 민감정보를 비 식별 화하여 활용할 수 있도록 개선할 계획이다. 이를 위해 적절한 솔트 값을 선택하는 방법을 연구해 볼 예정이다.

부가 서비스 구현

차량 정보 및 사용자 정보 등 기존 시스템 정보자원을 활용하여, 다양한 부가서비스 구현을 시도하고자 한다. 위에서 언급한 기능 외에 다양한 부가서비스를 구상하여, 서비스 자체의 가치를 향상시키고자 한다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published