1. 목표
개요
이 Codelab에서는 소매업 동영상 영상을 사용하여 대기열 크기를 모니터링하는 엔드 투 엔드 Vertex AI Vision 애플리케이션을 만드는 데 중점을 둡니다. 사전 학습된 전문 모델 점유율 분석 내장 기능을 사용하여 다음 사항을 캡처합니다.
- 줄을 서 있는 사람 수를 셉니다.
- 카운터에서 서비스를 받는 사람 수를 셉니다.
학습할 내용
- Vertex AI Vision에서 애플리케이션을 만들고 배포하는 방법
- 동영상 파일을 사용하여 RTSP 스트림을 설정하고 Jupyter 노트북에서 vaictl을 사용하여 스트림을 Vertex AI Vision에 수집하는 방법
- 재실률 분석 모델과 다양한 기능을 사용하는 방법
- 스토리지 Vertex AI Vision의 미디어 웨어하우스에서 동영상을 검색하는 방법
- 출력을 BigQuery에 연결하고, SQL 쿼리를 작성하여 모델의 JSON 출력에서 통계를 추출하고, 출력을 사용하여 원본 동영상에 라벨을 지정하고 주석을 추가하는 방법
비용:
Google Cloud에서 이 실습을 진행하는 데 드는 총 비용은 약 $2입니다.
2. 시작하기 전에
프로젝트를 만들고 API를 사용 설정합니다.
- Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 만들거나 선택합니다. 참고: 이 절차에서 생성한 리소스를 유지하지 않으려면 기존 프로젝트를 선택하지 말고 프로젝트를 새로 만드세요. 이러한 단계가 완료되면 프로젝트를 삭제하여 프로젝트와 연결된 모든 리소스를 삭제할 수 있습니다. 프로젝트 선택기로 이동
- Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.
- Compute Engine, Vertex API, Notebook API, Vision AI API를 사용 설정합니다. API 사용 설정
서비스 계정 만들기:
- Google Cloud 콘솔에서 서비스 계정 만들기 페이지로 이동합니다. 서비스 계정 만들기로 이동
- 프로젝트를 선택합니다.
- 서비스 계정 이름 필드에 이름을 입력합니다. Google Cloud 콘솔은 이 이름을 기반으로 서비스 계정 ID 필드를 채웁니다. 서비스 계정 설명 필드에 설명을 입력합니다. 예를 들어 빠른 시작을 위한 서비스 계정입니다.
- 만들고 계속하기를 클릭합니다.
- 프로젝트에 대한 액세스 권한을 제공하려면 서비스 계정에 다음 역할을 부여합니다.
- Vision AI > Vision AI 편집기
- Compute Engine > Compute 인스턴스 관리자 (베타)
- BigQuery > BigQuery 관리자
역할 선택 목록에서 역할을 선택합니다. 역할을 추가하려면 다른 역할 추가를 클릭하고 각 역할을 추가합니다.
- 계속을 클릭합니다.
- 완료를 클릭하여 서비스 계정 만들기를 마칩니다. 브라우저 창을 닫지 마세요. 다음 단계에서 사용합니다.
3. Jupyter Notebook 설정
Occupancy Analytics에서 앱을 만들기 전에 나중에 앱에서 사용할 수 있는 스트림을 등록해야 합니다.
이 튜토리얼에서는 동영상을 호스팅하는 Jupyter 노트북 인스턴스를 만들고 노트북에서 스트리밍 동영상 데이터를 전송합니다. 빠른 실험에 매우 적합한 단일 위치에서 셸 명령어를 실행하고 맞춤 사전/사후 처리 코드를 실행할 수 있는 유연성을 제공하므로 Jupyter Notebook을 사용하고 있습니다. 이 노트북은 다음 용도로 사용됩니다.
- rtsp 서버를 백그라운드 프로세스로 실행
- vaictl 명령어를 백그라운드 프로세스로 실행
- 쿼리 및 처리 코드를 실행하여 점유율 분석 출력 분석
Jupyter 노트북 만들기
Jupyter Notebook 인스턴스에서 동영상을 전송하는 첫 번째 단계는 이전 단계에서 만든 서비스 계정으로 노트북을 만드는 것입니다.
- 콘솔에서 Vertex AI 페이지로 이동합니다. Vertex AI Workbench로 이동
- 사용자 관리 노트북 클릭

- 새 노트북 > Tensorflow Enterprise 2.6 (LTS 사용) > GPU 사용 안 함을 클릭합니다.

