Vertex AI Vision 트래픽 모니터링 앱

1. 목표

개요

이 Codelab에서는 실시간 교통 동영상 영상을 모니터링하는 Vertex AI Vision 애플리케이션을 엔드 투 엔드로 만드는 방법을 중점적으로 다룹니다. 사전 학습된 전문 모델 점유 분석의 내장 기능을 사용하여 다음을 캡처합니다.

  • 특정 선에서 도로를 건너는 차량과 사람의 수를 셉니다.
  • 도로의 고정된 지역에 있는 차량/사람의 수를 셉니다.
  • 도로의 어느 부분에서든 혼잡을 감지합니다.

학습할 내용

  • 스트리밍할 동영상을 수집하도록 VM을 설정하는 방법
  • Vertex AI Vision에서 애플리케이션을 만드는 방법
  • 숙박 인원 분석에서 제공하는 다양한 기능과 사용 방법
  • 앱 배포 방법
  • 스토리지 Vertex AI Vision의 미디어 창고에서 동영상을 검색하는 방법
  • 출력을 BigQuery에 연결하고, SQL 쿼리를 작성하여 모델의 json 출력에서 유용한 정보를 추출하고, Looker Studio에서 실시간으로 결과를 시각화하는 방법

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. 동영상을 스트리밍하도록 VM 설정

점유 분석에서 앱을 만들기 전에 나중에 앱에서 사용할 수 있는 스트림을 등록해야 합니다.

이 튜토리얼에서는 동영상을 호스팅하는 Compute Engine VM 인스턴스를 만들고 VM에서 스트리밍 동영상 데이터를 전송합니다.

Linux VM 만들기

Compute Engine VM 인스턴스에서 동영상을 전송하는 첫 번째 단계는 VM 인스턴스를 만드는 것입니다.

  1. 콘솔에서 VM 인스턴스 페이지로 이동합니다. VM 인스턴스로 이동
  2. 프로젝트를 선택하고 계속을 클릭합니다.
  3. 인스턴스 만들기를 클릭합니다.
  4. VM의 이름을 지정합니다. 자세한 내용은 리소스 이름 지정 규칙을 참고하세요.
  5. 선택사항: 이 VM의 영역을 변경합니다. Compute Engine은 각 리전 내의 영역 목록을 무작위로 선택하여 여러 영역에서 사용하도록 권장합니다.
  6. 나머지 기본 옵션을 수락합니다. 이러한 옵션에 대한 자세한 내용은 VM 만들기 및 시작을 참고하세요.
  7. 만들기를 클릭하여 VM을 만들고 시작합니다.

VM 환경 설정

VM이 시작된 후 콘솔을 사용하여 브라우저에서 SSH를 통해 VM에 연결할 수 있습니다. 그런 다음 vaictl 명령줄 도구를 다운로드하여 스트림으로 동영상을 수집할 수 있습니다.

VM에 대한 SSH 연결 설정

  1. 콘솔에서 VM 인스턴스 페이지로 이동합니다. VM 인스턴스로 이동
  2. 만든 인스턴스 행의 연결 섹션에서 SSH를 클릭합니다. 그러면 새 브라우저 창에서 SSH 연결이 열립니다. UI의 SSH 옵션

vaictl 명령줄 도구 다운로드

  1. 브라우저 내 SSH 창에서 다음 명령어를 사용하여 Vertex AI Vision (vaictl) 명령줄 도구를 다운로드합니다.
wget https://github.com/google/visionai/releases/download/v0.0.4/visionai_0.0-4_amd64.deb
  1. 다음 명령어를 실행하여 명령줄 도구를 설치합니다.
sudo apt install ./visionai_0.0-4_amd64.deb
  1. 다음 명령어를 실행하여 설치를 테스트할 수 있습니다.
vaictl --help

4. 스트리밍을 위해 동영상 파일 처리

VM 환경을 설정한 후 샘플 동영상 파일을 복사한 다음 vaictl을 사용하여 동영상 데이터를 점유 분석 앱으로 스트리밍할 수 있습니다.

Cloud 콘솔에서 Vision AI API를 활성화하여 시작하세요.

새 스트림 등록

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

스트림이 등록되기까지 몇 분 정도 걸립니다.

VM에 샘플 동영상 복사하기

  1. VM의 SSH-in-browser 창에서 다음 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 .

