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 Console에서 서비스 계정 만들기 페이지로 이동합니다. 서비스 계정 만들기로 이동
  2. 프로젝트를 선택합니다.
  3. 서비스 계정 이름 필드에 이름을 입력합니다. Google Cloud 콘솔에서 이 이름을 기준으로 서비스 계정 ID 필드를 채웁니다. 서비스 계정 설명 필드에 설명을 입력합니다. 예를 들어 빠른 시작의 서비스 계정입니다.
  4. 만들고 계속하기를 클릭합니다.
  5. 프로젝트에 대한 액세스 권한을 제공하려면 서비스 계정에 다음 역할을 부여합니다. Vision AI > Compute Engine Vision AI 편집자 > 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입니다. 자세한 내용은 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 대시보드의 스트림 탭에서 트래픽 스트림 스트림을 선택하여 동영상 피드를 볼 수 있습니다.

스트림 탭으로 이동

로컬 저장소에 결과 보내기

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

시작 부분에 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 - 이미지에서 좌표 가져오기를 참조하세요.

주석 처리된 영역 제외

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. 조도인, F. 포리클리, J. 콘라드, P. Ishwar, changedetection.net: A new change Detection benchmark 데이터세트, Proc. CVPR-2012, 프로비던스, RIB, 변화 감지에 대한 IEEE 워크숍 (CDW-2012), 6월 16~21일, 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이 얼마나 유용했나요?

<ph type="x-smartling-placeholder"></ph> 매우 유용함 보통