- Jupyter 노트북의 이름을 입력합니다. 자세한 내용은 리소스 이름 지정 규칙을 참고하세요.

- 고급 옵션을 클릭합니다.
- 권한 섹션까지 아래로 스크롤합니다.
- Compute Engine 기본 서비스 계정 사용 옵션 선택 취소
- 이전 단계에서 만든 서비스 계정 이메일을 추가합니다. 만들기를 클릭합니다.

- 인스턴스가 생성되면 JupyterLab 열기를 클릭합니다.
4. 동영상을 스트리밍하도록 노트북 설정하기
Occupancy Analytics에서 앱을 만들기 전에 나중에 앱에서 사용할 수 있는 스트림을 등록해야 합니다.
이 튜토리얼에서는 Jupyter 노트북 인스턴스를 사용하여 동영상을 호스팅하고 노트북 터미널에서 스트리밍 동영상 데이터를 전송합니다.
vaictl 명령줄 도구 다운로드
- 열린 Jupyterlab 인스턴스에서 런처의 Notebook을 엽니다.

- 노트북 셀에서 다음 명령어를 사용하여 Vertex AI Vision (vaictl) 명령줄 도구, rtsp 서버 명령줄 도구, open-cv 도구를 다운로드합니다.
!wget -q https://github.com/aler9/rtsp-simple-server/releases/download/v0.20.4/rtsp-simple-server_v0.20.4_linux_amd64.tar.gz
!wget -q https://github.com/google/visionai/releases/download/v0.0.4/visionai_0.0-4_amd64.deb
!tar -xf rtsp-simple-server_v0.20.4_linux_amd64.tar.gz
!pip install opencv-python --quiet
!sudo apt-get -qq remove -y visionai
!sudo apt-get -qq install -y ./visionai_0.0-4_amd64.deb
!sudo apt-get -qq install -y ffmpeg
5. 스트리밍을 위해 동영상 파일 수집
필요한 명령줄 도구를 사용하여 노트북 환경을 설정한 후 샘플 동영상 파일을 복사하고 vaictl을 사용하여 동영상 데이터를 점유율 분석 앱으로 스트리밍할 수 있습니다.
새 스트림 등록
- Vertex AI Vision의 왼쪽 패널에서 스트림 탭을 클릭합니다.
- 상단의 등록 버튼을 클릭합니다.

- 스트림 이름에 'queue-stream'을 입력합니다.
- 리전에서 이전 단계의 노트북 생성 중에 선택한 것과 동일한 리전을 선택합니다.
- 등록을 클릭합니다.
샘플 동영상을 VM에 복사
- 노트북에서 다음 wget 명령어를 사용하여 샘플 동영상을 복사합니다.
!wget -q https://github.com/vagrantism/interesting-datasets/raw/main/video/collective_activity/seq25_h264.mp4
VM에서 동영상을 스트리밍하고 스트림에 데이터 수집
- 이 로컬 동영상 파일을 앱 입력 스트림으로 보내려면 노트북 셀에서 다음 명령어를 사용하세요. 다음 변수를 바꿔야 합니다.
- PROJECT_ID: Google Cloud 프로젝트 ID입니다.
- LOCATION: 위치 ID입니다. 예를 들면 us-central1입니다. 자세한 내용은 클라우드 위치를 참고하세요.
- LOCAL_FILE: 로컬 동영상 파일의 파일 이름입니다. 예를 들어
seq25_h264.mp4입니다.
PROJECT_ID='<Your Google Cloud project ID>'
LOCATION='<Your stream location>'
LOCAL_FILE='seq25_h264.mp4'
STREAM_NAME='queue-stream'
- rtsp 프로토콜로 동영상 파일을 스트리밍하는 rtsp-simple-server를 시작합니다.
import os
import time
import subprocess
subprocess.Popen(["nohup", "./rtsp-simple-server"], stdout=open('rtsp_out.log', 'a'), stderr=open('rtsp_err.log', 'a'), preexec_fn=os.setpgrp)
time.sleep(5)
- ffmpeg 명령줄 도구를 사용하여 rtsp 스트림에서 동영상을 반복합니다.
subprocess.Popen(["nohup", "ffmpeg", "-re", "-stream_loop", "-1", "-i", LOCAL_FILE, "-c", "copy", "-f", "rtsp", f"rtsp://localhost:8554/{LOCAL_FILE.split('.')[0]}"], stdout=open('ffmpeg_out.log', 'a'), stderr=open('ffmpeg_err.log', 'a'), preexec_fn=os.setpgrp)
time.sleep(5)
- vaictl 명령줄 도구를 사용하여 rtsp 서버 uri에서 이전 단계에서 만든 Vertex AI Vision 스트림 'queue-stream'으로 동영상을 스트리밍합니다.
subprocess.Popen(["nohup", "vaictl", "-p", PROJECT_ID, "-l", LOCATION, "-c", "application-cluster-0", "--service-endpoint", "visionai.googleapis.com", "send", "rtsp", "to", "streams", "queue-stream", "--rtsp-uri", f"rtsp://localhost:8554/{LOCAL_FILE.split('.')[0]}"], stdout=open('vaictl_out.log', 'a'), stderr=open('vaictl_err.log', 'a'), preexec_fn=os.setpgrp)
vaictl 수집 작업을 시작한 후 동영상이 대시보드에 표시되기까지 약 100초가 걸릴 수 있습니다.
스트림 수집이 완료되면 대기열 스트림을 선택하여 Vertex AI Vision 대시보드의 스트림 탭에서 동영상 피드를 확인할 수 있습니다.

