Vertex AI Vision 모션 필터

1. 목표

개요

이 Codelab에서는 모션 필터링 기능을 사용하여 동영상을 전송하는 방법을 보여주는 엔드 투 엔드 Vertex AI Vision 애플리케이션을 만드는 데 중점을 둡니다. 이 튜토리얼에서는 모션 필터 구성의 다양한 매개변수를 살펴봅니다.

  • 움직임 감지 민감도
  • 최소 이벤트 길이
  • 룩백 기간
  • 쿨다운 시간
  • 움직임 감지 영역

학습할 내용

  • 스트리밍을 위해 동영상을 처리하는 방법
  • 모션 필터에서 사용할 수 있는 다양한 기능과 사용 방법
  • 모션 필터의 통계를 확인할 수 있는 위치
  • 동영상에 따라 설정을 조정하는 방법

2. 시작하기 전에

  1. Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다. 참고: 이 절차에서 생성한 리소스를 유지하지 않으려면 기존 프로젝트를 선택하지 말고 프로젝트를 새로 만드세요. 이러한 단계가 완료되면 프로젝트를 삭제하여 프로젝트와 연결된 모든 리소스를 삭제할 수 있습니다. 프로젝트 선택기로 이동
  2. Cloud 프로젝트에 결제가 사용 설정되어 있어야 하므로 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.
  3. Compute Engine 및 Vision AI API를 사용 설정합니다. API 사용 설정

서비스 계정 만들기:

  1. Google Cloud 콘솔에서 서비스 계정 만들기 페이지로 이동합니다. 서비스 계정 만들기로 이동
  2. 프로젝트를 선택합니다.
  3. 서비스 계정 이름 필드에 이름을 입력합니다. Google Cloud 콘솔은 이 이름을 기반으로 서비스 계정 ID 필드를 채웁니다. 서비스 계정 설명 입력란에 설명을 입력합니다. 예를 들어 빠른 시작의 서비스 계정입니다.
  4. 만들고 계속하기를 클릭합니다.
  5. 프로젝트에 대한 액세스 권한을 제공하려면 서비스 계정에 Vision AI > Vision AI 편집기, Compute Engine > Compute 인스턴스 관리자(베타), 스토리지 > 스토리지 객체 뷰어 † 역할을 부여합니다 . 역할 선택 목록에서 역할을 선택합니다. 역할을 추가하려면 다른 역할 추가를 클릭하고 각 역할을 추가합니다. 참고: 역할 필드는 서비스 계정이 프로젝트에서 액세스할 수 있는 리소스에 영향을 줍니다. 이러한 역할을 취소하거나 나중에 추가 역할을 부여할 수 있습니다. 프로덕션 환경에서는 소유자, 편집자 또는 뷰어 역할을 부여하지 마세요. 대신 필요에 맞는 사전 정의된 역할 또는 맞춤 역할을 부여합니다.
  6. 계속을 클릭합니다.
  7. 완료를 클릭하여 서비스 계정 만들기를 마칩니다. 브라우저 창을 닫지 마세요. 다음 단계에서 사용합니다.

서비스 계정 키 만들기:

  1. Google Cloud 콘솔에서 만든 서비스 계정의 이메일 주소를 클릭합니다.
  2. 를 클릭합니다.
  3. 키 추가를 클릭한 후 새 키 만들기를 클릭합니다.
  4. 만들기를 클릭합니다. JSON 키 파일이 컴퓨터에 다운로드됩니다.
  5. 닫기를 클릭합니다.
  6. Google Cloud CLI를 설치하고 초기화합니다.

† Cloud Storage 버킷에서 샘플 동영상 파일을 복사하는 경우에만 필요한 역할입니다.

3. 모션 필터

모션 필터는 모션 이벤트가 포함된 모션 및 제품 동영상 세그먼트를 캡처합니다. 움직임 민감도, 최소 이벤트 길이, 전환 확인 기간, 대기 기간, 움직임 감지 영역을 조정하여 사용자가 필요에 따라 필터 기반을 구성할 수 있습니다.

모션 필터 구성

모션 필터에는 맞춤설정에 사용할 수 있는 5가지 구성이 있습니다.

  1. 모션 민감도: 모션이 트리거되는 민감도입니다.
  2. 최소 이벤트 길이: 모션 이벤트가 캡처되는 최소 길이입니다.
  3. 전환 확인 기간: 움직임 이벤트가 감지되기 전에 동영상 녹화를 시작하는 시간입니다.
  4. 쿨다운 기간: 모션 이벤트가 종료된 후 지정된 기간의 쿨다운이 발생합니다. 쿨다운 기간에는 모션 이벤트가 트리거되지 않습니다.
  5. 움직임 감지 영역: 움직임 감지를 실행할 위치를 지정하도록 사용자가 구성한 영역입니다. (이후 섹션에서 자세히 설명)

