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 명령어를 사용하여 샘플 동영상을 복사할 수 있습니다. 다음 변수를 바꿉니다.
  • 소스: 사용할 동영상 파일의 위치입니다. 자체 동영상 파일 소스 (예: 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입니다. 자세한 내용은 클라우드 위치를 참고하세요.
  • 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 Console로 결과 전송

vaictl을 사용하여 출력 동영상 데이터를 클라우드 콘솔로 스트리밍할 수 있습니다. 먼저 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 대시보드의 스트림 탭에서 동영상 피드를 확인할 수 있습니다.

스트림 탭으로 이동

로컬 스토리지에 결과 전송

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

시작 부분에 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 플래그를 사용하여 영역 다각형의 좌표를 입력합니다.
문자열입니다. 영역 주석의 기본값은 비어 있습니다.

영역 주석은 사용자가 숨기거나 집중하고 싶은 프레임의 영역을 나타내는 사용자의 문자열 입력입니다. 영역에 주석을 달려면 사용자가 영역의 각 노드에 대해 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 - 이미지에서 좌표 가져오기를 참고하세요.

주석이 달린 영역 제외

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

주석이 달린 영역 제외는 사용자가 동작 감지에서 주석이 달린 영역을 제외할지 여부를 나타내는 불리언 입력입니다.

  • true로 설정하면 주석이 달린 영역이 음수 영역으로 작동합니다. 주석이 추가된 영역의 움직임은 감지되지 않습니다.

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

  • false로 설정하면 움직임 감지가 집중되는 영역이 양수 영역으로 작동합니다.

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

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

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

동영상 준비

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

동영상 제공: N. Goyette, P.-M. Jodoin, F. Porikli, J. Konrad, 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

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

동작 필터로 동영상 스트림 전송

모션 이벤트를 클라우드 콘솔로 전송

vaictl을 사용하여 출력 동영상 데이터를 클라우드 콘솔로 스트리밍할 수 있습니다. 먼저 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이 얼마나 유용했나요?

매우 유용함 다소 유용함