본문 바로가기
NVIDIA Jeston/Deepstream

Deepstream 를 이용하여 유동인구를 분석해보자!

by makepluscode 2022. 7. 15.
반응형

Deepstream 6.0 유동인구 분석 예제

NVIDIA Xavier NX devkit 에서 Deepstream 6.0 를 이용하여 유동인구를 분석할 수 있는 예제를 실행해본다.

Deepstream 이 관한 개발환경은 아래 포스팅을 참고한다.

2022.07.10 - [NVIDIA Jeston/Deepstream] - Deepstream 처음 설치하고 실행하기

2022.07.13 - [NVIDIA Jeston/Deepstream] - Deepstream graphviz dot 그래프를 이용한 시각화

2022.07.13 - [NVIDIA Jeston/Deepstream] - Deepstream 오브젝트 트래커 예제 실행하기

이 예제에서는 <엔비디아>에서 제공하는 deepstream-occupancy-analytic 모델과 <한국지능 정보 사회진흥원>에서 제작한  "유동 인구 분석을 위한 CCTV 영상"  데이터셋을 사용하였다.

엔비디아 deepstream-occupancy-analytic

NVIDIA Xavier NX devkit 에서 Deepstream 6.0 설치는 아래 포스팅을 참고한다.

2022.07.10 - [임베디드 컴퓨팅/nVidia Jetson] - [Jetson] Deepstream 6.0 설치하기

 

[Jetson] Deepstream 6.0 설치하기

JetPack4.6 에서 Deepstream 6.0 설치하기 NVIDIA Xavier NX devkit 에 apt-get 명령으로 Deepstream 6.0 설치하고 샘플 어플리케이션을 실행한다. Deepstream 6.0 설치하기 테스트 환경 NVIDIA Xavier NX devkit..

makepluscode.tistory.com

deepstream-occupancy-analytic 모델 다운로드

README.md 에 의하면 model.sh 를 실행하여 peoplenet.zip 를 다운로드하라고 되어있다. 2022년 7월 기준으로 model.sh 의 download link 에서 다운로드 되지 않는다. 아래의 경로에서 수동으로 다운로드 한다.

https://catalog.ngc.nvidia.com/orgs/nvidia/models/tlt_peoplenet

deepstream-occupancy-analytic 빌드하기

deepstream-occupancy-analytic 예제는 NVIDIA Deepstream SDK, Transfer Learning Toolkit(TLT) 및 사전 훈련된 모델 (Peoplenet) 을 사용하여 건물에 출입하는 사람을 계산하기 위한 샘플 어플리케이션이다.

어플리케이션을 실행하기 위해 deepstream 설치 위치에 deepstream-occupancy-analytic 을 복제한다.

$ cd /opt/nvidia/deepstream/deepstream-6.0/sources/apps/sample_apps
$ git clone $ https://github.com/NVIDIA-AI-IOT/deepstream-occupancy-analytics.git

Deepstream 6.0 에서 테스트하기 위해 ds_6.0 브랜치로 체크아웃 한다.

$ git checkout ds_6.0
$ git branch
* ds_6.0
  master

테스트를 위해 deepstream-occupancy-analyticmessage brocker 를 disable 한다.

$ git diff config/test5_config_file_src_infer_tlt.txt
diff --git a/config/test5_config_file_src_infer_tlt.txt b/config/test5_config_file_src_infer_tlt.txt
index 2a8cc2e..2243011 100644
--- a/config/test5_config_file_src_infer_tlt.txt
+++ b/config/test5_config_file_src_infer_tlt.txt
@@ -91,7 +91,7 @@ output-file=resnet.mp4
 source-id=0
 
 [sink1]
-enable=1
+enable=0
 #Type - 1=FakeSink 2=EglSink 3=File 4=UDPSink 5=nvoverlaysink 6=MsgConvBroker
 type=6
 msg-conv-config=dstest5_msgconv_sample_config.txt

Deepstream 6.0 으로 빌드할 경우, meta message 의 일부 field 가 빠져서 build error 가 발생한다. 어플리케이션에서 build error 발생하는 부분을 임시 삭제한다.

$ git diff deepstream_test5_app_main.c
diff --git a/deepstream_test5_app_main.c b/deepstream_test5_app_main.c
index bb0d985..5f5d2f0 100644
--- a/deepstream_test5_app_main.c
+++ b/deepstream_test5_app_main.c
@@ -311,7 +311,7 @@ meta_copy_func (gpointer data, gpointer user_data)
        }
     }
 
-       g_print(" %s %d source id: %d, Enter: %d, Exit: %d\n",__func__,__LINE__, dstMeta->source_id, dstMeta->lccum_cnt_entry, dstMeta->lccum_cnt_exit);
+//       g_print(" %s %d source id: %d, Enter: %d, Exit: %d\n",__func__,__LINE__, dstMeta->source_id, dstMeta->lccum_cnt_entry, dstMeta->lccum_cnt_exit);
 
     return dstMeta;
 }