움직임 민감도

vaictl 명령어에 motion_detection_sensitivity 플래그를 사용합니다.
문자열입니다. 기본 매체입니다. 낮음, 중간, 높음 중에서 선택할 수 있습니다.

움직임 감지 민감도가 높을수록 노이즈 및 작은 움직임에 더 민감합니다. 이 설정은 움직이는 작은 물체 (예: 멀리 있는 사람)와 안정적인 조명이 있는 환경에 권장됩니다.

반면에 낮은 민감도는 조명 간섭에 덜 민감합니다. 이 설정은 야외 환경과 같이 조명 간섭이 더 많은 경우와 노이즈가 더 많을 수 있는 낮은 동영상 품질에 적합합니다. 이 설정은 가장 공격적인 필터링이므로 작은 물체의 움직임은 무시될 수 있습니다.

최소 이벤트 길이

vaictl 명령어에 min_event_length_in_seconds 플래그를 사용합니다.
정수입니다. 기본값은 10초입니다. 범위는 0초에서 3,600초입니다.

프레임에서 모션 이벤트 세그먼트가 감지되면 파싱되는 모션 이벤트 동영상의 최소 길이입니다.

전환 확인 기간

vaictl 명령어에 look_back_window_in_seconds 플래그를 사용합니다.
정수입니다. 기본값은 3초입니다. 범위는 0초에서 3,600초입니다.

전환 확인 기간은 모션 이벤트가 감지되기 전에 캐시된 기간입니다. 모션 이벤트가 감지되기 몇 초 전에 프레임에서 어떤 일이 일어나는지 확인하는 데 유용합니다.

대기 기간

vaictl 명령어에 cool_down_period_in_seconds 플래그를 사용합니다.
정수입니다. 기본값은 300초입니다. 범위는 0초에서 3,600초입니다.

대기 기간은 움직임 이벤트가 캡처된 후 움직임 감지가 일시중지되는 시간입니다. 대기 기간에는 움직임을 감지하기 위한 계산이 실행되지 않습니다.

4. 기본 모션 필터 예시

Vaictl SDK 매뉴얼

모션 필터가 있는 입력 스트림의 vaictl 매뉴얼을 확인하려면 아래 명령어를 사용합니다.

vaictl send video-file applying motion-filter -h

샘플 동영상 준비하기

  1. 다음 gsutil cp 명령어를 사용하여 샘플 동영상을 복사할 수 있습니다. 다음 변수를 바꿉니다.
  • SOURCE: 사용할 동영상 파일의 위치입니다. 자체 동영상 파일 소스 (예: gs://BUCKET_NAME/FILENAME.mp4)를 사용하거나 샘플 동영상 (gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4)(사람과 차량이 등장하는 동영상, 소스)을 사용할 수 있습니다.
export SOURCE=gs://cloud-samples-data/vertex-ai-vision/street_vehicles_people.mp4
gsutil cp $SOURCE .

환경 변수 준비

제공된 명령어 템플릿을 사용하려면 아래 환경 변수를 설정하세요.

vaictl 변수

  • PROJECT_ID: Google Cloud 프로젝트 ID입니다.
  • LOCATION_ID: 위치 ID입니다. 예를 들면 us-central1입니다. 자세한 내용은 Cloud 위치를 참고하세요.
  • LOCAL_FILE: 로컬 동영상 파일의 파일 이름입니다. 예: Street_vehicles_people.mp4).
  • –loop 플래그: 선택사항입니다. 파일 데이터를 연속 재생하여 스트리밍을 시뮬레이션합니다.
export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1

모션 필터 변수

  • MOTION_SENSITIVITY: 움직임 감지의 민감도입니다.
  • MIN_EVENT_LENGTH: 모션 이벤트의 최소 길이입니다.
  • LOOK_BACK_WINDOW: 움직임 이벤트의 첫 번째 움직임 전에 캡처할 시간입니다.
  • COOL_DOWN_PERIOD: 움직임 이벤트가 캡처된 후 움직임 감지가 일시 중지되는 기간입니다.
export MOTION_SENSITIVITY=<low or medium or high>
export MIN_EVENT_LENGTH=<0-3600>
export LOOK_BACK_WINDOW=<0-3600>
export COOL_DOWN_PERIOD=<0-3600>