VM에서 동영상을 스트리밍하고 스트림에 데이터를 처리합니다.

  1. 이 로컬 동영상 파일을 앱 입력 스트림으로 전송하려면 다음 명령어를 사용합니다. 다음과 같이 변수를 바꿔야 합니다.
  • 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
export LOCAL_FILE=street_vehicles_people.mp4
  1. 이 명령어는 동영상 파일을 스트림으로 스트리밍합니다. –loop 플래그를 사용하면 명령어를 중지할 때까지 동영상이 스트림에 반복 재생됩니다. 이 명령어를 백그라운드 작업으로 실행하므로 VM이 연결 해제된 후에도 계속 스트리밍됩니다.
  • ( 시작에 nohup을 추가하고 끝에 '&'를 추가하여 백그라운드 작업으로 만듭니다.)
nohup vaictl -p $PROJECT_ID \
    -l $LOCATION_ID \
    -c application-cluster-0 \
    --service-endpoint visionai.googleapis.com \
send video-file to streams 'traffic-stream' --file-path $LOCAL_FILE --loop &

vaictl 처리 작업을 시작하고 동영상이 대시보드에 표시되기까지 약 100초가 걸릴 수 있습니다.

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

스트림 탭으로 이동

UI에서 스트리밍되는 라이브 동영상 뷰Google Cloud 콘솔에서 스트림으로 수집되는 동영상의 실시간 뷰입니다. 동영상 크레딧: Pixabay엘리자베스 마버 (모자이크 처리 추가)

5. 애플리케이션 만들기

첫 번째 단계는 데이터를 처리하는 앱을 만드는 것입니다. 앱은 다음을 연결하는 자동화된 파이프라인으로 간주할 수 있습니다.

  • 데이터 수집: 동영상 피드가 스트림으로 처리됩니다.
  • 데이터 분석: 처리 후 AI(컴퓨터 비전) 모델을 추가할 수 있습니다.
  • 데이터 저장: 두 가지 버전의 동영상 피드 (원본 스트림과 AI 모델에서 처리한 스트림)를 미디어 웨어하우스에 저장할 수 있습니다.

Google Cloud 콘솔에서 앱은 그래프로 표시됩니다.

빈 앱 만들기

앱 그래프를 채우려면 먼저 빈 앱을 만들어야 합니다.

Google Cloud 콘솔에서 앱을 만듭니다.

  1. Google Cloud 콘솔로 이동합니다.
  2. Vertex AI Vision 대시보드의 애플리케이션 탭을 엽니다.

애플리케이션 탭으로 이동

  1. 추가 만들기 버튼을 클릭합니다.
  2. 앱 이름으로 traffic-app을 입력하고 지역을 선택합니다.
  3. 만들기를 클릭합니다.

앱 구성요소 노드 추가

빈 애플리케이션을 만든 후 앱 그래프에 다음 세 노드를 추가할 수 있습니다.

  1. 처리 노드: 내가 만든 Compute Engine VM 인스턴스에서 전송된 데이터를 처리하는 스트림 리소스입니다.
  2. 처리 노드: 처리된 데이터에 작용하는 점유 분석 모델입니다.
  3. 스토리지 노드: 처리된 동영상을 저장하고 메타데이터 저장소 역할을 하는 미디어 웨어하우스입니다. 메타데이터 저장소에는 처리된 동영상 데이터에 관한 분석 정보와 AI 모델에서 추론한 정보가 포함됩니다.

콘솔에서 앱에 구성요소 노드를 추가합니다.

  1. Vertex AI Vision 대시보드의 애플리케이션 탭을 엽니다. 애플리케이션 탭으로 이동
  2. Traffic-app 줄에서 그래프 보기를 선택합니다. 그러면 처리 파이프라인의 그래프 시각화가 표시됩니다.

데이터 처리 노드 추가

  1. 입력 스트림 노드를 추가하려면 사이드 메뉴의 커넥터 섹션에서 스트림 옵션을 선택합니다.
  2. 열리는 스트림 메뉴의 소스 섹션에서 스트림 추가를 선택합니다.
  3. 스트림 추가 메뉴에서 새 스트림 등록을 선택하고 스트림 이름으로 traffic-stream을 추가합니다.
  4. 앱 그래프에 스트림을 추가하려면 스트림 추가를 클릭합니다.

