1. 목표
개요
이 Codelab에서는 실시간 교통정보 동영상을 모니터링하는 Vertex AI Vision 애플리케이션을 엔드 투 엔드로 만드는 데 중점을 둡니다. 선행 학습된 특수 모델인 숙박 인원 분석을 사용합니다. 내장 기능을 사용하여 다음 항목을 캡처합니다.
- 특정 선에서 도로를 건너는 차량과 사람의 수를 셉니다.
- 도로의 고정된 지역에 있는 차량/사람의 수를 셉니다.
- 도로의 모든 부분에서 정체를 감지합니다.
학습할 내용
- 스트리밍할 동영상을 수집하도록 VM을 설정하는 방법
- Vertex AI Vision에서 애플리케이션을 만드는 방법
- 인원/차량 수 분석에서 사용할 수 있는 다양한 기능 및 사용 방법
- 앱 배포 방법
- 스토리지 Vertex AI Vision의 미디어 웨어하우스에서 동영상을 검색하는 방법입니다.
- 출력을 BigQuery에 연결하고, SQL 쿼리를 작성하여 모델의 json 출력에서 유용한 정보를 추출하고, Looker Studio에서 실시간으로 결과를 시각화하는 방법
2. 시작하기 전에
- Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다. 참고: 이 절차에서 생성한 리소스를 유지하지 않으려면 기존 프로젝트를 선택하지 말고 프로젝트를 새로 만드세요. 이러한 단계가 완료되면 프로젝트를 삭제하여 프로젝트와 연결된 모든 리소스를 삭제할 수 있습니다. 프로젝트 선택기로 이동
- Cloud 프로젝트에 결제가 사용 설정되어 있어야 하므로 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.
- Compute Engine 및 Vision AI API를 사용 설정합니다. API 사용 설정
서비스 계정 만들기:
- Google Cloud Console에서 서비스 계정 만들기 페이지로 이동합니다. 서비스 계정 만들기로 이동
- 프로젝트를 선택합니다.
- 서비스 계정 이름 필드에 이름을 입력합니다. Google Cloud 콘솔에서 이 이름을 기준으로 서비스 계정 ID 필드를 채웁니다. 서비스 계정 설명 필드에 설명을 입력합니다. 예를 들어 빠른 시작의 서비스 계정입니다.
- 만들고 계속하기를 클릭합니다.
- 프로젝트에 대한 액세스 권한을 제공하려면 서비스 계정에 다음 역할을 부여합니다. Vision AI > Compute Engine Vision AI 편집자 > Compute 인스턴스 관리자 (베타), 스토리지 > 스토리지 객체 뷰어 † 역할 선택 목록에서 역할을 선택합니다. 역할을 추가하려면 다른 역할 추가를 클릭하고 역할을 각각 추가합니다. 참고: 역할 필드는 서비스 계정이 프로젝트에서 액세스할 수 있는 리소스에 영향을 줍니다. 이러한 역할을 취소하거나 나중에 추가 역할을 부여할 수 있습니다. 프로덕션 환경에서는 소유자, 편집자 또는 뷰어 역할을 부여하지 마세요. 대신 필요에 맞는 사전 정의된 역할 또는 맞춤 역할을 부여합니다.
- 계속을 클릭합니다.
- 완료를 클릭하여 서비스 계정 만들기를 마칩니다. 브라우저 창을 닫지 마세요. 다음 단계에서 사용합니다.
서비스 계정 키 만들기:
- Google Cloud 콘솔에서 만든 서비스 계정의 이메일 주소를 클릭합니다.
- 키를 클릭합니다.
- 키 추가를 클릭한 후 새 키 만들기를 클릭합니다.
- 만들기를 클릭합니다. JSON 키 파일이 컴퓨터에 다운로드됩니다.
- 닫기를 클릭합니다.
- Google Cloud CLI를 설치 및 초기화합니다.
† 이 역할은 Cloud Storage 버킷에서 샘플 동영상 파일을 복사하는 경우에만 필요합니다.
3. 동영상을 스트리밍하도록 VM 설정
점유율 분석에서 앱을 만들기 전에 나중에 앱에서 사용할 수 있는 스트림을 등록해야 합니다.
이 튜토리얼에서는 동영상을 호스팅하는 Compute Engine VM 인스턴스를 만들고 이 스트리밍 동영상 데이터를 VM에서 전송합니다.
Linux VM 만들기
Compute Engine VM 인스턴스에서 동영상을 전송하는 첫 번째 단계는 VM 인스턴스를 만드는 것입니다.
- 콘솔에서 VM 인스턴스 페이지로 이동합니다. VM 인스턴스로 이동
- 프로젝트를 선택하고 계속을 클릭합니다.
- 인스턴스 만들기를 클릭합니다.
- VM의 이름을 지정합니다. 자세한 내용은 리소스 이름 지정 규칙을 참고하세요.
- 선택사항: 이 VM의 영역을 변경합니다. Compute Engine은 각 리전 내의 영역 목록을 무작위로 선택하여 여러 영역에서 사용하도록 권장합니다.
- 나머지 기본 옵션을 수락합니다. 이러한 옵션에 대한 자세한 내용은 VM 만들기 및 시작을 참조하세요.
- 만들기를 클릭하여 VM을 만들고 시작합니다.
VM 환경 설정
VM이 시작된 후 콘솔을 사용하여 브라우저에서 SSH를 통해 VM에 연결할 수 있습니다. 그런 다음 vaictl 명령줄 도구를 다운로드하여 스트림으로 동영상을 수집할 수 있습니다.
VM에 대한 SSH 연결 설정
- 콘솔에서 VM 인스턴스 페이지로 이동합니다. VM 인스턴스로 이동
- 생성한 인스턴스 줄의 연결 섹션에서 SSH를 클릭합니다. 그러면 새 브라우저 창에서 SSH 연결이 열립니다.
vaictl 명령줄 도구 다운로드
- 브라우저에서 SSH를 통해 연결 창에서 다음 명령어를 사용하여 Vertex AI Vision (vaictl) 명령줄 도구를 다운로드합니다.
wget https://github.com/google/visionai/releases/download/v0.0.4/visionai_0.0-4_amd64.deb
- 다음 명령어를 실행하여 명령줄 도구를 설치합니다.
sudo apt install ./visionai_0.0-4_amd64.deb
- 다음 명령어를 실행하여 설치를 테스트할 수 있습니다.
vaictl --help
4. 스트리밍을 위한 동영상 파일 수집
VM 환경을 설정한 후 샘플 동영상 파일을 복사한 다음 vaictl을 사용하여 동영상 데이터를 점유율 분석 앱으로 스트리밍할 수 있습니다.
Cloud 콘솔에서 Vision AI API를 활성화하여 시작하세요.
새 스트림 등록
- Vertex AI Vision의 왼쪽 패널에서 스트림 탭을 클릭합니다.
- '등록'을 클릭합니다.
- 스트림 이름에 'traffic-stream'을 입력합니다.
- 리전에 'us-central1'을 입력합니다.
- 등록 클릭
스트림이 등록되기까지 몇 분 정도 걸립니다.
VM에 샘플 동영상 복사하기
- VM의 브라우저에서 SSH를 통해 연결 창에서 다음 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 .
VM에서 동영상을 스트리밍하고 스트림으로 데이터를 수집합니다.
- 이 로컬 동영상 파일을 앱 입력 스트림으로 전송하려면 다음 명령어를 사용합니다. 다음과 같이 대체해야 합니다.
- 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
- 이 명령어는 동영상 파일을 스트림으로 스트리밍합니다. –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 대시보드의 스트림 탭에서 트래픽 스트림 스트림을 선택하여 동영상 피드를 볼 수 있습니다.
Google Cloud 콘솔에서 스트림으로 수집되는 동영상의 실시간 뷰입니다. 동영상 크레딧: 엘리자베스 마보, Pixabay (모자이크 현상 추가)
5. 애플리케이션 만들기
첫 번째 단계는 데이터를 처리하는 앱을 만드는 것입니다. 앱은 다음을 연결하는 자동화된 파이프라인으로 생각할 수 있습니다.
- 데이터 수집: 동영상 피드가 스트림으로 처리됩니다.
- 데이터 분석: 수집 후 AI(컴퓨터 비전) 모델을 추가할 수 있습니다.
- 데이터 저장: 두 가지 버전의 동영상 피드 (원본 스트림과 AI 모델에서 처리한 스트림)를 미디어 웨어하우스에 저장할 수 있습니다.
Google Cloud 콘솔에서 앱은 그래프로 표시됩니다.
빈 앱 만들기
앱 그래프를 채우려면 먼저 빈 앱을 만들어야 합니다.
Google Cloud 콘솔에서 앱을 만듭니다.
- Google Cloud 콘솔로 이동합니다.
- Vertex AI Vision 대시보드의 애플리케이션 탭을 엽니다.
- 추가 만들기 버튼을 클릭합니다.
- 앱 이름으로 traffic-app을 입력하고 리전을 선택합니다.
- 만들기를 클릭합니다.
앱 구성요소 노드 추가
빈 애플리케이션을 만든 후에는 앱 그래프에 3개의 노드를 추가할 수 있습니다.
- 수집 노드: 사용자가 만든 Compute Engine VM 인스턴스에서 전송된 데이터를 수집하는 스트림 리소스입니다.
- 처리 노드: 수집된 데이터에 대해 작동하는 점유율 분석 모델입니다.
- 저장소 노드: 처리된 동영상을 저장하고 메타데이터 저장소 역할을 하는 미디어 웨어하우스. 메타데이터 저장소에는 수집된 동영상 데이터에 대한 분석 정보와 AI 모델에서 추론한 정보가 포함됩니다.
콘솔에서 앱에 구성요소 노드를 추가합니다.
- Vertex AI Vision 대시보드의 애플리케이션 탭을 엽니다. 애플리케이션 탭으로 이동
- Traffic-app 줄에서 그래프 보기를 선택합니다. 그러면 처리 파이프라인의 그래프 시각화로 이동합니다.
데이터 수집 노드 추가
- 입력 스트림 노드를 추가하려면 사이드 메뉴의 커넥터 섹션에서 스트림 옵션을 선택합니다.
- 열리는 스트림 메뉴의 소스 섹션에서 스트림 추가를 선택합니다.
- 스트림 추가 메뉴에서 새 스트림 등록을 선택하고 트래픽 스트림을 스트림 이름으로 추가합니다.
- 앱 그래프에 스트림을 추가하려면 스트림 추가를 클릭합니다.
데이터 처리 노드 추가
- 점유율 모델 노드를 추가하려면 사이드 메뉴의 특수 모델 섹션에서 숙박 인원 분석 옵션을 선택합니다.
- 기본 선택 항목인 사람과 차량은 그대로 둡니다.
- 선 교차에 선 추가 다중 지점 선 도구를 사용하여 자동차 또는 사람이 내리거나 들어가는 위치를 감지해야 하는 선을 그립니다.
- 활성 구역을 그려 해당 구역에 있는 사람/차량 수를 계산합니다.
- 활성 영역이 그려진 경우 정체를 감지할 수 있도록 체류 시간 설정을 추가합니다.
- (현재 활성 영역과 선 교차는 동시에 지원되지 않습니다. 한 번에 하나의 기능만 사용하세요.)
데이터 스토리지 노드 추가
- 출력 대상 (스토리지) 노드를 추가하려면 사이드 메뉴의 커넥터 섹션에서 Vertex AI Vision의 미디어 웨어하우스 옵션을 선택합니다.
- Vertex AI Vision의 미디어 웨어하우스 메뉴에서 웨어하우스 연결을 클릭합니다.
- 웨어하우스 연결 메뉴에서 새 웨어하우스 만들기를 선택합니다. 웨어하우스 트래픽 웨어하우스의 이름을 지정하고 TTL 기간은 14일로 둡니다.
- 만들기 버튼을 클릭하여 웨어하우스를 추가합니다.
6. BigQuery 테이블에 출력 연결
BigQuery 커넥터를 Vertex AI Vision 앱에 추가하면 연결된 모든 앱 모델 출력이 대상 테이블로 수집됩니다.
자체 BigQuery 테이블을 만들고 앱에 BigQuery 커넥터를 추가할 때 이 테이블을 지정하거나 Vertex AI Vision 앱 플랫폼에서 자동으로 테이블을 만들도록 할 수 있습니다.
자동 테이블 생성
Vertex AI Vision 앱 플랫폼에서 테이블을 자동으로 만들도록 하면 BigQuery 커넥터 노드를 추가할 때 이 옵션을 지정할 수 있습니다.
자동 테이블 생성을 사용하려면 다음 데이터 세트 및 테이블 조건이 적용됩니다.
- 데이터 세트: 자동으로 생성되는 데이터 세트 이름은 visionai_dataset입니다.
- 테이블: 자동으로 생성되는 테이블 이름은 visionai_dataset.APPLICATION_ID입니다.
- 오류 처리:
- 동일한 데이터 세트에 동일한 이름의 테이블이 있는 경우 자동으로 생성되지 않습니다.
- Vertex AI Vision 대시보드의 애플리케이션 탭을 엽니다. 애플리케이션 탭으로 이동
- 목록에서 애플리케이션 이름 옆에 있는 앱 보기를 선택합니다.
- 애플리케이션 빌더 페이지의 커넥터 섹션에서 BigQuery를 선택합니다.
- BigQuery path 필드는 비워 둡니다.
- 매장 메타데이터에서 '숙박 인원 분석'만 선택합니다. 스트림을 선택 해제하세요.
최종 앱 그래프는 다음과 같이 표시됩니다.
7. 사용을 위해 앱 배포하기
필요한 모든 구성요소를 갖춘 엔드 투 엔드 앱을 빌드한 후 앱을 사용하기 위한 마지막 단계는 앱을 배포하는 것입니다.
- Vertex AI Vision 대시보드의 애플리케이션 탭을 엽니다. 애플리케이션 탭으로 이동
- 목록에서 트래픽 앱 앱 옆에 있는 그래프 보기를 선택합니다.
- 애플리케이션 그래프 빌더 페이지에서 배포 버튼을 클릭합니다.
- 다음 확인 대화상자에서 배포를 선택합니다. 배포 작업을 완료하는 데 몇 분 정도 걸릴 수 있습니다. 배포가 완료되면 노드 옆에 녹색 체크표시가 나타납니다.
8. 스토리지 웨어하우스에서 동영상 콘텐츠 검색
동영상 데이터를 처리 앱으로 수집한 후에는 분석된 동영상 데이터를 확인하고 점유율 분석 정보를 기반으로 데이터를 검색할 수 있습니다.
- Vertex AI Vision 대시보드의 웨어하우스 탭을 엽니다. 웨어하우스 탭으로 이동
- 목록에서 트래픽 웨어하우스 웨어하우스를 찾고 애셋 보기를 클릭합니다.
- 인물 수 또는 차량 수 섹션에서 최소 값을 1로, 최대 값을 5로 설정합니다.
- Vertex AI Vision의 미디어 웨어하우스에 저장된 처리된 동영상 데이터를 필터링하려면 검색을 클릭합니다.
Google Cloud 콘솔의 검색 기준과 일치하는 저장된 동영상 데이터의 뷰입니다. 동영상 크레딧: 엘리자베스 마보, Pixabay (검색 기준 적용)
9. BigQuery 테이블의 출력 분석
BigQuery로 이동
데이터 세트 선택: visionai_dataset
APPLICATION_ID (이 경우 traffic-app) 표를 선택합니다.
테이블 이름 오른쪽에 있는 점 3개를 클릭하고 쿼리를 클릭합니다.
다음 쿼리를 작성하세요.
Query1: 분당 각 줄을 지나는 차량 수를 확인하는 쿼리
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
위의 쿼리에서는 '차량'을 대상: 'Person' Person을 집계할 수 있습니다.
이 Codelab에서는 Query1 전용 샘플 데이터와 시각화를 보여줍니다. Query2에서도 유사한 프로세스를 따를 수 있습니다.
오른쪽 사이드 메뉴에서 '데이터 탐색'을 클릭하고 'Looker Studio로 탐색'을 선택합니다.
'측정기준' 창에 시간을 추가하고 시간 구성을 날짜-시간으로 변경합니다. '세부 측정기준'에서는 line_id를 추가합니다.
위 그래프는 각 선을 통과하는 분당 차량/사람의 수를 보여줍니다.
짙은 파란색 막대와 하늘색 막대는 서로 다른 두 개의 선 ID를 나타냅니다.
10. 축하합니다
축하합니다. 실습을 완료하셨습니다.
정리
이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.
프로젝트 삭제
개별 리소스 삭제
리소스
https://cloud.google.com/vision-ai/docs/overview
https://cloud.google.com/vision-ai/docs/occupancy-count-tutorial
의견