모션 필터 명령어 준비

입력 스트림과 함께 모션 필터를 사용하는 방법에는 두 가지가 있습니다. 첫 번째 옵션은 Cloud 콘솔의 스트림으로 모션 이벤트를 전송하는 것입니다. 두 번째 옵션은 모션 이벤트를 로컬 저장소로 전송하는 것입니다.

Cloud 콘솔로 결과 전송

vaictl을 사용하여 출력 동영상 데이터를 Cloud 콘솔로 스트리밍할 수 있습니다. 먼저 Cloud 콘솔에서 Vision AI API를 활성화합니다.

새 스트림 등록

  1. Vertex AI Vision의 왼쪽 패널에서 스트림 탭을 클릭합니다.
  2. 등록을 클릭합니다.
  3. 스트림 이름에 motion-detection-stream를 입력합니다.
  4. 리전에 us-central1을(를) 입력하세요.
  5. 등록을 클릭합니다.

결과를 스트림으로 전송

이 명령어는 동영상 파일을 스트림으로 스트리밍합니다. –loop 플래그를 사용하면 명령어를 중지할 때까지 동영상이 스트림에 반복 재생됩니다. 계속 스트리밍되도록 이 명령어를 백그라운드 작업으로 실행합니다.

시작 부분에 nohup를 추가하고 끝에 &를 추가하여 백그라운드 작업으로 만듭니다.

INPUT_VIDEO=street_vehicles_people.mp4

vaictl -p $PROJECT \
       -l $LOCATION_ID \
       -c application-cluster-0 \
       --service-endpoint visionai.googleapis.com \
  send video-file  --file-path $INPUT_VIDEO \
  applying motion-filter
         --motion-sensitivity=$MOTION_SENSITIVITY \
         --min-event-length=$MIN_EVENT_LENGTH \
         --lookback-length=$LOOK_BACK_WINDOW \
         --cooldown-length=$COOL_DOWN_PERIOD \
  to streams motion-detection-stream --loop

vaictl 수집 작업을 시작한 후 동영상이 대시보드에 표시되는 데 최대 100초가 걸릴 수 있습니다.

스트림 처리를 사용할 수 있게 되면 Vertex AI Vision 대시보드의 스트림 탭에서 traffic-stream 스트림을 선택하여 동영상 피드를 볼 수 있습니다.

스트림 탭으로 이동

결과를 로컬 스토리지로 전송

이 명령어는 동영상 파일을 스트림으로 스트리밍합니다.

시작 부분에 nohup를 추가하고 끝에 &를 추가하여 백그라운드 작업으로 만듭니다.

INPUT_VIDEO=street_vehicles_people.mp4
OUTPUT_PATH=<path_to_store_motion_events_on_local_disk>

nohup vaictl -p $PROJECT \
             -l $LOCATION_ID \
             -c application-cluster-0 \
             --service-endpoint visionai.googleapis.com \
  send video-file  --file-path $INPUT_VIDEO \
  applying motion-filter
         --motion-sensitivity=$MOTION_SENSITIVITY \
         --min-event-length=$MIN_EVENT_LENGTH \
         --lookback-length=$LOOK_BACK_WINDOW \
         --cooldown-length=$COOL_DOWN_PERIOD \
  to mp4file --mp4-file-path=$OUTPUT_PATH --loop

5. 움직임 감지 영역

이 섹션에서는 모션 감지 영역의 사용과 구성 방법을 자세히 알아봅니다. 이 영역은 관심 없는 지역에서 발생하는 움직임을 마스킹하여 움직임 감지 기능을 개선하기 위한 것입니다.

움직임 감지 구역에는 두 가지 유형이 있습니다. (1) 주석이 달린 영역에서만 움직임 감지가 실행되는 양성 영역, (2) 주석이 달린 영역에서 움직임 감지가 무시되는 음성 영역입니다.

영역 주석

vaictl 명령어에서 zone_annotation 플래그를 사용하여 영역 다각형의 좌표를 입력합니다.
문자열입니다. 영역 주석의 기본값은 비어 있습니다.

Zone 주석은 사용자가 숨기거나 중점을 두려는 프레임의 영역을 나타내는 사용자의 문자열 입력입니다. 영역에 주석을 추가하려면 사용자가 영역의 각 노드에 대해 x축과 y축의 이미지 좌표를 지정해야 합니다. 다각형을 형성하려면 영역에 노드가 3개 이상 있어야 합니다. 프레임에는 여러 영역이 있을 수 있습니다. 영역이 서로 겹치는 경우 두 영역이 모두 적용되는 영역은 계속 포함됩니다.