@@ -410,10 +410,10 @@ generate_event_msg_meta (gpointer data, gint class_id, gboolean useTs,
     meta->type = NVDS_EVENT_ENTRY;
     meta->objType = NVDS_OBJECT_TYPE_PERSON;
     meta->objClassId = PERSON_ID;
-    meta->occupancy = obj_params->lccum_cnt;
-    meta->lccum_cnt_entry = obj_params->lcc_cnt_entry;
-    meta->lccum_cnt_exit = obj_params->lcc_cnt_exit ;
-    meta->source_id = obj_params->source_id;
+//    meta->occupancy = obj_params->lccum_cnt;
+//    meta->lccum_cnt_entry = obj_params->lcc_cnt_entry;
+//    meta->lccum_cnt_exit = obj_params->lcc_cnt_exit ;
+//    meta->source_id = obj_params->source_id;
 //    g_print("source id: %d, Enter: %d, Exit: %d\n", meta->source_id, meta->lccum_cnt_entry, meta->lccum_cnt_exit);
 
 }

터미널에서 CUDA_VER=10.2 와 함께 make 를 실행한다.

$ sudo CUDA_VER=10.2 make

deepstream-occupancy-analytic 실행하기

터미널에서 다음 명령어로 어플리케이션을 실행한다.

$ ./deepstream-test5-analytics -c config/test5_config_file_src_infer_tlt.txt

txt 파일의 uri 를 수정하면 입력되는 비디오 영상을 변경할 수 있다.

$ git diff config/test5_config_file_src_infer_tlt.txt
diff --git a/config/test5_config_file_src_infer_tlt.txt b/config/test5_config_file_src_infer_tlt.txt
index 2a8cc2e..2243011 100644
--- a/config/test5_config_file_src_infer_tlt.txt
+++ b/config/test5_config_file_src_infer_tlt.txt
@@ -53,7 +53,7 @@ nvbuf-memory-type=0
 enable=1
 #Type - 1=CameraV4L2 2=URI 3=MultiURI 4=RTSP
 type=3
-uri=file:///opt/nvidia/deepstream/deepstream-6.0/samples/streams/sample_1080p_h264.mp4
+uri=file:///home/nvidia/2021-09-09_14-45-00_thu_sunny_out_ye-ma_CD0001.mp4
 num-sources=1
 gpu-id=0
 nvbuf-memory-type=0

deepstream-occupancy-analytic 실행화면

 <한국지능 정보 사회진흥원>에서 제작한  "유동 인구 분석을 위한 CCTV 영상"  데이터셋을 사용하였다.

  • 2021-09-08_14-30-00_wed_sunny_out_se-yk_C12-0306_고2.mp4
  • 2021-09-09_14-45-00_thu_sunny_out_ye-ma_CD0001.mp4
  • 2021-09-09_16-30-00_thu_sunny_out_ye-ma_CD0002.mp4

2021-09-09_16-30-00_thu_sunny_out_ye-ma_CD0002.mp4 실행화면

2021-09-09_14-45-00_thu_sunny_out_ye-ma_CD0001.mp4 실행화면

2021-09-08_14-30-00_wed_sunny_out_se-yk_C12-0306_고2.mp4 실행화면

참고자료

본 예제에 사용된 deepstream-occupancy-analytic 모델은 아래 github 를 참고한다.

https://github.com/NVIDIA-AI-IOT/deepstream-occupancy-analytics

 

GitHub - NVIDIA-AI-IOT/deepstream-occupancy-analytics: This is a sample application for counting people entering/leaving in a bu

This is a sample application for counting people entering/leaving in a building using NVIDIA Deepstream SDK, Transfer Learning Toolkit (TLT), and pre-trained models. This application can be used to...

github.com

본 예제에서 사용된 <한국지능 정보 사회진흥원>에서 제작한  "유동 인구 분석을 위한 CCTV 영상"  데이터셋은 아래 link 를 참고한다.

https://aihub.or.kr/aihubdata/data/view.do?currMenu=115&topMenu=100 

 

AI-Hub

조회수 : 다운로드 : 신청하기 관심데이터 등록 관심

aihub.or.kr

Deepstream 이 관한 개발환경은 아래 포스팅을 참고한다.

2022.07.10 - [NVIDIA Jeston/Deepstream] - Deepstream 처음 설치하고 실행하기

2022.07.13 - [NVIDIA Jeston/Deepstream] - Deepstream graphviz dot 그래프를 이용한 시각화

2022.07.13 - [NVIDIA Jeston/Deepstream] - Deepstream 오브젝트 트래커 예제 실행하기

반응형