'가디언'은 군 CCTV를 자동으로 감시하는 영상 감시 웹 어플리케이션입니다.
-
개발 배경
-
최근 몇몇 부대에서 위병소 경계 실패가 일어나면서 경계 근무 강조
"작전에 실패한 장수는 용서할 수 있어도 경계에 실패한 장수는 용서할 수 없다."
이러한 대사가 있는 만큼 경계 근무는 군 부대에서 중요한 일입니다.
하지만 어디어디 위병소 뚫려서 민간인이 들어왔지만 뒤늦게 식별됐다는 경계 근무 실패 사례를 접하게 되었고
이러한 사례들을 바탕으로 경계 근무가 강조되고 있습니다. -
감시병이 다수의 CCTV 동시 감시
한 감시병이 10대 이상의 CCTV를 동시 감시해 한 스크린을 집중하면 다른 스크린은 감시하기 벅차 사고 발생의 우려가 있습니다. -
사소한 움직임 감지에 무분별한 경보음
움직임 감지 기능이 존재하는 CCTV는 나뭇잎의 흔들림, 갑작스런 빛의 변화 등에 취약하여 끝도 없이 비프음을 울립니다. 이러한 이유로 감시병들은 움직임이 있든 말든 비프음을 신경쓰지않게 되었습니다.
-
-
개발 목표
-
CCTV 내 사람과 차량 식별, 움직임 동선 파악 자동화
설정된 영역 안에서 사람 또는 차량 식별 시 상황일지가 작성되며 발견된 객체가 움직임이 없어질 경우 이동 경로를 추적해줍니다. -
식별된 과거 상황 데이터베이스 조회
식별된 데이터와 자동 녹화 영상은 언제든지 조회 가능하여 사고 추적에 도움을 줍니다. -
사용자가 인지할 수 있는 TTS 경보음
움직임 감지가 일어나면 울리는 비프음이 아닌 정확히 사람과 차량만 탐지하였을 때 TTS로 사람 또는 차량 감지를 알립니다.
-
발표 영상 | 시연영상 |
---|---|
Google Drive | Google Drive |
2020 국방오픈소스아카데미 해커톤 - GUARDIAN 개발 후기
RTSP 스트리밍 및 상황일지 작성 |
---|
네트워크 카메라 또는 DVR에서 지원하는 RTSP 스트림 데이터를 웹에서 보여줍니다. |
사람 및 차량 감지 |
---|
YOLO기반 Object Detection으로 사람 및 자동차를 식별합니다. |
감지 후 이동 거리 추적 시각화 및 자동 녹화 |
---|
해당 객체가 움직임이 없어지면 경로를 추적하여 사용자에게 보여줍니다. |
확실한 감지를 했을 때 |
(감지~움직임 감지 끝) 분기를 녹화하여 사용자에게 보여줍니다. |
자동 녹화 된 영상 프리뷰 |
---|
위 예제에서 탐지된 자동 녹화 영상입니다. |
일별 시계열 통계 |
---|
일별로 데이터를 기록하여 0~24시까지 감지된 정보를 알려줍니다. |
과거 식별 데이터 스트리밍 |
---|
통계에서 해당 시간을 선택할 시 그 시간대에 감지됐던 식별 동영상을 볼 수 있습니다. |
- ECMAScript 6 지원 브라우저 사용
- 권장: Google Chrome 버젼 77 이상
- Golang 설치
- IP Camera 또는 RTSP 스트리밍을 지원하는 DVR
-
주요 기술 선정 이유
-
Golang : 영상 감시 프로젝트는 사이즈가 큰 실시간 데이터를 처리하기 때문에 퍼포먼스, 동시성, HTTP를 모두 갖춘 Go언어를 선택했습니다.
-
OpenCV : 컴퓨터비전 작업이 많은 프로젝트인 만큼 오픈소스인 'OpenCV' 라이브러리를 선택했습니다.
-
Darknet Yolov4-tiny: YOLO 모델 자체는 실시간 물체 감지를 위해 태어났습니다.
개발 환경이 VM에서 제한됐기 때문에 적은 CPU 코어에서도 운용할 수 있는 Tiny 모델을 선택했습니다.
-
React : 웹 어플리케이션 개발에 용이한 프론트엔드 프레임워크입니다.
-
-
Backend
golang | Echo | OpenCV | mongoDB |
---|---|---|---|
- FrontEnd
TypeScript | React.js | Antd UI Framework | Socket.io | Video.js |
---|---|---|---|---|
- Infra
Docker |
---|
- Machine Learning
Darknet YOLOv4 |
---|
GoCV 사용을 위한 OpenCV 라이브러리 설치
> go get -u -d gocv.io/x/gocv
> cd $GOPATH/src/gocv.io/x/gocv
> make install
프론트엔드 모듈 설치
> git clone https://github.com/osamhack2020/WEB_GUARDIAN_GUARDIAN.git
> cd frontend
> yarn install
가상 CCTV 환경 구축
> git clone https://github.com/gron1gh1/docker-rtsp-video-streaming.git
> cd docker-rtsp-video-streaming
> vi .env
# Modify .env file
> HOST_PORT={Port to be actually serviced}
> VIDEO_FILE ={Video File to be actually streamed}
> docker-compose up -d
데이터베이스 실행
> cd infra/mongo
# 데이터베이스 패스워드 설정
> echo MONGO_PW={set_password} > .env
> docker-compose up -d
프론트엔드 실행
> cd frontend
> yarn start
백엔드 실행
> cd backend
# 데이터베이스 패스워드 설정
> echo {set_password} > MONGO_PW
> go run cv_core.go cv_motion_liner.go cv_util.go http.go cv_motion.go cv_yolo.go mongo.go :8081
백엔드 실행 (Docker)
# OpenCV 라이브러리를 설치하지 않았을 때 쓰는 방법입니다.
# 데이터베이스 패스워드 설정
> cd WEB_GUARDIAN_GUARDIAN
> docker -v $PWD/backend:/ gocv/opencv 'go run cv_core.go cv_motion_liner.go cv_util.go http.go cv_motion.go cv_yolo.go mongo.go :8081'
> echo {set_password} > MONGO_PW
> go run cv_core.go cv_motion_liner.go cv_util.go http.go cv_motion.go cv_yolo.go mongo.go :8081
인터넷 브라우저 접속 http://localhost:8080
- 강선규 ([email protected]), Github Id: gron1gh1
- 신기철 ([email protected]), Github Id: skck0226
- 장성호 ([email protected]), Github Id: JangSeongHo99
- 백승민 ([email protected]), Github Id: me9min
- 이승규 ([email protected]), Github Id: seungy0
- 오택환 ([email protected]), Github Id:jamesoh3928