영역 주석에는 따라야 할 특정 입력 문법이 있습니다.

  • 단일 노드를 나타내려면 :를 사용하여 이미지 좌표의 x축과 y축을 연결합니다. 예를 들어 왼쪽 상단의 (0,0) 노드는 0:0로 표시됩니다.
  • 단일 영역에 있는 모든 노드를 표시하려면 ;를 사용하여 노드를 연결합니다. 예를 들어 (0,0), (100,0), (100,100), (0, 100) 노드가 있는 영역의 경우 영역은 0:0;100:0;100:100;0:100로 표시됩니다. 노드는 항상 서로 연결된 노드로 입력합니다. 순서는 시계 방향 또는 시계 반대 방향이 될 수 있습니다.

움직임 감지 영역 - 정사각형*노드 4개가 있는 정사각형 영역입니다.

움직임 감지 영역 - 삼각형*노드가 3개인 삼각형 영역입니다.

  • 단일 프레임에서 여러 영역을 표시하려면 -를 사용하여 여러 영역을 연결합니다. 예를 들어 (0,0), (100,0), (100,100), (0,100)(120,120), (110,150), (200,160)를 모두 입력하려면 입력 영역 주석은 0:0;100:0;100:100;0:100-120:120;110:150;200:160가 됩니다.

움직임 감지 영역 - 두 영역이 있는 프레임*프레임 내의 두 영역

이미지에서 좌표를 가져오는 데 도움이 되는 도구가 온라인에 있습니다. 예를 보려면 Wolfram - Get Coordinates from Image를 참고하세요.

주석 처리된 영역 제외

vaictl 명령어에서 exclude_annotated_zone 플래그를 사용하여 영역 내 또는 영역 외에서 모션 감지를 구성합니다.
불리언. 기본값은 false입니다.

주석이 지정된 영역 제외는 사용자의 불리언 입력으로, 사용자가 움직임 감지에서 주석 처리된 영역을 제외할지 여부를 나타냅니다.

  • true로 설정하면 주석 처리된 영역이 음수 영역으로 작동합니다. 주석이 달린 영역에서는 모션이 감지되지 않습니다.

움직임 감지 영역 - 제외 옵션 *입력 영역 외부에서만 움직임 감지를 실행합니다.

  • false로 설정하면 감지 영역이 양성 영역으로 작동하여 움직임 감지에 집중합니다.

움직임 감지 영역 - 옵션 포함 *입력 영역에서만 움직임 감지를 실행합니다.

6. 움직임 감지 영역이 있는 모션 필터 예

이 예에서는 포그라운드에서 나무가 계속 움직이는 동영상을 예로 들겠습니다. 일반 모션 필터 설정에서는 모션 필터가 움직이는 나무를 '전체 동영상에서 계속 움직이는 것'으로 등록하므로 동영상에서 원본 동영상의 길이와 동일한 모션 이벤트가 하나만 생성됩니다. 하지만 모션 감지 영역을 사용하면 나무의 움직임을 적절하게 마스크 처리하고 자동차와 보행자의 움직임에 집중할 수 있습니다.

동영상 준비