6. 애플리케이션 만들기
첫 번째 단계는 데이터를 처리하는 앱을 만드는 것입니다. 앱은 다음을 연결하는 자동화된 파이프라인으로 생각할 수 있습니다.
- 데이터 수집: 동영상 피드가 스트림으로 수집됩니다.
- 데이터 분석: 수집 후 AI(컴퓨터 비전) 모델을 추가할 수 있습니다.
- 데이터 스토리지: 동영상 피드의 두 버전 (원본 스트림과 AI 모델에서 처리한 스트림)을 미디어 웨어하우스에 저장할 수 있습니다.
Google Cloud 콘솔에서 앱은 그래프로 표시됩니다.
빈 앱 만들기
앱 그래프를 채우려면 먼저 빈 앱을 만들어야 합니다.
Google Cloud 콘솔에서 앱을 만듭니다.
- Google Cloud 콘솔로 이동합니다.
- Vertex AI Vision 대시보드의 애플리케이션 탭을 엽니다. 애플리케이션 탭으로 이동
- 만들기 버튼을 클릭합니다.

- 앱 이름으로 'queue-app'을 입력하고 리전을 선택합니다.
- 만들기를 클릭합니다.
앱 구성요소 노드 추가
빈 애플리케이션을 만든 후에는 앱 그래프에 세 개의 노드를 추가할 수 있습니다.
- 수집 노드: 노트북에서 만든 rtsp 동영상 서버에서 전송된 데이터를 수집하는 스트림 리소스입니다.
- 처리 노드: 수집된 데이터를 기반으로 작동하는 재실 분석 모델입니다.
- 스토리지 노드: 처리된 동영상을 저장하고 메타데이터 저장소 역할을 하는 미디어 웨어하우스입니다. 메타데이터 저장소에는 수집된 동영상 데이터에 관한 분석 정보와 AI 모델에서 추론한 정보가 포함됩니다.
콘솔에서 앱에 구성요소 노드를 추가합니다.
- Vertex AI Vision 대시보드의 애플리케이션 탭을 엽니다. 애플리케이션 탭으로 이동
그러면 처리 파이프라인의 그래프 시각화로 이동합니다.
데이터 수집 노드 추가
- 입력 스트림 노드를 추가하려면 사이드 메뉴의 커넥터 섹션에서 스트림 옵션을 선택합니다.
- 열린 스트림 메뉴의 소스 섹션에서 스트림 추가를 선택합니다.
- 스트림 추가 메뉴에서 queue-stream을 선택합니다.
- 앱 그래프에 스트림을 추가하려면 스트림 추가를 클릭합니다.
데이터 처리 노드 추가
- 점유 수 모델 노드를 추가하려면 사이드 메뉴의 특수 모델 섹션에서 점유 분석 옵션을 선택합니다.
- 기본 선택사항인 사용자를 그대로 둡니다. 차량이 이미 선택되어 있다면 선택 해제합니다.

- '고급 옵션' 섹션에서 활성 영역/선 만들기 를 클릭합니다.

- 다각형 도구를 사용하여 활성 영역을 그려 해당 영역의 인원수를 집계합니다. 영역에 적절한 라벨을 지정합니다.

- 상단의 뒤로 화살표를 클릭합니다.

- 체크박스를 클릭하여 정체 감지를 위한 대기 시간 설정을 추가합니다.