데이터 처리 노드 추가

  1. 숙박 인원 모델 노드를 추가하려면 사이드 메뉴의 전문 모델 섹션에서 숙박 인원 분석 옵션을 선택합니다.
  2. 기본 선택사항인 사람차량을 그대로 둡니다.
  3. 선 교차에 선 추가 다중 점 선 도구를 사용하여 출입하는 자동차나 사람을 감지해야 하는 곳에 선을 그립니다.
  4. 활성 영역을 그려 해당 영역의 사람/차량을 집계합니다.
  5. 활성 영역이 그려진 경우 정체를 감지할 수 있도록 체류 시간 설정을 추가합니다.
  • (현재 활성 영역과 선 교차는 동시에 지원되지 않습니다. 한 번에 하나의 기능만 사용하세요.)

3acdb6f1e8474e07.png ce63449d601995e9.png

194c54d2bbcf7e8a.png

데이터 저장소 노드 추가

  1. 출력 대상 (스토리지) 노드를 추가하려면 사이드 메뉴의 커넥터 섹션에서 Vertex AI Vision의 미디어 웨어하우스 옵션을 선택합니다.
  2. Vertex AI Vision의 미디어 웨어하우스 메뉴에서 웨어하우스 연결을 클릭합니다.
  3. 웨어하우스 연결 메뉴에서 새 웨어하우스 만들기를 선택합니다. 창고 이름을 traffic-warehouse로 지정하고 TTL 기간을 14일로 둡니다.
  4. 만들기 버튼을 클릭하여 웨어하우스를 추가합니다.

6. 출력을 BigQuery 테이블에 연결

Vertex AI Vision 앱에 BigQuery 커넥터를 추가하면 연결된 모든 앱 모델 출력이 대상 테이블에 처리됩니다.

자체 BigQuery 테이블을 만들고 앱에 BigQuery 커넥터를 추가할 때 이 테이블을 지정하거나 Vertex AI Vision 앱 플랫폼에서 자동으로 테이블을 만들도록 할 수 있습니다.

자동 테이블 생성

Vertex AI Vision 앱 플랫폼에서 테이블을 자동으로 만들도록 허용하는 경우 BigQuery 커넥터 노드를 추가할 때 이 옵션을 지정할 수 있습니다.

자동 테이블 생성을 사용하려면 다음 데이터 세트 및 테이블 조건이 적용됩니다.

  • 데이터 세트: 자동으로 생성된 데이터 세트 이름은 visionai_dataset입니다.
  • 테이블: 자동으로 생성된 테이블 이름은 visionai_dataset.APPLICATION_ID입니다.
  • 오류 처리:
  • 동일한 데이터 세트에 동일한 이름의 테이블이 있으면 자동 생성되지 않습니다.
  1. Vertex AI Vision 대시보드의 애플리케이션 탭을 엽니다. 애플리케이션 탭으로 이동
  2. 목록에서 애플리케이션 이름 옆에 있는 앱 보기를 선택합니다.
  3. 애플리케이션 빌더 페이지의 커넥터 섹션에서 BigQuery를 선택합니다.
  4. BigQuery 경로 필드는 비워 둡니다. ee0b67d4ab2263d.png
  5. 저장소 메타데이터 위치: '점유율 분석'만 선택하고 스트림을 선택 해제합니다.

최종 앱 그래프는 다음과 같이 표시됩니다.

1787242465fd6da7.png

7. 사용을 위해 앱 배포하기

필요한 모든 구성요소로 엔드 투 엔드 앱을 빌드한 후 앱을 사용하기 위한 마지막 단계는 앱을 배포하는 것입니다.

  1. Vertex AI Vision 대시보드의 애플리케이션 탭을 엽니다. 애플리케이션 탭으로 이동
  2. 목록에서 트래픽 앱 앱 옆에 있는 그래프 보기를 선택합니다.
  3. 애플리케이션 그래프 빌더 페이지에서 배포 버튼을 클릭합니다.
  4. 다음 확인 대화상자에서 배포를 선택합니다. 배포 작업을 완료하는 데 몇 분 정도 걸릴 수 있습니다. 배포가 완료되면 노드 옆에 녹색 체크표시가 나타납니다. ee78bbf00e5db898.png

8. 저장소 창고에서 동영상 콘텐츠 검색