샘플 동영상 (gs://cloud-samples-data/vertex-ai-vision/dynamic-background-fall.mp4)에는 www.changedetection.net의 나무와 자동차, 보행자 정보가 포함되어 있습니다.

동영상 크레딧: N. 고예트, P.-M. Jodoin, F. Porikli, J. 콘라드, P. Ishwar, changedetection.net: A new change detection benchmark dataset, in Proc. IEEE Workshop on Change Detection (CDW-2012) at CVPR-2012, Providence, RI, 16-21 Jun., 2012

환경 변수 준비

Google Cloud 프로젝트 변수

export PROJECT_ID=<Your Google Cloud project ID>
export LOCATION_ID=us-central1
export LOCAL_FILE=street_vehicles_people.mp4

기본 모션 필터 구성

export MOTION_SENSITIVITY=<low or medium or high>
export MIN_EVENT_LENGTH=<0-3600>
export LOOK_BACK_WINDOW=<0-3600>
export COOL_DOWN_PERIOD=<0-3600>

움직임 감지 영역 구성

아래에서 선택하여 모션 감지 영역의 다양한 사용 유형을 확인하세요.

움직임 감지의 트리를 제외합니다.

export ZONE_ANNOTATION="0:0;680:0;660:70;380:320;100:150"
export EXCLUDE_ANNOTATED_ZONE=true

움직임 감지 영역 - 예시 동영상의 주석이 달린 영역에서 움직임 감지를 제외합니다. *입력 영역 외부에서만 움직임 감지를 실행합니다.

거리에서 움직임을 감지합니다.

export ZONE_ANNOTATION="0:300;780:300;780:480;0:480"
export EXCLUDE_ANNOTATED_ZONE=false

움직임 감지 영역 - 예시 동영상의 주석이 달린 영역에서 움직임 감지 실행 *입력 영역 외부에서만 움직임 감지를 실행합니다.

모션 필터가 적용된 동영상 스트림 전송

모션 이벤트를 Cloud 콘솔로 전송

vaictl을 사용하여 출력 동영상 데이터를 Cloud 콘솔로 스트리밍할 수 있습니다. 먼저 Cloud 콘솔에서 Vision AI API를 활성화합니다.

새 스트림 등록

  1. Vertex AI Vision의 왼쪽 패널에서 스트림 탭을 클릭합니다.
  2. '등록'을 클릭합니다.
  3. 스트림 이름에 motion-detection-stream를 입력합니다.
  4. 리전에 us-central1을(를) 입력하세요.
  5. 등록을 클릭합니다.

결과를 스트림으로 전송

이 명령어는 동영상 파일을 스트림으로 스트리밍합니다. –loop 플래그를 사용하면 명령어를 중지할 때까지 동영상이 스트림에 반복 재생됩니다. 계속 스트리밍되도록 이 명령어를 백그라운드 작업으로 실행합니다.

시작 부분에 nohup를 추가하고 끝에 &를 추가하여 백그라운드 작업으로 만듭니다.

vaictl -p $PROJECT \
       -l $LOCATION_ID \
       -c application-cluster-0 \
       --service-endpoint visionai.googleapis.com \
  send video-file  --file-path $INPUT_VIDEO \
  applying motion-filter
         --motion-sensitivity=$MOTION_SENSITIVITY \
         --min-event-length=$MIN_EVENT_LENGTH \
         --lookback-length=$LOOK_BACK_WINDOW \
         --cooldown-length=$COOL_DOWN_PERIOD \
         --zone_annotation=ZONE_ANNOTATION \
         --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \
  to streams motion-detection-stream --loop

vaictl 수집 작업을 시작한 후 동영상이 대시보드에 표시되는 데 최대 100초가 걸릴 수 있습니다.

스트림 수집을 사용할 수 있게 되면 Vertex AI Vision 대시보드의 스트림 탭에서 트래픽 스트림 스트림을 선택하여 동영상 피드를 볼 수 있습니다.

스트림 탭으로 이동

결과를 로컬 스토리지로 전송

이 명령어는 동영상 파일을 스트림으로 스트리밍합니다. –loop 플래그를 사용하면 명령어를 중지할 때까지 동영상이 스트림에 반복 재생됩니다. 계속 스트리밍되도록 이 명령어를 백그라운드 작업으로 실행합니다.

시작 부분에 nohup를 추가하고 끝에 &를 추가하여 백그라운드 작업으로 만듭니다.

OUTPUT_PATH=<path_to_store_motion_events>

vaictl -p $PROJECT \
       -l $LOCATION_ID \
       -c application-cluster-0 \
       --service-endpoint visionai.googleapis.com \
  send video-file  --file-path $INPUT_VIDEO \
  applying motion-filter
         --motion-sensitivity=$MOTION_SENSITIVITY \
         --min-event-length=$MIN_EVENT_LENGTH \
         --lookback-length=$LOOK_BACK_WINDOW \
         --cooldown-length=$COOL_DOWN_PERIOD \
         --zone_annotation=$ZONE_ANNOTATION \
         --exclude_annotated_zone=$EXCLUDE_ANNOTATED_ZONE \
  to mp4file --mp4-file-path=$OUTPUT_PATH --loop

7. 축하합니다

축하합니다. 실습을 완료하셨습니다.

정리

이 튜토리얼에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 명령줄에서 ctrl + z를 사용하여 vaictl SDK 작업을 종료합니다.

리소스

https://cloud.google.com/vision-ai/docs/overview

https://cloud.google.com/vision-ai/docs/motion-filtering-model

https://cloud.google.com/vision-ai/docs/create-manage-streams

의견

여기를 클릭하여 의견 보내기

설문조사

이 튜토리얼을 어떻게 사용하실 계획인가요?

읽기만 할 계획입니다 읽은 다음 연습 활동을 완료할 계획입니다

이 Codelab이 얼마나 유용했나요?

매우 유용함 다소 유용함