동영상 데이터를 처리 앱에 수집한 후 분석된 동영상 데이터를 확인하고, 점유 분석 정보를 기반으로 데이터를 검색할 수 있습니다.

  1. Vertex AI Vision 대시보드의 웨어하우스 탭을 엽니다. 창고 탭으로 이동
  2. 목록에서 traffic-warehouse 창고를 찾아 애셋 보기를 클릭합니다.
  3. 인물 수 또는 차량 수 섹션에서 최소 값을 1로, 최대 값을 5로 설정합니다.
  4. Vertex AI Vision의 미디어 창고에 저장된 처리된 동영상 데이터를 필터링하려면 검색을 클릭합니다.

e636361b19738c8d.png

Google Cloud 콘솔의 검색 기준과 일치하는 저장된 동영상 데이터 보기 동영상 크레딧: Pixabay엘리자베스 마버 (검색 기준 적용)

9. BigQuery 테이블에서 출력 분석

BigQuery로 이동

데이터 세트 선택: visionai_dataset

테이블: APPLICATION_ID (이 경우 traffic-app)를 선택합니다.

테이블 이름 오른쪽에 있는 점 3개를 클릭하고 '쿼리'를 클릭합니다.

다음 쿼리를 작성합니다.

쿼리 1: 분당 각 선을 통과하는 차량 수를 확인하는 쿼리

abc.sql

—- Get list of active marked lines for each timeframe
WITH line_array AS (
  SELECT
  t.ingestion_time AS ingestion_time,
  JSON_QUERY_ARRAY(t.annotation.stats["crossingLineCounts"]) AS lines
  FROM
  `PROJ_ID.visionai_dataset.APP_ID` AS t
),
—- Flatten active lines to get individual entities details
flattened AS (
  SELECT
  line_array.ingestion_time,
  JSON_VALUE(line.annotation.id) as line_id,
  JSON_QUERY_ARRAY(line["positiveDirectionCounts"]) AS entities
  FROM line_array, unnest(line_array.lines) as line
 )
—- Generate aggregate vehicle count per zone w.r.t time 
SELECT
  STRING(TIMESTAMP_TRUNC(ingestion_time, MINUTE) ) AS time, line_id,
  SUM(INT64(entity["count"])) as vehicle_count
FROM
  flattened, UNNEST(flattened.entities) AS entity
WHERE JSON_VALUE(entity['entity']['labelString']) = 'Vehicle'
GROUP BY time, line_id

쿼리 2: 각 영역에서 분당 차량 수를 확인하는 쿼리

—- Get list of active zones for each timeframe
WITH zone_array AS (
     SELECT
     t.ingestion_time AS ingestion_time,
     JSON_QUERY_ARRAY(t.annotation.stats["activeZoneCounts"]) AS zones
     FROM
     `PROJ_ID.visionai_dataset.APP_ID` AS t
),
—- Flatten active zones to get individual entities details
flattened AS (
   SELECT zone_array.ingestion_time, JSON_VALUE(zone.annotation.id) as zone_id,
         JSON_QUERY_ARRAY(zone["counts"]) AS entities
   FROM zone_array, unnest(zone_array.zones) as zone
 )
—- Generate aggregate vehicle count per zone w.r.t time 
SELECT 
STRING(TIMESTAMP_TRUNC(ingestion_time, MINUTE) ) AS time, 
zone_id,
SUM(INT64(entity["count"])) as vehicle_count
FROM flattened, UNNEST(flattened.entities) AS entity
WHERE JSON_VALUE(entity['entity']['labelString']) = 'Vehicle'
GROUP BY time, zone_id

위 쿼리에서 '차량'을 '사람'으로 변경하여 사람 수를 집계할 수 있습니다.

이 Codelab에서는 Query1의 샘플 데이터와 시각화만 보여줍니다. Query2에도 유사한 프로세스를 따를 수 있습니다.

e6fd891f3a46246.png

오른쪽 사이드 메뉴에서 '데이터 탐색'을 클릭하고 'Looker Studio로 탐색'을 선택합니다.

9e737ddb4d0d25b6.png

'측정기준' 창에서 시간을 추가하고 시간 구성을 날짜-시간으로 변경합니다. '세부 측정기준'에 line_id를 추가합니다. b5da9704ccd8db.png

위 그래프는 각 선을 통과하는 분당 차량/사람의 수를 보여줍니다.

진한 파란색과 연한 파란색 막대는 두 개의 서로 다른 line-id를 나타냅니다.

10. 축하합니다

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

정리

이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.

프로젝트 삭제

개별 리소스 삭제

리소스

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

https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial

의견

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

설문조사

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

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

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

매우 유용함 다소 유용함